Modbus协议

Modbus协议

Modbus协议是一个主从协议,在同一时刻,只有一个主节点联接于总线,一个或者多个子节点联接于串行总线,Modbus通讯是由主节点发起,子节点在没有收到主节点的请求是不会发送数据的,子节点也不会互相通信。主节点在同一个时刻只会发起一个Modbus的事务处理。

主节点对字节点发送Modbus 请求:

单播模式:

主节点以特定的地址访问某个子节点,子节点接到并处理请求后,子节点向主节点返回一个报文即应答。

广播模式:

主节点向所有的子节点发送请求,对于主节点广播是没有应答返回的。广播请求一般应用于写命令。所有的设备必须接受广播模式的写功能。地址0是专门用于表示广播数据。

地址规则:

Modbus寻址空间有256个不同的地址。

0为广播地址

1—247位子节点的单独地址

248-255为保留地址

Modbus的帧描述

PDU protocol data unit

发起Modbus事务处理的客户端构造ModbusPDU添加附加域构造通讯PDU

Modbus协议_第1张图片

在Modbus串行链路上地址域只含有子节点地址

子节点合法地址0-247

功能码指明服务器要执行的动作,功能码后面可以跟表示含有请求和响应参数的数据域。

错误校验根据不通的传输模式RTU或者ASCII使用不通的计算方法

RTU模式

 

RTU模式他定义了报文域的位内容在线路上串行的传送。它确定了信息如何的打包成报文和解码。Modbus串行链路上所有的设备传输模式(和串口参数)必须相同。

尽管在特定的领域ASCII模式是要求的,但是达到Modbus设备之间的互相操作只有每个设备都具有相同的模式,所有的设备必须具有RTU。Ascii传送模式是选项。

 

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

每个报文必须以连续的字符流传送。

Modbus协议_第2张图片

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

Modbus协议_第3张图片

所以报文帧必须以连续的字符串流发送。

如果两个字符之间的间隔时间大于1.5个字符时间,则报文被认为不完整应该被接受节点丢弃。

由于t1.5和t3.5的定时,隐含大量的中断管理。在高速率下会导致CPU负担加重,因此在通讯速率大于19200bps的情况下。应该使用2个固定值。

建议字符间超时时间(t1.5)为750us

帧间的超时间(t3.5)为1.750ms

Modbus协议_第4张图片

如图:

从初始到空闲状态需要t3.5超时;进入空闲状态。

空闲状态是没有发送和接收报文处理的正常状态。

在空闲状态,检测到任何的字符都被识别为帧起始。链路变为活动状态。

然后满足t1.5和t3.5被识别为帧接受成功,转入等待

检测的帧结束,完成CRC计算和校验。然后分析地治域以确定帧是否是发往此设备的,如果不是则丢弃。为了减少接受的处理时间,地治域可以在接收到一开始就开始分析。

 

RTU的CRC循环冗余校验。

 

ASCII模式.

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

Modbus协议_第5张图片

为了确定两种模式的兼容性,ASCII数据域最大的数据长度是RTU数据域的两倍。

ASCII帧的最大长度尺寸是513个字符。

 

ASCII采用LRC校验纵向的冗余校验,执行不包括 冒号:和结尾的校验

LRC(纵向冗余校验)和crc(循环冗余校验的区别)

LRC

Modbus协议_第6张图片

CRC:http://blog.csdn.net/d_leo/article/details/73572373

Modbus协议_第7张图片



Modbus的事务处理流程

Modbus协议_第8张图片

)正常的Modbus响应:响应代码=请求功能代码

)一个异常响应

用来为客户机提供处理中与被发现的差错相关的信息;

响应功能代码=请求功能代码+0x80

提供一个异常码来指示差错原因

Modbus协议_第9张图片

功能码:

Modbus协议_第10张图片

(1)    公共功能码

是较好被定义的功能码,保证是唯一的,具有可用的一致性测试的

(2)    用户定义功能码

允许用户重新设置

(3)保留功能码

      一些公司对传统产品通常使用的功能码,并且对公共使用无效的功能码


 


你可能感兴趣的:(STM32开发)