|
在Modbus串行链路上的所有设备(客户机和服务器)需要配置相同的通信参数和通信模式。串行通信参数包括波特率、奇偶校验等。通信模式包括 ASCII模式和RTU模式。当设备以ASCII模式进行通信时,消息中的每一个8位的字节作为2个ASCII字符传输。当设备以RTU模式进行通信时,消息中的每一个8位的字节分成两个4位的16进制的字符传输。因此在相同的波特率下RTU模式有更高的传输密度,应用也更广。Modbus协议是以帧为单位进行数据传送的,Modbus有三种类型的帧:在串行链路上运行的ASCII帧和RTU帧、在以太网上运行Modbus TCP帧。
①ASCII帧
ASCII帧以“:”冒号字符(0x3A)表示帧的起始,以回车和换行字符(0x0D和0x0A)表示帧的结束。帧中其他的数据只允许为16进制数中的字符0-9 和A-F。帧包含1个字节的起始字符、2个字节的地址单元、2个字节的功能代码、数据段和2个字节的LRC校验字段。网络中的Modbus服务器会不断监听冒号,如果监听到冒号则判断该帧中的地址是否为本机地址,是的话则予以响应。ASCII帧的字符之间的最大间隔为1秒,若超过1秒,接收设备认为发生了一个错误。
②RTU帧
RTU帧以超过3.5个字节的空闲时间开始,以3.5个字节的静止时间结束。帧包含1个字节的起始字符、1个字节的地址单元、1个字节的功能代码、数据段和2个字节的CRC校验字段。帧中的数据允许为任意的数。整个帧必须连续发送,发送期间若出现超过1.5个字符的静止时间,则后面的数据会被认为是新的帧。
③Mobus TCP帧
Modbus TCP没有对Modbus协议本身进行修改,而是采用了一种非常简便的方式将Modbus RTU帧嵌入到以太网的TCP帧中。Modbus TCP帧由MBAP(Modbus应用协议)头和协议数据单元组成。MBAP头包含2个字节的传输标志、2个字节的协议标志、2个字节帧长度、1个字节的地址。协议数据单元包含1个字节的功能代码和数据段。因为考虑到以太网IP包到达的顺序可能与发送的顺序不一致,所以在MBAP中增加了传输标志,Modbus TCP 服务器端(Modbus TCP网关)需要复制它做为对传输请求的响应。MBAP中的协议标志字段为0表示为Modbus协议。长度字段对该字段后的单元标志字段和协议数据单元中的字节数计数。
Modbus TCP帧的目的地址由IP地址所确定,因此不再有专门的地址字段来区分不同的Modbus TCP客户。同时TCP传输是可靠的数据传输方式,因此不再有数据校验。因为Modbus TCP协议支持承载Modbus串行链路版本的RTU帧,所以在MBAP中增加了一个地址字段以区分串行链路中不同的 Modbus服务器,实现串行链路中的路由功能。
|
|