modbus协议的介绍

MODBUS是一个工业制造环境中应用的一个通用协议。它是一个请求/应答协议,即是从机从不主动发信息给主机,并且提供功能码规定的服务(所有功能码都附在excel表格中)。MODBUS总共支持三种传输模式RTU、ASCII、TCP/IP。ASCII模式中,一个信息中的每8位字节作为两个ASCII字符传输的,这种模式的主要优点是允许字符直接的时间间隔长达1s,不会出现错误。RTU模式中,报文中每个字节8位含有两个4位十六进制的字符。这两种模式相比,原本发送一个字节的,ASCII模式需要发送的是两个字节,而RTU模式需要发送的是一个字节,所以RTU模式有较高的数据密度,在相同的波特率下比ASCII模式有更高的吞吐率。由于我采用的是RTU模式,下面介绍的主要是RTU模式。

首先介绍下通信时发送的一帧的格式,如下表格

地址域(1字节)

功能码(1字节)

数据(<=252字节)

差错校验(2字节)

其中,协议数据单元(PDU)包跨功能码和数据。发送和接收的数据都是以上数据格式,至少包括地址域、功能码、差错校验,数据可以没有,所以最少的一帧为4个字节。完整的一帧最多256个字节,地址域占用一个字节,功能码一个字节,差错校验两个字节,数据小于等于252个字节。

下面介绍一下,字符到底是怎么传送的,什么样的一帧是符合要协议的,什么时候为一帧结束?第一个问题:它是串行传送的,每个字符均按照从左向右的顺序发送,左边是最高位,右边是最低位。第二个问题整个报文帧必须以连续的字符流发送,两个字符之间的空闲间隔大于1.5字符时间,如果超过被认为不完整应该被接收节点抛弃。第三个问题:帧间要超过3.5个字符,也即是上一帧最后一个字符与下一帧第一个字符相隔的时间超过3.5个字符,我们可以计算下每个字符发送的时间,假设波特率为f,发送一个字符串口发送的位数为11位(1位起始位,8位数据位,1位奇偶校验位,1位停止位),可根据公式计算计算 的时间,公式为 。

接下来,介绍一下主机的两种发送模式。一种是广播模式,地址域为0,从机无需应答,主机等待一段时间即可结束一帧通信。另外一种是单播模式,地址为想要通信的从机地址,发送完,需要等待回答方可结束,如若出错尚需出错处理。下面给出了主节点的状态图,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值