MODBUS通讯协议-RTU.doc

上传人:11****ws 文档编号:2124812 上传时间:2019-04-29 格式:DOC 页数:16 大小:210KB
下载 相关 举报
MODBUS通讯协议-RTU.doc_第1页
第1页 / 共16页
MODBUS通讯协议-RTU.doc_第2页
第2页 / 共16页
MODBUS通讯协议-RTU.doc_第3页
第3页 / 共16页
MODBUS通讯协议-RTU.doc_第4页
第4页 / 共16页
MODBUS通讯协议-RTU.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、Modbus通讯协议( RTU 传输模式)本说明仅做内部参考,详细请参阅英文版本。Modbus 通讯协议 ( RTU 传输模式)第一章 Modbus 协议简介Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在一 Mo

2、dbus 网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus 协议发出。在其它网络上,包含了 Modbus 协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。 协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换

3、,这就不会在使它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。1 1 传输方式传输方式是一个信息帧内一系列独立的数据结构以及用于传输数据的有限规则,以RTU 模式在 Modbus 总线上进行通讯时,信息中的每 8 位字节分成 2 个 4 位 16 进制的字符,每个信息必须连续传输下面定义了与 Modebus 协议 RTU 方式相兼容的传输方式。代码系统 8 位二进制,十六进制数 0.9,A.F 消息中的每个 8 位域都是一个两个十六进制字符组成 每个字节的位 1 个起始位 8 个数据位,最小的有效位先发送 1 个奇偶校验位,无校验则无 1 个停止位(有校验时),2 个 Bit(无校验

4、时) 错误检测域 CRC(循环冗长检测) Modbus 通讯协议 ( RTU 传输模式)12 协议当信息帧到达终端设备时,它通过一个简单的“口”进入寻址到的设备,该设备去掉数据帧的“信封” (数据头) ,读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data) 和一个校验码(Check)。发生任何错误都不会有成功的响应。121 信息帧Address Function Data Check8-Bits

5、 8-Bits N x 8-Bits 16-Bits图 1 1 . 信息帧格式特注:Modbus 信息帧所允许的最大长度为 256 个字节,即 N 的范围是大于等于零且小于等于 252(N0,252) 。即,所有的数据一共 256 个,数据剩下 253 个。122 地址(Address)域信息帧地址域(信息地址)在帧的开始部分,由 8 位组成,有效的从机设备地址范围 0-247(十进制 ),各从机设备的寻址范围为 1-247。主机把从机地址放入信息帧的地址区,并向从机寻址。从机响应时,把自己的地址放入响应信息的地址区,让主机识别已作出响应的从机地址。地址 0 为广播地址,所有从机均能识别。当

6、Modbus 协议用于高级网络时,则不允许广播或其它方式替代。123 功能(Function)域信息帧功能域代码告诉了被寻址到的终端执行何种功能。有效码范围 1-225(十进制) ,有些代码是适用于所有控制器,有些适应于某种控制器,还有些保留以备后用。有关功能代替码的全部内容见附录 A。当主机向从句发送信息时,功能代码向从机说明应执行的动作。如读一组离散式线圈或输入信号的 ON/OFF 状态,读一组寄存器的数据,读从机的诊断状态,写线圈(或寄存器) ,允许下截、记录、确认从机内的程序等。当从机响应主机时,功能代码可说明从机正常响应或出现错误(即不正常响应 ),正常响应时,从句简单返回原始功能代

7、码;不正常响应时,从机返回与原始代码相等效的一个码,并把最高有效位设定为“1” 。如,主机要求从机读一组保持寄存器时,则发送信息的功能码为:0000 0011 (十六进制 03)若从机正确接收请求的动作信息后,则返回相同的代码值作为正常响应。发现错时,则返回一个不正常响信息:1000 0011(十六进制 83)从机对功能代码作为了修改,此外,还把一个特殊码放入响应信息的数据区中,告诉主机出现的错误类型和不正常响应的原因,不正常响应见附录 B。主机设备的应用程序负责处理不正常响应,典型处理过程是主机把对信息的测试和诊断送给从机,并通知操作者。表 1 1 列出了所有设备常用的功能码、它们的意义及它

