ModbusRTU简介主要内容1、Modbus由来、国标2、Modbus串行链路应用协议Modbus是Modicon(现为施耐德电气公司的一个品牌)在1979年开发的一项在ISO模型第7层的应用层报文传输协议,在过去几十年已被大量地应用于工业控制领域的开放的、标准的、免费的网络通信协议。它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信:在串行链路上取决于TIA/EIA标准(232-F和485-A),在TCP/IP上取决于IETF标准(RFC793和RFC791)。Modbus国家标准:GB/T19582-2008《基于Modbus协议的工业自动化网络规范》。Modbus由来、国标三种传输模式ModbusRTUModbusASCIIModbusTCP/IPModbus在串行链路上的帧结构Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或者网络上的Modbus协议能够在应用数据单元(ADU)上引入一些附加字段,如下图所示:地址域功能码数据差错校验ADUPDUModbus协议描述地址域:单个设备的地址范围是1~247;网络上的每个从设备必须具有唯一的地址;主设备通过将要联络的从设备的地址放入消息中的地址域来选通设备;当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。地址0是用作广播地址,以使所有的从设备都能认识,不需要响应。当Modbus协议用于更高水准的网络时,广播可能不允许或者以其它方式代替。Modbus协议描述功能码:作为主机的请求发送时,通过功能码告诉从机执行什么动作;作为从机的响应发送时,从机响应的功能码与主机请求的功能码一样,表明从机已经正确地响应主机的操作;如果从机发送的功能码的最高位为1(功能码127),表明从机响应异常。数据:随功能码的不同,数据区也发生变化。差错校验:CRC-16(循环冗余错误校验),用于RTU模式;LRC(纵向冗余错误校验),用于ASCII模式。Modbus数据编码规则Modbus使用最高有效字节在低地址存储的方式表示地址和数据项。这就意味着当发送多个字节时,首先发送最高有效字节。例如:16bits0x1234将为0x120x3432bits0x12345678L将为0x120x340x560x78Modbus常用功能代码公共功能代码功能码十进制码十六进制码比特访问物理离散量输入读离散量输入0202内部比特或物理线圈读线圈0101写单个线圈0505写多个线圈150F16比特访问物理输入寄存器读输入寄存器0404内部寄存器或输出寄存器读保持寄存器0303写单个寄存器0606写多个寄存器1610读/写多个寄存器2317屏蔽写寄存器2216读FIFO队列2418文件记录访问读文件记录2014写文件记录2115...............注:标记为蓝色的部分为智能仪表常用的功能代码。Modbus03读保持寄存器应用方法请求功能码1个字节0x03起始地址2个字节0x0000to0xFFFF寄存器数量2个字节1to125(0x007D)响应功能码1个字节0x03字节数1个字节2xN寄存器值Nx2个字节...错误差错码1个字节0x83异常码1个字节01或02或03或04Modbus03读保持寄存器应用说明使用该功能码从远程设备中读保持寄存器连续块的内容。请求PDU指定了起始寄存器地址和寄存器数量。在PDU中,从零开始寻址寄存器。因此,编号1~16的寄存器被寻址为0~15.将响应报文中的寄存器数据按每个寄存器两个字节进行打包,这个二进制内容正好填满每个字节。对于每个寄存器,第一个字节包括高位位,第二个字节包括低位位。Modbus03读保持寄存器实例这是一个请求读寄存器108~110的实例请求响应域名十六进制域名十六进制功能03功能03起始地址Hi00字节数06起始地址Lo6B寄存器值Hi(108)02寄存器数量Hi00寄存器值Lo(108)2B寄存器数量Lo03寄存器值Hi(109)00寄存器值Lo(109)00寄存器值Hi(110)00寄存器值Lo(110)64Modbus06写单个寄存器应用方法请求功能码1个字节0x06起始地址2个字节0x0000to0xFFFF寄存器值2个字节0x0000to0xFFFF响应功能码1个字节0x06起始地址2个字节0x0000to0xFFFF寄存器值2个字节0x0000to0xFFFF错误差错码1个字节0x86异常码1个字节01或02或03或04Modbus06写单个寄存器应用说明使用该功能码在一个远程设备中写单个保持寄存器。请求PDU指定了被写入寄存器的地址。从零开始寻址寄存器。因此,编号为1的寄存器被寻址为0.正常的响应是请求的复制,在写入寄存器内容之后被返回。Modbus06写单个寄存器实例这是一个请求将十六进制0003写入寄存器2的实例请求响应域名十六进制域名十六进制功能06功能06起始地址Hi00输出地址Hi00起始地址Lo01输出地址Lo01寄存器值Hi00输出值Hi00寄存器值Lo03输出值Lo03谢谢!