modbus 0x06 连续写_从零了解modbus协议 第三篇

Modbus 介绍

协议介绍

MODBUS协议是一种消息传递结构,广泛用于智能设备间建立主从通信。一个MODBUS消息从主机发给从机,包含了从机地址、命令(例如,读寄存器或者写寄存器)、数据、校验码(LRC或者CRC)。

由于Modbus协议只是一种消息传递结构,因此它独立于底层物理层。 传统上使用RS232,RS422或RS485实现。

查询

查询中的功能码告诉被寻址的从机设备要执行哪种类型操作。从机设备完成功能所需要的所有信息,都包含在了数据字节中。举个例子,功能码03将会向从机设备请求读取保持寄存器,并且返回他们的内容。数据段必须包含寄存器的起始地址和寄存器的个数。校验段为从机设备提供了一种验证消息内容完整性的方法。

应答

如果从机设备做出一个正常应答,功能码将会和查询中的功能码一样。数据字节包含从从机收集的数据,比如寄存器的值或状态。如果发生了一个错误,功能码将会被修改,用来表明这是一个错误应答。而且,数据字节中会包含描述错误内容的代码。校验码可以让主机检查消息内容的有效性。

在标准Modbus网络,控制器可以设置为ASCII或者RTU传输模式。

ASCII模式

在一个Modbus网络中,当控制器设置为ASCII(American Standard Code For Information Interchange)模式时,每一个8位的字节被当成两个ASCII码发送。这个模式的主要优点是它允许字符之间发生长达一秒的时间间隔而不会导致错误。

编码系统

十六进制ASCII可打印字符0...9, A...F

字节的各个位

1位起始位

7位数据位,最低有效位先发送

1位寄偶校验位,无校验时该位不存在

如果使用奇偶校验位,则1位停止位。如果没有使用奇偶校验位,则2位停止位

错误检查

纵向冗余检查(LRC)

RTU模式

在一个Modbus网络中,当控制器设置为RTU(Remote Terminal Unit)模式时,每一个8位字节包含2个4位的十六进制字符。这种模式的主要优点是,对于相同的波特率,其更大的字符密度可以比ASCII带来更好的数据吞吐量。 每条消息必须以连续的流方式进行传输。

编码系统

8位二进制,十六进制0...9,A....F

两个16进制的字符包含在一个8位的字节里面

字节的各个位

1位起始位

8位数据位,最低有效位先发送

1位奇偶校验位,无校验时该位不存在

如果使用奇偶校验位,则1位停止位。如果没有使用奇偶校验位,则2位停止位

错误检查

循环冗余校验(CRC)

ASCII帧

ASCII码模式,消息以冒号(:)字符(十六进制是0x3A)开头,以回车换行(十六进制是0x0D和0x0A)结束。

所有其他字符允许传输的字符时十六进制的0...9,A...F。为了寻找冒号,网络设备不断地监听网络总线。当收到一个时,每一个设备将解码接下来字段(地址字段)来确认它是否是被寻址的设备。

消息中的字符之间可以经过最多一秒的间隔。 如果出现更大的间隔,则接收设备会假定发生了错误。 典型的消息帧如下所示。

e9d993116ac8e6f6de4132e6df4d32a7.png

RTU帧

RTU模式,消息以至少3.5个字符时间的静默间隔开始。在网络上,一种很容易实现的方式是使用波特率的倍数字符时间(就像下图展示的T1-T2-T3-T4)。第一个传输的字段是设备地址。

所有其他字符允许传输的字符时十六进制的0...9,A...F。为了寻找冒号,网络设备不断地监听网络总线。当接收到第一个字段(地址字段),每一个设备解码这个设备地址来确认它是否是被寻址的设备。

在传输的字符之后,至少需要3.5个字符时间的间隔来标记消息的结束。 此间隔后可以开始新消息。

整个消息帧必须作为连续流传输。在消息帧全部传输完前,如果静默间隔超过1.5个字符时间,则接受设备刷新当前收到的不完整消息。并且,接下来的一个字节将会是新消息的地址字段。

类似的,如果新消息在前一个消息结束之前来到(就是早于前一个消息的3.5个结束静默时间),接收设备将会认为前一个消息还没有结束。这将导致一个错误。因为最终CRC字段中的值将会对这个组合信息无效。典型的消息帧如下。

4b9c7310e3edba836b4c76ab5dc05605.png

地址字段

消息的地址字段包含两种格式,一种是2个字符的ASCII,另一种是8位的RTU。独立的从机设备地址是从1到247。

功能字段

功能码字段告诉从机设备执行什么功能。

Modbus poll支持以下功能:

1. 读线圈状态

2. 读输入状态

3. 读保持寄存器

4. 读输入寄存器

5. 写单个线圈

6. 写单个寄存器

15. 写多个线圈

16. 写多个寄存器

22. 掩码写寄存器

23. 读/写寄存器

数据段包含请求或者发送的数据。

错误校验段

在标准Modbus网络中,广泛使用者两种错误校验方式。采用的校验方式,决定了错误校验段中的内容。

ASCII

当消息帧使用ASCII模式,错误校验码字段包含两个ASCII码字符。通过对消息内容进行纵向冗余检查(LRC)计算,计算出的结果就是错误校验码,不对消息头的冒号和结束符回车换行进行计算。

LRC字符在回车换行字符前添加到消息帧中。

RTU

当消息帧使用RTU模式,错误校验码为16位,由两个8位组成。通过对消息内容进行循环冗余计算(CRC),得到的结果就是错误校验码。CRC字段是消息的最后一个字段。低位CRC字节先添加到消息中,然后是CRC字段的高字节。消息中最后一个需要发送的字节时CRC高位字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值