8、们的初始功能。表 1 1 常用功能码代码 名称 作用01 读取线圈状态 取得一组逻辑线圈的当前状态(ON/OFF)02 读取输入状态 取得一组开关输入的当前状态(ON/OFF)Modbus 通讯协议 ( RTU 传输模式)03 读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值04 读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值05 强置单线圈 强置一个逻辑线圈的通断状态06 预置单寄存器 放置一个特定的二进制值到一个单寄存器中07 读取异常状态 取得 8 个内部线圈的通断状态15 强置多线圈 强置一串连续逻辑线圈的通断16 预置多寄存器 放置一系列特定的二进制值到一系列多

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

10、可为“零”以表示某类信息。125 错误校验域该域允许主机和终端检查传输过程中的错误。有时,由于电噪声和其它干扰,一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的安全性和效率,出错校验使用了 16 位循环冗余的方法,即 CRC 校验。错误检测域包含一 16Bits 值(用两个 8 位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的。CRC 域附加在消息的最后,添加时先是低字节然后是高字节。故 CRC 的高位字节是发送消息的最后一个字节。126 字符的连续传输当消息在标准

11、的 Modbus 系列网络传输时,每个字符或字节按由左到右的次序方式发送:最低有效位(LSB).最高有效位(MSB)。位的序列是: 有奇偶校验 启始位 1 2 3 4 5 6 7 8 奇偶位 停止位无奇偶校验 启始位 1 2 3 4 5 6 7 8 停止位 停止位图 1 2 . 位顺序(RTU) 13 错误检测1、奇偶校验 Modbus 通讯协议 ( RTU 传输模式)用户可以配置控制器是奇或偶校验,或无校验。这将决定了每个字符中的奇偶校验位是如何设置的。 如果指定了奇或偶校验,“1”的位数将算到每个字符的位数中(ASCII 模式 7 个数据位,RTU 中 8 个数据位)。例如 RTU 字符帧

12、中包含以下 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 值由传送设备计算出来,然后附加到数据帧上,接收

13、设备在接收数据时重新计算 CRC 值,然后与接收到的 CRC 域中的值进行比较,如果这两个值不相等,就发生了错误。CRC 开始时先把寄存器的 16 位全部置成“1”,然后把相邻 2 个 8 位字节的数据放入当前寄存器中,只有每个字符的 8 位数据用作产生 CRC,起始位,停止位和奇偶校验位不加到 CRC 中。在生成 CRC 时,每个 8 位字节与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测,如果是 1,该寄存器就与一个预设的固定值进行一次异或运算,如果最低位为 0,不作任何处理。上述处理重复进行,知道执行完了 8 次移位操作,当最后一位(第 8

14、位)移完以后,下一个 8 位字节与寄存器材的当前值进行异或运算,同样进行上述的另一个 8 次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是 CRC 值。生成一个 CRC 的流程为:1、 预置一个 16 位寄存器为 0FFFFH(全 1) ,称之为 CRC 寄存器。2、 把数据帧中的第一个 8 位字节与 CRC 寄存器中的低字节进行异或运算,结果存回CRC 寄存器。3、 将 CRC 寄存器向右移一位,最高位填以 0,最低位移出并检测。4、 如果最低位为 0:重复第 3 步(下一次移位) 。如果最低位为 1:将 CRC 寄存器与一个预设的固定值(0A001H )进行异或运算。5、

15、重复第 3 步和第 4 步直到 8 次移位。这样处理完了一个完整的八位。6、 重复第 2 步到第 5 步来处理下一个八位,直到所有的字节处理结束。7、 最终 CRC 寄存器得值就是 CRC 的值。CRC 值附加到信息时,低位在先,高位在后。查阅附录 C 中的一个实例,它详细说明了 CRC 的校验。第二章 Modbus 数据和控制功能详解Modbus 信息中的所有数据地址以零作为基准,各项数据的第一个数据地址的编号为0。若无特殊说明在此节文中用进制值表示,图中的数据区则用十六进制表示。Modbus 通讯协议 ( RTU 传输模式)图 2-1 为一个例子,说明了 Modbus 的查询信息,图 2-

16、2 为正常响应的例子,这两例子中的数据均是 16 进制的,也表示了以 RTU 方式构成数据帧的方法。主机查询是读保持寄存器,被请求的从机地址是 06,读取的数据来自地址 40108 保持寄有器。注意,该信息规定了寄存器的起始地址为 0107 (006BH)。从机响应返回该功能代码,说明是正常响应,字节数“Byle count”中说明有多少个 8位字节被返回。它表明了附在数据区中 8 位字节的数量,当在缓冲区组织响应信息时, “字节数”区域中的值应与该信息中数据区的字节数相等。如 RTU 方式时,63H 用一个字节(01100011)发送。 8 个位为一个单位计算“字节数” ,它忽略了信息帧用组

17、成的方法。Addr Fun Data start reg hiData start reg loData #of regs hiData #of regs loCRC16hiCRC16lo06H 03H 00H 6BH 00H 01H XXH XXH图 2 1 Modbus 的查询信息Addr Fun BytecountData1hiData1LoData 2hiData2loData3hiData3loCRC16hiCRC16lo06H 03H 06H 02H 2BH 00H 00H 00H 63H XXH XXH图 2 2 Modbus 的响应信息21 读取线圈状态(功能码 01)读取从机

18、离散量输出口(DO,0X 类型)的 ON/OFF 状态,不支持广播。查询查询信息规定了要读的起始线圈和线圈量,线圈的起始地址为 0000H,1-16 个线圈的寻址地址分为 0000H 0015H(DO1=0000H,DO2=0001H ,依此类推) 。图 2 3 的例子是从地址为 17 的从机读取 DO1 至 DO6 的状态。Addr Fun DO start reg hiDO start reg loDO #of regs hiDO #of regs loCRC16hiCRC16lo11H 01H 00H 00H 00H 06H XXH XXH图 2 3 读取线圈状态-查询响应响应信息中的各

19、线圈的状态与数据区的每一位的值相对应,即每个 DO 占用一位(1 = ON, 0 = OFF) ,第一个数据字节的 LSB 为查询中的寻址地址,其他的线圈按顺序在该字节中由低位向高位排列,直至 8 个为止,下一个字节也是从低位向高位排例。若返回的线圈数不是 8 的倍数,则在最后的数据字节中的剩余位至字节的最高位全部填 0,字节数区说明全部数据的字节数。图 2 4 所示为线圈的输出状态响应的实例。Addr Fun Byte count Data CRC16 hi CRC16 lo11H 01H 01H 2AH XXH XXH数据0 0 0 0 0 0 DO2 DO1MSB 7 6 5 4 3 2

20、 LSB图 2 4 读取线圈状态- 响应Modbus 通讯协议 ( RTU 传输模式)22 读取输入状态(功能码 02)读取从机离散量输入信号(DI,0X 类型)的 ON/OFF 状态,不支持广播。查询查询信息规定了要读的输入起始地址,以及输入信号的数量。输入的起始地址为0000H,1-16 个输入口的地址分别为 0-15(DO1=0000H, DO2=0001H,依此类推) 。图 2 5 的例子是从地址为 17 的从机读取 DI1 到 DI16 的状态。Addr Fun DI startaddr hiDI startaddr loDI numhiDI numloCRC16hiCRC16lo1

21、1H 02H 00H 00H 00H 10H XXH XXH图 2 5 读取输入状态- 查询响应响应信息中的各输入口的状态,分别对应于数据区中的每一位值,1 = ON; 0 = OFF,第一个数据字节的 LSB 为查询中的寻址地址,其他输入口按顺序在该字节中由低位向高位排列,直至 8 个位为止。下一个字节中的 8 个输入位也是从低位到高位排列。若返回的输入位数不是 8 的倍数,则在最后的数据字节中的剩余位直至字节的最高位全部填零。字节数区说明了全部数据的字节数。图 2 6 所示为读数字输出状态响应的实例。Addr Fun Byte count Data1 Data2 CRC16 hi CRC1

22、6 lo11H 02H 02H 33H CCH XXH XXH数据 1DI8 DI7 DI6 DI5 DI4 DI3 DI2 DI1MSB LSB 数据 2DI16 DI15 DI14 DI13 DI12 DI11 DI10 DI9MSB LSB 图 2 6 读取输入状态- 响应23 读取保持寄存器(功能码 03)读取从机保持寄存器(4X 类型)的二进制数据,不支持广播。查询查询信息规定了要读的保持寄存器起始地址及保持寄存器的数量,保持寄存器寻址起始地址为 0000H,寄存器 1-16 所对应的地址分别为 0000H 0015H。图 2 7 的例子是从 17 号从机读 3 个采集到的基本数据

23、U1、U2、U3,U1 的地址为0000H, U2 的地址为 0001H, U3 的地址为 0002H。Addr Fun Data startaddr hiData startaddr loData #ofregs hiData #ofregs loCRC16hiCRC16lo11H 03H 00H 00H 00H 03H XXH XXHModbus 通讯协议 ( RTU 传输模式)图 2 7 读取保持寄存器-查询响应响应信息中的寄存器数据为二进制数据,每个寄存器分别对应 2 个字节,第一个字节为高位值数据,第二个字节为低位数据。图 2 8 的例子是读取 U1,U2,U3(U1=03E8H,U

24、2=03E7H,U3=03E9H)的响应。 Addr Fun BytecountData1hiData1LoData 2hiData2loData3hiData3loCRC16hiCRC16lo11H 03H 06H 03H E8H 03H E7H 03H E9H XXH XXH图 2 8 读取保持寄存器-响应2.4 读取输入寄存器(功能码 04)读取从机输入寄存器(3X 类型 )中的二进制数据,不支持广播。查询查询信息规定了要读的寄存器的起始地址及寄存器的数量,寻止起始地址为 0,寄存器 1-16 所对应的地址分别为 0000H 0015H。图 2 9 的例子是请求 17 号从机的 0009

