PLC
直播中

李猛

7年用户 1565经验值
私信 关注

Modbus与CRC的定义是什么

Modbus的定义是什么?Modbus协议是由哪些部分组成的?

CRC的定义是什么?CRC有何作用?

回帖(1)

陈具松

2021-9-30 16:28:39
  内容
  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事务处理的一般处理过程:
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分