MODBUS是工业用的比较广泛的一种通讯协议。主要有MODBUS RTU、MODBUS ASCALL和MODBUS TCP/IP三种。现谈谈对MODBUS RTU初步的了解。
所谓的MODBUS通讯协议即主机和从机之间一种约定了的通讯的报文的格式。比如我们之间约定"12345"代表"上山打猎",那么我发出"12345"的讯息后,你就知道要去"上山打猎"。只不过没有所述那么简单罢了。
MODBUS RTU 的主从机之间一般采用RS485或者RS232进行连接通讯。只能有一个主机,而剩下的都是从机,而每一个从机都有一个专属的地址,这一点倒是和IIC类似。
举例:现有一个基于MODBUS RTU协议的主从机。从机地址0x01(8位,最多可有255个从机)、如果要读取从机包含寄存器地址0x0101(16位,高位在前、低位在后)在内的3个寄存器内的数据,要如何操作?(假设每个寄存器有数据0x0203、0x0405、0x0607)
如下:
主机发送:
01 03 01 01 00 01 CRCL CRCH
从机地址 功能码 起始寄存器 低位 寄存器数量 低位 CRC校验低位 高位
地址高位 高位
从机回应:
01 03 06 02 03 04 05 06 07
从机地址 功能码 返回字节数 第一个数据高低位 第二个数据高低位 第三个数据高低位
CRCL CRCH
CRC校验低位 高位
从机在接收到主机的数据后,会将主机发送的数据(除CRC部分)进行CRC校验,然后和主机的CRC部分对比判断是否一致,防止误码。主机接收之后同样如此。
至于其他的功能码的使用方法和CRC校验的方式网上可以搜到