25、 寄存器。Addr Fun DO addrhiDO addrloData #ofregs hiData #ofregs loCRC16hiCRC16lo11H 04H 00H 08H 00H 01H XXH XXH图 2 9 读取输入寄存器- 查询响应响应信息中的寄存器数据为每个寄存器分别对应 2 个字节,第一个字节为高位数据,第二个字节为低位数据。图 2 10 的例子寄存器 30009 中的数据用 000AH 2 个字节表示。Addr Fun BytecountDatahiDataLoCRC16hiCRC16lo11H 04H 02H 00H 0AH XXH XXH图 2 10 读取输入寄存

26、器- 响应2.5 强置单线圈(功能码 05)强制单个线圈(DO,0X 类型) 为 ON 或 OFF 状态,广播时,该功能可强制所有从机中同一类型的线圈均为 ON 或 OFF 状态。该功能可越过控制器内存的保护状态和线圈的禁止状态。线圈强制状态一直保持有效直至下一个控制逻辑作用于线圈为止。控制逻辑中无线圈程序时,则线圈处于强制状态。查询查询信息规定了需要强制一个单独线圈的类型,线圈的起始地址为 0000H,1-16 个线圈的寻址地址分为 0000H 0015H(DO1=0000H,DO2=0001H ,依此类推) 。由查询数据区中的一个常量,规定被请求线圈的 ON/OFF 状态, FF00H 值

