定到达的命令没有被破坏。基本的ModBus命令能指令一个RTU改变
f它的寄存器的某个值,控制或者读取一个IO端口,以及指挥设备回送一个或者多个其寄存器中的数据。
有许多modems和网关支持Modbus协议,因为Modbus协议很简单而且容易复制。它们当中一些为这个协议特别设计的。有使用有线、无线通信甚至短消息和GPRS的不同实现。不过设计者需要克服一些包括高延迟和时序的问题。
MODBUS通信过程如下图
MODBUSRTU报文格式
起始位
设备地功能代
数据CRC校验结束符
址
码
T1T2T3T48Bit8Bit
个8Bit16BitT1T2T3T4
MODBUSASCII报文格式
f起始位1个字符
设备地
LRC校
功能代码数据
址
验
2个字
2个字
2个字符
个字符
符
符
结束符2个字符
MODBUSTCP报文
交互标识协议标识报文长度设备标识功能代码数据
2字节一般为0
2字节2字节1字节一般为0高字节在也就是设1个字符
个字符
前备地址
实际上MODBUSRTU与ASCII的内容是完全相同的,不同的的ASCII方式用“:”标识帧起始,用“CRLF”标识帧结束。校验采用LRC,把RTU帧中一个字节的内容换成了2个ASCII字符。比如在RTU方式下设备地址01只有一个字节,在ASCII方式下转换成字符串“01”(16进制的3031)。
MODBUSTCP中的设备标识,功能码等与MODBUSRTU相同,可以认为是在MODBUSRTU报文的前边加了一个头,去掉了CRC校验这个尾。
MODBUS协议定义了4种基本数据类型:可读写位数据,只读位数据,只读16位数据,可读写16位数据。这些数据分别被称为线圈状态,输入状态,输入寄存器,保持寄存器。
fMODBUS协议中定义的这些数据都是一个从地址1开始的数组,
访问时需要指明从哪个地址开始访问,访问多少个数据。下表是MOD
BUS的功能码。
ModBus功能码
功能码
名称
作用
01读取线圈状态
取得一组逻辑线圈的当前状态(ONOFF
02读取输入状态
取得一组开关输入的当前状态(ONOFF
03读取保持寄存器
在一个或多个保持寄存器中取得当前的二进制值
04读取输入寄存器
05强置单线圈06预置单寄存器
在一个或多个输入寄存器中取得当前的二进制值强置一个逻辑线圈的通断状态把具体二进值装入一个保持寄存器
07读取异常状态
取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读
取状态
08回送诊断校验
把诊断校验报文送从机,以对通信处理进行评鉴
09编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑
可使主机与一台正在执行长程序r