实现Modbus TCP多网段客户端应用】的更多相关文章

对于Modbus TCP来说与Modbus RTU和Modbus ASCII有比较大的区别,因为它是运行于以太网链路之上,是运行于TCP/IP协议之上的一种应用层协议.在协议栈的前两个版本中,Modbus TCP作为客户端时也存在一些局限性.我们将对这些不足作一定更新. 1.存在的不足 在原有的协议栈中,我们所封装的Modbus TCP客户端一个特定的客户端,即它只是一个客户端实例.在通常的应用中不会有什么问题,但在有些应用场合就会显现出它的局限性. 首先,作为一个特定的客户端,若是连接多个服务…
转自:http://blog.csdn.net/thebestleo/article/details/52269999 首先我要说明一下,本人新手一枚,本文仅为同样热爱学习的同学提供参考,有不 对的地方还请大家热心指出,本文只起到一个抛砖引玉的作用,希望看到本文的同学可 以从中学习到少许知识,也希望可以跟各位读者成为朋友,多多交流,使学习不再孤单 寂寞. 由于本文太长,顾分为两部分,第二部分连接 初识Modbus TCP/IP-------------C#编写Modbus TCP客户端程序(二)…
由于感觉上一次写的篇幅过长,所以新开一贴,继续介绍Modbus TCP/IP的初步认识, 书接上回 3).03(0x03)功能码--------读保持寄存器 请求与响应格式 这是一个请求读寄存器108-110 的实例: 发送数据为: 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x6B, 0x00, 0x03 程序如下: [csharp] view plain copy private void send03_Click(objec…
1.前言     使用modbus有些时间了,期间使用过modbus RTU也使用过modbus TCP,通过博文和大家分享一些MODBUS TCP的东西.在嵌入式中实现TCP就需要借助一个以太网协议栈,在这里我选择最简单的uIP协议栈.uIP协议栈简单易用方便上手,相比于LwIP无论是移植还是使用难度都低些,这样就可以把更多的精力花在modbus tcp协议本身而不必花大量的时间研究以太网协议栈.modbus协议栈为freemodbus   [其他有用的博文]     [1]uIP学习笔记  …
在最近的一个项目中需要实现Modbus TCP通讯,而选用的硬件平台则是STM32F103和W5500,软件平台则选用IAR EWAR6.4来实现. 1.移植千的准备工作 为了实现Modbus TCP通讯首先需要下载W5500的驱动源码,可以到WIZnet的官网下载: http://wizwiki.net/wiki/doku.php?id=products:w5500:driver 下载下来的压缩包,解压后如下图: 需要将ethernet文件夹拷贝到我们的项目目录中: 并在IAR的项目下添加相关…
修订版 1.0,1999 年3 月29 日Andy SwalesSchneider 电气公司aswales@modicon.com目录目录............................................................................................................................ 21.该规范的发展概况.............................................…
1. 引言 LwIP是嵌入式领域一个流行的以太网协议栈, LwIP开放源码,用C写成非常方便移植,并且支持socket接口,使用者可以集中精力处理应用功能. 本文就是LwIP socket使用的一个小结,使用的测试平台是stm32+enc28j60+lwip+uc/OS-II. 2. 使用socket 一个基本的socket建立顺序是: Server端: socket() bind() listen() accept() recv() Client端: socket() connect() se…
这一次我们封装Modbus TCP Client应用.同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能.我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用. 对于TCP客户端我们主要实现的功能有两个:其一是生成访问TCP服务器的命令,总共支持8中功能码.其二是对TCP服务器端返回的信息进行解析并根据结果进行各种操作,同样也是支持8中功能吗的操作.具体软件访问结构如下: 1.访问命令的生成 客户端作为主动交互端,需要向服务器发各种操作请求命令.所以对于TCP客户端来说,首先要…
在完成了前面的工作后,我们就可以实现有针对性的应用了,首先我们来实现Modbus TCP的服务器端应用.当然我们不是做具体的应用,而是对Modbus TCP的服务器端应用进行封装以供有需要时调用. 这里我们不涉及TCP的协议,这部分与Modbus没有必然联系,我们只是在其应用层运行Modbus协议而已. 对于Modbus TCP的服务器我们需要实现几个功能:首先是对接收到客户端命令进行解析,我们只实现前面提到的8中常用的功能吗的支持.其次在解析完成后,我们要实现对应各种功能码的操作.具体架构如下…
前言 本文将使用一个NuGet公开的组件技术来实现一个ModBus TCP的客户端,方便的对Modbus tcp的服务器进行读写,这个服务器可以是电脑端C#设计的,也可以是PLC实现的,也可以是其他任何支持这个通信协议的服务器. github地址:https://github.com/dathlin/HslCommunication 如果喜欢可以star或是fork,还可以打赏支持. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安装…
Modbus tcp 格式说明 通讯机制 附C#测试工具用于学习,测试   前言: 之前的博客介绍了如何用C#来读写modbus tcp服务器的数据,文章:http://www.cnblogs.com/dathlin/p/7885368.html 当然也有如何创建一个服务器文章:http://www.cnblogs.com/dathlin/p/7782315.html 但是上面的两篇文章是已经封装好的API,只要调用就可以实现功能了,对于想了解modbus tcp的原理的人可能就不适合了,最近有…
前言: 之前的博客介绍了如何用C#来读写modbus tcp服务器的数据,文章:http://www.cnblogs.com/dathlin/p/7885368.html 当然也有如何创建一个服务器文章:http://www.cnblogs.com/dathlin/p/7782315.html 但是上面的两篇文章是已经封装好的API,只要调用就可以实现功能了,对于想了解modbus tcp的原理的人可能就不适合了,最近有不少网友的想要了解这个协议,所以在这里再写一篇介绍Modbus tcp的文章…
TCP和RTU协议非常类似, MBAP Header长度共7个字节,分别为Transaction identifier(事务标识符),Protocol identifier(协议标识符),Length(长度),  Unitidentifier(单元标识符)组成,具体如下表所示: +------------+---------+-----------------------------+----------------------+----------------------------+ |  …
调试modbus  tcp 整理百度文库文档如下 <modbus-tcp-报文举例分析> <MODBUSTCP通讯报文> Client request: 19 B2 00 00 00 06 06 03 00 27 00 02 上面是modbus客户端发出的报文内容,为modbus tcp/ip协议格式,其前面的六个字节为头字节( header handle): 19 B2 00 00 00 06 19 B2 两个字节是Client发出的检验信息,Sever端只是需要将这两个字节的内…
1.该规范的发展概况                                    原始版本1997年9月3日作为公共评论的草案.     再版1999年3月29日,即修订版1.0.     没有大的技术改动,仅作了补充说明.增加了附录A和B作为对一些常用执行问题的回应. 该Modbus/TCP规范在万维网上公开发行.它表明开发者的意愿是把它作为工业自动化领域具有互用性的标准. 既然MODBUS和MODBUS/TCP作为事实上的“实际”标准,而且很多生产商已经实现了它的功能,此规范主要是…
前言:随着工业化的发展,目前越来越多的开发,从互联网走向传统行业.其中,工业领域也是其中之一,包括各大厂也都在陆陆续续加入工业4.0的进程当中. 工业领域,最核心的基础设施,应该是与下位硬件设备或程序进行通信有关的了,而下位机市场基本上是PLC的天下.而PLC产品就像编程语言一样,类型繁多,协议也多…
Java实现TCP之Echo客户端和服务端 代码内容 采用TCP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器console 原样返回给客户机在客户机console显示出来 代码实现 /* TCPEchoClient.java */ import java.io.*; import java.net.*; public class TCPEchoClient { public final static String s…
基于TCP协议的客户端 此客户端能用于下一篇博客的单线程服务器和多线程服务器 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.util.Scanner; import java…
TCP协议的客户端/服务器程序的一般流程 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回. 数据传输的过程: 建立连接后,TCP协议提供全双工的通信服务,但是一般的客户端/服务器程序的流程是由客户端主动发起…
python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立一个python server,监听指定端口, 如果该端口被远程连接访问,则获取远程连接,然后接收数据, 并且做出相应反馈. ''' import socket if __name__=="__main__": print "Server is starting" so…
DL/T645转ModbusTcp协议转换器 MRD-5021具有1 路RS485及1路以太网接口,最多支持同时采集5个DL/T645-1997或者5个2007协议国标电表设备,支持DL/T645协议的自适应,然后将所需要的采集数据转换为Modbus Tcp协议.方便和PLC.DCS.组态等工业相关设备对接. 说明书:http://files.cnblogs.com/mored/DLT645-ModbusTcp%E4%BA%A7%E5%93%81MRD-5021%E8%AF%B4%E6%98%8…
0 前言     本文使用freemodbus协议栈,在EasyARM i.mx287上实现了modbus tcp从机. 在该从机中定义了线圈寄存器.当中线圈寄存器地址较低的4位和EasyARM的P2.4至P2.5关联,通过modbus指令可控制GPIO的输出.本文改动自freemodbus 演示样例LINUXTCP.经过简单的改动也可用于其它Linux开发板.     [相关博文]     [EasyARM i.mx28学习笔记--文件IO方式操作GPIO]     [EasyARM i.mx…
modbus tcp数据报文结构 请求:00 00 00 00 00 06 09 03 00 00 00 01 响应:00 00 00 00 00 05 09 03 02 12 34 一次modbus tcp读取保持寄存器的通信分析(省略了ip/tcp头):从左向右分析该数据报文: 请求: 00 00为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文; 00 00表示协议标识符,00 00为modbus协议; 00 06为数据长度,用来指示接下来数据的长度,单位字节;…
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 不少仪器/设备都提供了数据采集的接口,其中不少是串口或网络的MODBUS/TCP协议. 串口是比较简单,但是较为古老的接口方式,现在的笔记本基本上都没有这种形式的接口了,如果软件开发在笔记本上进行的话,无法调试,或要绕一下用USB转串口的小设备,很不方便. 还好有前辈开发了虚拟串口软件,可以很方便的用于串口通讯的软件开发,我用的是VSPD(网盘).用虚拟串口软件开发有几方面的好处: 1.电脑/笔记本…
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 Client public class ModbusClient { public string Ip { get; } public int Port { get; } public short UnitIdentifier { get; } public IChannel Channel { get; private set; } private MultithreadEventLoopGroup group;…
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 DotNetty 作为一个半成品,我们不需要关注细节的实现,只需要关注自己的业务即可,所以最主要的就是处理 Codecs 和 Handler. 所有的 Codecs 和 Handler 均直接或间接继承自 ChannelHandlerAdapter.为什么要分为 Codecs 和 Handler,个人理解是 Codecs 负责将消息解码为我们所需的对象或者将处理的结果编码,Handler 对解码得到的对象进行逻辑处理…
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 ModbusFunction 类图如下: 如前文所述,所有请求/相应的 PDU 均继承自 ModbusFunction,其子类传入对应的 Function Code 并实现三个方法: CalculateLength:Data 部分的长度(该方法也可以为属性,但属性没有强制性,怕漏掉故改为抽象方法) Decode:从缓冲区解析 Data Encode:在传输前对 Data 编码 实现举例 每个 Function Cod…
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 Modbus TCP/IP 报文 报文最大长度为 260 byte (ADU = 7 byte MBAP Header + 253 byte PDU) Length = Unit Identifier 长度 + PDU 长度 MBAP Header PDU PDU 由两部分构成:Function Code(功能码) 和 Data 组成 Function Code 部分功能码: 报文类 ModbusHeader pub…
本项目的目的是为了学习 DotNetty 与 Modbus 协议,参考 modjn 实现功能 0x01: Read Coils (读取线圈/离散量输出状态) 0x02: Read Discrete Inputs (读取离散量输入值) 0x03: Read Holding Registers (读取保持寄存器值) 0x04: Read Input Registers (读取输入寄存器值) 0x05: Write Single Coil (写单个线圈或单个离散输出) 0x06: Write Sing…
前面我们已经完成了Modbus协议栈的开发,但这不是我们的目的.我们开发它的目的当然是要使用它来解决我们的实际问题.接下来我们就使用刚开发的Modbus协议栈开发一个Modbus TCP Server应用. 开发Modbus TCP Server首先需要有TCP Server的支持以及网络的配置等,但这些与Modbus本身没有什么关系,我们再次不作讨论.我们规定网络和TCP Server已经配置妥当.接下来我们讨论Modbus TCP Server的实现过程. 根据前面对协议栈的封装,我们需要引…