27、请求线圈Modbus 通讯协议 ( RTU 传输模式)处于 ON 状态,0000H 值请求线圈处于 OFF 状态,其它值对线圈无效,不起作用。图示 2-11 的例子是请求 17 号从机开 DO1 的 On 状态。Addr Fun DO addrhiDO addrloValue hiValueloCRC16hiCRC16lo11H 05H 00H 00H FFH 00H XXH XXH图示 2-11 强制单线圈-查询响应图 2 12 所示为对这个命令请求的正常响应是在 DO 状态改变以后传送接收到的数据。Addr Fun DO addrhiDO addrloValue hiValueloCRC1

28、6hiCRC16lo11H 05H 00H 00H FFH 00H XXH XXH图示 2-12 强制单线圈-响应26 预置单寄存器(功能码 06)把一个值预置到一个保持寄存器(4X 类型)中,广播时,该功能把值预置到所有从机的相同类型的寄存器中。该功能可越过控制器的内存保护。使寄存器中的预置值保持有效。只能由控制器的下一个逻辑信号来处理该预置值。若控制逻辑中无寄存器程序时,则寄存器中的值保持不变。查询查询信息规定了要预置寄存器的类型,寄存器寻址起始地址为 0000H,寄存器 1 所对应的地址为 0000H。图示 2-13 的例子是请求 17 号从机 0040H.的值为 2717。Addr F

