当前位置 : 主页 > 网络编程 > 其它编程 >

modbus0x06连续写_工业通信Modbus协议

来源:互联网 收集:自由互联 发布时间:2023-07-02
Modbus协议简介Modbus协议简介Modbus协议是应用于电子控制器上的一种通用语言。通过此协议控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以 Modbus协议简介 Modbus协议简介
Modbus协议简介Modbus协议简介Modbus协议是应用于电子控制器上的一种通用语言。通过此协议控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以 d72a72aaffdd8c78ce07ed50403801e2.png

Modbus协议简介

e1aa657efe41814f634b2ecfb92a5e24.png

Modbus协议简介


        Modbus协议是应用于电子控制器上的一种通用语言。通过此协议控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它不同厂商生产的控制设备可以连成工业网络进行集中监控。

此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程如果回应来自其它设备的请求以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。

374a5f30ec938faf7d1c61ca3c8902e2.png

     当在一Modbus网络上通信时此协议决定了每个控制器须要知道它们的设备地址识别按地址发来的消息决定要产生何种行动。如果需要回应控制器将生成反馈信息并用Modbus协议发出。在其它网络上包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

协议在一根通讯线上使用应答式连接(半双工)这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先主计算机的信号寻址到一台唯一的终端设备(从机)然后在相反的方向上终端设备发出的应答信号传输给主机。 协议只允许在主计算机和终端设备之间而不允许独立的设备之间的数据交换这就不会在使它们初始化时占据通讯线路而仅限于响应到达本机的查询信号。

1 1  传输方式

传输方式是一个信息帧内一系列独立的数据结构以及用于传输数据的有限规则以RTU模式在Modbus总线上进行通讯时信息中的每8位字节分成2个4位16进制的字符每个信息必须连续传输下面定义了与Modebus 协议– RTU方式相兼容的传输方式。

代码系统

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

·   消息中的每个8位域都是一个两个十六进制字符组成

每个字节的位

·   1个起始位

·   8个数据位最小的有效位先发送

·   1个奇偶校验位无校验则无

·   1个停止位(有校验时)2个Bit(无校验时)

错误检测域

·   CRC(循环冗长检测)

12      协议

当信息帧到达终端设备时它通过一个简单的“口”进入寻址到的设备该设备去掉数据帧的“信封”(数据头)读取数据如果没有错误就执行数据所请求的任务然后它将自己生成的数据加入到取得的“信封”中把数据帧返回给发送者。返回的响应数据中包含了以下内容终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。发生任何错误都不会有成功的响应。

121          信息帧

Address

Function

Data

Check

8-Bits

8-Bits

N x 8-Bits

16-Bits

图 1 – 1 . 信息帧格式

特注Modbus信息帧所允许的最大长度为256个字节即N的范围是大于等于零且小于等于252(N{0252})。

即所有的数据一共256个数据剩下253个。

122          地址(Address)域

信息帧地址域(信息地址)在帧的开始部分由8位组成有效的从机设备地址范围0-247(十进制)各从机设备的寻址范围为1-247。主机把从机地址放入信息帧的地址区并向从机寻址。从机响应时把自己的地址放入响应信息的地址区让主机识别已作出响应的从机地址。

地址0为广播地址所有从机均能识别。当Modbus协议用于高级网络时则不允许广播或其它方式替代。

123          功能(Function)域

  信息帧功能域代码告诉了被寻址到的终端执行何种功能。有效码范围1-225(十进制) 有些代码是适用于所有控制器有些适应于某种控制器还有些保留以备后用。有关功能代替码的全部内容见附录A。

当主机向从句发送信息时功能代码向从机说明应执行的动作。如读一组离散式线圈或输入信号的ON/OFF状态读一组寄存器的数据读从机的诊断状态写线圈(或寄存器)允许下截、记录、确认从机内的程序等。当从机响应主机时功能代码可说明从机正常响应或出现错误(即不正常响应)正常响应时从句简单返回原始功能代码不正常响应时从机返回与原始代码相等效的一个码并把最高有效位设定为“1”。

如主机要求从机读一组保持寄存器时则发送信息的功能码为

0000 0011 (十六进制03)

若从机正确接收请求的动作信息后则返回相同的代码值作为正常响应。发现错时则返回一个不正常响信息

1000 0011(十六进制83)

从机对功能代码作为了修改此外还把一个特殊码放入响应信息的数据区中告诉主机出现的错误类型和不正常响应的原因不正常响应见附录B。主机设备的应用程序负责处理不正常响应典型处理过程是主机把对信息的测试和诊断送给从机并通知操作者。表 1 – 1列出了所有设备常用的功能码、它们的意义及它们的初始功能。

代码

名称

作用

01

读取线圈状态

取得一组逻辑线圈的当前状态(ON/OFF)

02

读取输入状态

取得一组开关输入的当前状态(ON/OFF)

03

读取保持寄存器

在一个或多个保持寄存器中取得当前的二进制值

04

读取输入寄存器

在一个或多个输入寄存器中取得当前的二进制值

05

强置单线圈

强置一个逻辑线圈的通断状态

06

预置单寄存器

放置一个特定的二进制值到一个单寄存器中

07

读取异常状态

取得8个内部线圈的通断状态

