en-us--EC_M032_FreeMODBUS_RTU_Slave_Porting_V1.00.zip
(1.34 MB)
本范例代码展示了如何使用UART接口并在RTU模式下实现MODBUS从机。MODBUS RTU是主/从结构的开放式串行通讯协议。MODBUS RTU消息编码是16进制及具有CRC校验封包。
本代码移植FreeMODBUS作为 MODBUS从机实作,FreeMODBUS 是一个针对嵌入式应用免费通用 MODBUS 协议,FreeMODBUS 提供了 RTU,ASCII 传输模式及 TCP 协议支持。FreeMODBUS遵循 BSD 许可证,这意味着用户可以将 FreeMODBUS应用于商业环境中。
MODBUS 协议为主(master)/从(slave)通讯协议,每个从机必须有唯一的地址,最多接247个设备,MODBUS通讯接口可以选用RS232、RS485或Ethernet。其通信遵循以下的过程:
1.
主设备向从设备发送请求。
2.
从设备分析并处理主设备的请求,然后向主设备发送结果。
3.
如果出现任何差错,从设备将返回一个异常功能码。
MODBUS的传输模式,有以下3种:
•
ASCII (American Standard Code for Information Interchange, 美国信息交换标准代码)。
•
RTU (remote terminal unit, 远程终端单元)。
•
TCP (Transmission Control Protocol, 传输控制协议)。
本范例MODBUS使用RTU模式,使用16进制编码,2个字节的CRC校验码,消息中的每个字节包含两个4 位的 16进位字符,在同样的波特率下,可比ASCII方式传送更多的数据,每两个字节之间发送或者接收的时间间隔不能超过3.5倍字符传输时间。
MODBUS RTU数据框架由四部分组成, 设备地址、功能码、数据和校验,长度如表 1-1。
slave address/slave ID 设备端ID,当要读写从机时,必须先知道该设备的address/ID。常用的MODBUS功能码– 0x03。0x03所定义的功能为读取多个寄存器,用来读取连续地址的数据。以下为MODBUS RTU 通讯范例:
MODBUS RTU Master读取格式: 设备ID(slave address/ID) + 0x03 + 读取起始位置(2 字节) + 读取的数量(2 字节) + CRC16。
MODBUS RTU slave回复格式: 设备ID(slave address/ID) + 0x03 + 回复数据的字节数 + 数据1(1 字节) + … + 资料n(1字节) + CRC16。
|