modbus 协议简介及 modbus rtu crc 校验码计算方法 · 物联网平台-威尼斯人最新

thingskit · 2020年03月03日 · 最后由 回复于 2022年08月19日 · 572 次阅读
本帖已被设为精华帖!

modbus 是美国 modicon 公司 (即现在的 schneider electric 公司) 于 1979 年开发的一种通信协议,其目的是采用一根双绞线实现多个设备之间的通信。modbus 很快就成为自动化工业领域事实上的标准,modicon 公司把它向社会公开发布,不收任何专利费用。通过 modbus 协议,可以轻松地实现不同厂家的控制设备(例如 plc、变频器和 dcs)之间的通信。

modbus 协议采用问答式的通信方式,具有简单、硬件便宜、通用性强、使用方便的优点,容易开发和实现。modbus rtu 几乎成了国产 plc 和变频器首选的通信协议。modbus 协议不需要专门的通信模块,通信所需的堆栈和协议机制是以软件形式实现的,属于 iso-osi 参考模型的第 7 层。它的另一个优点是可以通过任何传输媒介进行通信,包括双绞线、无线通信、光导纤维、以太网、电话调制解调器、移动电话以及微波等。这样可以很容易地在一个新的或者是现有的工厂里建立起 modbus 连接。

目前使用的 modbus 有三个版本:modbus ascii、modbus rtu 和 modbus tcp。modbus ascii 协议需要将一个字节的数据转换为两个字节的 ascii 码后发送。modbus rtu 协议的数据以二进制进行编码,每个字节的数据只需要一个字节的通信量。

modbus rtu 通信采用主 - 从方式,最多传送 255 个字节的数据。主设备与一个或多个从设备进行通信。比较典型的主设备是 plc、pc、dcs(集散控制系统) 或者 rtu(远程终端单元)。modbus rtu 的从设备一般是现场设备。当 modbus rtu 主设备想要从一台从设备得到数据的时候,主设备发送一条包含该从设备站地址、所需要的数据以及一个用于检测错误的 crc 校验码。网络上所有其它设备都可以接收到这条信息,但是只有地址被指定的从设备才会作出反应。modbus 网络上的从设备不能发起通信,它们只能在主设备对它说话的时候回答。

modbus tcp 可以被理解为以太网上的 modbus。modbus tcp 不过是采用 tcp/ip 标准,简单地把 modbus 信息包打包压缩而已。这样 modbus tcp 设备就可以通过以太网和光纤网络进行连接和通信。与 rs-485 接口相比,modbus tcp 还允许使用更多的地址、可以采用多主站架构、传送速率可以达到 gb/s 的水平。modbus tcp 网络的从站数量仅受限于网络物理层的能力,通常从站的数量一般在 1024 个左右。

modbus rtu 采用 16 位的循环冗余校验码 (crc)。通过一个对数据进行 “或” 运算以及移位运算的复杂程序,由主设备产生 crc,并且由接收设备进行检查。如果双方计算出的 crc 值不符,从设备就会要求重新传送信息。modbus rtu 协议分为 modbus rtu 主站协议和 modbus rtu 从站协议,modbus 通信是由功能码来控制的,主站直接访问从站的数据区。

modbus rtu crc 校验码计算方法 在 crc 计算时只用 8 个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与 crc 计算。

crc 计算方法是:

加载一值为 0xffff 的 16 位寄存器,此寄存器为 crc 寄存器。
把第一个 8 位二进制数据(即通讯信息帧的第一个字节)与 16 位的 crc 寄存器的相异或,异或的结果仍存放于该 crc 寄存器中。
把 crc 寄存器的内容右移一位,用 0 填补最高位,并检测移出位是 0 还是 1。
如果移出位为零,则重复第三步(再次右移一位);如果移出位为 1,crc 寄存器与 0xa001 进行异或。
重复步骤 3 和 4,直到右移 8 次,这样整个 8 位数据全部进行了处理。
重复步骤 2 和 5,进行通讯信息帧下一个字节的处理。
将该通讯信息帧所有字节按上述步骤计算完成后,得到的 16 位 crc 寄存器的高、低字节进行交换。
最后得到的 crc 寄存器内容即为:crc 校验码。

thingskit 将本帖设为了精华贴 03月03日 02:54
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
网站地图