15

强置多线圈

强置一串连续逻辑线圈的通断

16

预置多寄存器

放置一系列特定的二进制值到一系列多寄存器中

17

报告从机标识

可使主机判断编址从机的类型及该从机运行指示灯的状态

表 1 – 1 常用功能码

124          数据域

数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容可能是数值、参考地址或者极限值。他由数据区有2个16进制的数据位(2的8次方256)数据范围为00-FF(16进制)。例如功能域码告诉终端读取一个寄存器数据域则需要指明从哪个寄存器开始及读取多少个数据内嵌的地址和数据依照类型和从机之间的不同能力而有所不同。若无错误出现从机向主机的响应信息中包含了请求数据若有错误出现则数据中有一个不正常代码使主机能判断并作出下一步的动作。数据区的长度可为“零”以表示某类信息。

125          错误校验域

该域允许主机和终端检查传输过程中的错误。有时由于电噪声和其它干扰一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些改变出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据这就提高了系统的安全性和效率出错校验使用了16位循环冗余的方法即CRC校验。

错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的。CRC域附加在消息的最后添加时先是低字节然后是高字节。故CRC的高位字节是发送消息的最后一个字节。

126          字符的连续传输

当消息在标准的Modbus系列网络传输时每个字符或字节按由左到右的次序方式发送

最低有效位(LSB)...最高有效位(MSB)。

位的序列是

有奇偶校验

无奇偶校验

图 1 –2 .  位顺序(RTU)

13   错误检测

1、奇偶校验

用户可以配置控制器是奇或偶校验或无校验。这将决定了每个字符中的奇偶校验位是如何设置的。

如果指定了奇或偶校验“1”的位数将算到每个字符的位数中(ASCII模式7个数据位RTU中8个数据位)。例如RTU字符帧中包含以下8个数据位1 1 0 0 0 1 0 1

整个“1”的数目是4个。如果便用了偶校验帧的奇偶校验位将是0便得整个“1”的个数仍是4个。如果便用了奇校验帧的奇偶校验位将是1便得整个“1”的个数是5个。

如果没有指定奇偶校验位传输时就没有校验位也不进行校验检测。代替一附加的停止位填充至要传输的字符帧中。

2、CRC检测

RTU方式时采用CRC方法计算错误校验码CRC校验传送的全部数据。它忽略信息中单个字符数据的奇偶校验方法。

循环冗余校验(CRC)域占用两个字节包含了一个16位的二进制值。CRC值由传送设备计算出来然后附加到数据帧上接收设备在接收数据时重新计算CRC值然后与接收到的CRC域中的值进行比较如果这两个值不相等就发生了错误。

CRC开始时先把寄存器的16位全部置成“1”,然后把相邻2个8位字节的数据放入当前寄存器中只有每个字符的8位数据用作产生CRC起始位停止位和奇偶校验位不加到CRC中。

       在生成CRC时每个8位字节与寄存器中的内容进行异或然后将结果向低位移位高位则用“0”补充最低位(LSB)移出并检测如果是1该寄存器就与一个预设的固定值进行一次异或运算如果最低位为0不作任何处理。

       上述处理重复进行知道执行完了8次移位操作当最后一位(第8位)移完以后下一个8位字节与寄存器材的当前值进行异或运算同样进行上述的另一个8次移位异或操作当数据帧中的所有字节都作了处理生成的最终值就是CRC值。

生成一个CRC的流程为

1、       预置一个16位寄存器为0FFFFH(全1)称之为CRC寄存器。

2、       把数据帧中的第一个8位字节与CRC寄存器中的低字节进行异或运算结果存回CRC寄存器。

3、       将CRC寄存器向右移一位最高位填以0最低位移出并检测。

4、       如果最低位为0重复第3步(下一次移位)。

 如果最低位为1将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。

5、       重复第3步和第4步直到8次移位。这样处理完了一个完整的八位。

6、       重复第2步到第5步来处理下一个八位直到所有的字节处理结束。

7、       最终CRC寄存器得值就是CRC的值。

CRC值附加到信息时低位在先高位在后。查阅附录C中的一个实例它详细说明了CRC的校验。

374a5f30ec938faf7d1c61ca3c8902e2.png

Modbus数据和控制功能详解

       Modbus信息中的所有数据地址以零作为基准各项数据的第一个数据地址的编号为0。若无特殊说明在此节文中用进制值表示图中的数据区则用十六进制表示。

图2--1为一个例子说明了Modbus的查询信息图2--2为正常响应的例子这两例子中的数据均是16进制的也表示了以RTU方式构成数据帧的方法。

主机查询是读保持寄存器被请求的从机地址是06读取的数据来自地址40108保持寄有器。注意该信息规定了寄存器的起始地址为0107 (006BH)。

从机响应返回该功能代码说明是正常响应字节数“Byle count”中说明有多少个8位字节被返回。它表明了附在数据区中8位字节的数量,当在缓冲区组织响应信息时“字节数”区域中的值应与该信息中数据区的字节数相等。如RTU方式时63H 用一个字节(01100011)发送。

a1642c9b14c3014b8c628058eb657c8a.png 

上一篇:《望江南》翻译原文赏析诗人元无名氏
下一篇:没有了
网友评论