29、un Data start reg hiData startreg loValuehiValue loCRChiCRClo11H 06H 00H 40H 0AH 9DH XXH XXH 图示 2-13 预设单寄存器-查询响应图 2 14 所示对于预置单寄存器请求的正常响应是在寄存器值改变以后将接收到的数据传送回去。Addr Fun Data start reg hiData startreg loValuehiValue loCRChiCRClo11H 06H 00H 40H 0AH 9DH XXH XXH 图示 2-14 预设单寄存器-响应27 读取异常状态(功能码 7)读从中机中 8 个不

30、正常状态线圈的数据,某些线圈号已在不同型号的控制器中预定义,Modbus 通讯协议 ( RTU 传输模式)而其它的线圈由用户编程,作为有关控制器的状态信息,如“machine ON/OFF”, “heads retraced”,(缩回标题 ), “safeties satisfied”(安全性满意) , “error conditions”(存在错误条件) 或其它用户定义的标志等。该功能码不支持广播。该功能代码为存取该类信息提供了一种简单的方法,不正常线圈的类型是已知的(在功能代码中不需要线圈类型) 预定义的不正常线圈号如下:控制器型号 线圈 设定M84,184/384,584,984 1-8

31、 用户定义484 257 电池状态258-264 用户定义884 761 电池状态762 内存保护状态763 R10 工况状态764-768 用户预定义查询图示 2-15 的例子是请求读从机设备 17 中的不正常状态。Addr Fun CRC16 hi CRC16 lo11H 07H XXH XXH图示 2-15 读取异常状态-查询响应正常响应包含 8 个不正常的线圈状态,为一个数据字节,每个线圈一位。 LSB 对应为最低线圈类型的状态。图 2 16 所示按查询要求返回响应:Addr Fun DO Data CRC16 hi CRC16 lo11H 07H 6DH XXH XXH图示 2-16

32、 读取异常状态-响应该例子中,线圈数据为 6DH (二进制 0110 ,1101),从左到右 (最高位至最低位) 的线圈状态分别为: OFF ON ON OFF ON ON OFF ON。若控制器型号为 984,这些位表示线圈 8 至 1 的状态;若控制器型号为 484 则表示线圈 264 至 257 的状态。28 强置多线圈(功能码 15)按线圈的顺序把各线圈 (DO,0X 类型) 强制成 ON 或 OFF。广播时,该功能代码可对各从机中相同类型的线圈起强制作用。该功能代码可越过内存保护和线圈的禁止状态线圈。保持强制状态有效,并只能由控制器的下一个逻辑来处理。若无线圈控制逻辑程序时,线圈将保持强制状态。查询查询信息规定了被强制线圈的类型,线圈的起始地址为 0000H,1-16 个线圈的寻址地址分为 0000H 0015H(DO1=0000H,DO2=0001H,依此类推) 。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。