完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
内容
1.Modbus定义: 是一种串行通信协议,一开始是为使用PLC(即可编程逻辑控制器)设备通信而发表,已成为工业上通信协议的标准,是工业电 子设备间常用连接方式。 2.Modbus协议组成: 包括RTU、ASCII、TCP三种模式,其中RTU模式(即Modbus-RTU)最常用。 3.协议定义: 所谓协议,就是互相之间的约定。如果不让别人知道那就是暗号。 4.协议定义例子: 协议: “A” -- “LED灭” “B” -- “报警” “C” -- “LED亮” 单片机接收到“A”控制一个LED灭,单片机接收到“B”控制报警,单片机接收到“C”控制一个LED亮。 总结:当收到已定义的协议中对应指令(比如:A、B、C等)时就执行协议中相应的动作。 5.报文定义: 一个报文就是一帧数据,一个数据帧就是一个报文,是指一串完整的指令数据(比如下面的一串数据“ 01 16 00 01 00 17 98 04”)。 6.Modbus-RTU报文简单分析: 首先,给出报文如下: 01 16 00 01 00 17 98 04 然后,分别解释报文中数字的含义: 01 --》 从机地址;16 --》功能号;(00 01) --》数据地址;(00 17) --》数据;(98 04) --》CRC校验。 接着,总结: 上述报文的大致意思:把数据 0x0017(十进制:23)写入1号从机地址 0x0001数据地址。 7.CRC校验知识点: 7-1.定义: CRC是循环冗余校验码,简称循环码,是一种具有检错、纠错能力的校验码。 7-2.原理:(为方便理解该原理通过具体实例说明,这里参考百度百科) 假设约定的生成多项式二进制表示为“10011”(共5位),然后假设要发送数据序列的二进制为“101011”(共6位),接着在要发送数据的后面加4个0且二进制表示为“1010110000”(共10位),用已约定好生成多项式二进制(即“10011”)去除乘积1010110000(共10位),按“模2算法”(注意不是直接二进制相除)求得余数比特序列为“0100”,接着将余数添加到要发送数据之后得到真正要发送数据的比特流“1010110100”(共10位其中前6位为原始数据后4位为CRC校验码)。 上面讲的是发送端所做工作流程,下面讲接收端。 接收端在接收到带CRC校验码的数据后,如数据在传输过程中未出错将一定能被(和发送端)已约定好的生成多项式(即“10011”)整除,如数据在传输过程中出错利用已约定好的生成多项式(即“10011”)就不会整除。 7-3.作用: 在数据传输过程中可能数据会发生错误,CRC校验检测接收的数据是否正确。比如主机发出“01 06 00 01 00 17 98 04”,那么从机接收到后要根据“01 06 00 01 00 17”再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如不相等则说明数据传输有错误。(理解:即便在最终看来从机是重复计算CRC校验值但根据CRC校验内部机制也必须这么做) 8.功能号: 意义:这里只讲Modbus-RTU的最常用功能码,如下: 01(0x01) --》 读线圈 ;02(0x02) --》 读离散量输入;03(0x03) --》 读保持寄存器;04(0x04) --》 读输入寄存器; 05(0x05) --》 写单个线圈;06(0x06) --》 写单个寄存器;15(0x0F) --》 写多个线圈;16(0x10) --》 写多个寄存器。 总结:上述讲到的“线圈”和“寄存器”分别指的是“位bit”和“内存大小2个字节的变量”,后面出现这两个概念也是同样意思。 9.采用Modbus协议在两个设备间建立通讯: 9-1.首先,目光转向单片机(以PLC设备为例)在其中拿出部分内存(RAM)进行两个设备(即与PC)通讯,例如: 数组后的注释说明:0X[20] --》 输出线圈,用功能码0x01、0x05、0x0F访问,开头地址是0(这个后面解释); 1X[20] --》 输入线圈,用功能码0x02访问,开头地址是1(后面解释)。 另外两个同样道理。 9-2.然后,要实现主机对从机写数据操作: 如果单片机接收到一个报文那么就对报文进行解析并执行相应处理。以前面讲的报文为例,假设本机地址是1,那么单片机接 收到这串数据根据已约定好的生成多项式计算CRC校验判断数据是否正确,如判断数据无误则结果是: HoldDataReg[1]=0x0017; 就这样,Modbus主机就完成一次对从机数据的写操作即实现通讯。 接着,要实现主机对从机读数据操作: 主机进行读HoldDataReg[1]操作,则报文是:“01 03 00 01 00 01 D5 CA”,其中:01 --》 从机地址;03 --》 功能号; (00 01) --》 读取数据个数;(D5 CA) --》 CRC校验。 那么单片机接收到这串数据根据已约定好的生成多项式计算“CRC校验”判断数据是否正确,如判断数据无误则结果是: 返回 信息给主机且返回信息的格式为:“01 03 02 00 17 F8 4A”,其中01 --》 从机地址;03 --》 功能号;02 --》 数据字节个数; (00 17) --》 两个字节数据;(F8 4A) --》 CRC校验。 就这样,Modbus主机就完成一次对从机数据的读操作即实现通讯。 10.Modbus报文模型: 以上已了解Modbus一帧报文的通讯。且每个报文格式基本一致。如下图: 这里的“ADU”指:应用数据单元;这里的“PDU”指:协议数据单元。 11.Modbus数据模型 12.Modbus事务处理: 下列状态图描述了在服务器端Modbus事务处理的一般处理过程: |
|
|
|
只有小组成员才能发言,加入小组>>
876浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 21:42 , Processed in 0.559839 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号