Modbus协议


Modbus协议
Modbus协议是一个主从协议,在同一时刻,只有一个主节点联接于总线,一个或者多个子节点联接于串行总线,Modbus通讯是由主节点发起,子节点在没有收到主节点的请求是不会发送数据的,子节点也不会互相通信。主节点在同一个时刻只会发起一个Modbus的事务处理。
主节点对字节点发送Modbus 请求:
单播模式:
主节点以特定的地址访问某个子节点,子节点接到并处理请求后,子节点向主节点返回一个报文即应答。
广播模式:
主节点向所有的子节点发送请求,对于主节点广播是没有应答返回的。广播请求一般应用于写命令。所有的设备必须接受广播模式的写功能。地址0是专门用于表示广播数据。
地址规则:
Modbus寻址空间有256个不同的地址。
0为广播地址
1—247位子节点的单独地址
248-255为保留地址
Modbus的帧描述
【Modbus协议】PDU protocol data unit
Modbus协议
文章图片

发起Modbus事务处理的客户端构造ModbusPDU添加附加域构造通讯PDU
Modbus协议
文章图片

在Modbus串行链路上地址域只含有子节点地址
子节点合法地址0-247
功能码指明服务器要执行的动作,功能码后面可以跟表示含有请求和响应参数的数据域。
错误校验根据不通的传输模式RTU或者ASCII使用不通的计算方法

RTU模式

RTU模式他定义了报文域的位内容在线路上串行的传送。它确定了信息如何的打包成报文和解码。Modbus串行链路上所有的设备传输模式(和串口参数)必须相同。
尽管在特定的领域ASCII模式是要求的,但是达到Modbus设备之间的互相操作只有每个设备都具有相同的模式,所有的设备必须具有RTU。Ascii传送模式是选项。

Remote Terminal Unit 模式,报文中每8个字节含有两个4位十六进制字符。这种模式的主要优点是较高的数据密度,在相同的波特率下比ASCII模式有更高的数据吞吐量。
Modbus协议
文章图片

每个报文必须以连续的字符流传送。
Modbus协议
文章图片

报文帧之间至少要3.5个字符串的空闲时间间隔,用来做报文的区分。
Modbus协议
文章图片

所以报文帧必须以连续的字符串流发送。
如果两个字符之间的间隔时间大于1.5个字符时间,则报文被认为不完整应该被接受节点丢弃。
由于t1.5和t3.5的定时,隐含大量的中断管理。在高速率下会导致CPU负担加重,因此在通讯速率大于19200bps的情况下。应该使用2个固定值。
建议字符间超时时间(t1.5)为750us
帧间的超时间(t3.5)为1.750ms
Modbus协议
文章图片


如图:
从初始到空闲状态需要t3.5超时;进入空闲状态。
空闲状态是没有发送和接收报文处理的正常状态。
在空闲状态,检测到任何的字符都被识别为帧起始。链路变为活动状态。
然后满足t1.5和t3.5被识别为帧接受成功,转入等待
检测的帧结束,完成CRC计算和校验。然后分析地治域以确定帧是否是发往此设备的,如果不是则丢弃。为了减少接受的处理时间,地治域可以在接收到一开始就开始分析。

RTU的CRC循环冗余校验。

ASCII模式.
报文中每8位字节以两个ASCII字符发送,当通讯链路无法符合RTU模式的定时管理时使用该模式。
Modbus协议
文章图片

Modbus协议
文章图片



为了确定两种模式的兼容性,ASCII数据域最大的数据长度是RTU数据域的两倍。
ASCII帧的最大长度尺寸是513个字符。

ASCII采用LRC校验纵向的冗余校验,执行不包括 冒号:和结尾的校验
LRC(纵向冗余校验)和crc(循环冗余校验的区别)
LRC
Modbus协议
文章图片

CRC:http://blog.csdn.net/d_leo/article/details/73572373
Modbus协议
文章图片






Modbus的事务处理流程
Modbus协议
文章图片

)正常的Modbus响应:响应代码=请求功能代码
)一个异常响应
用来为客户机提供处理中与被发现的差错相关的信息;
响应功能代码=请求功能代码+0x80
提供一个异常码来指示差错原因
Modbus协议
文章图片


功能码:
Modbus协议
文章图片

(1)公共功能码
是较好被定义的功能码,保证是唯一的,具有可用的一致性测试的
(2)用户定义功能码
允许用户重新设置
(3)保留功能码
一些公司对传统产品通常使用的功能码,并且对公共使用无效的功能码



    推荐阅读