《Modbus协议分析——TCPRTU》由会员分享,可在线阅读,更多相关《Modbus协议分析——TCPRTU(9页珍藏版)》请在金锄头文库上搜索。
1、Modbus 协议分析 TCP/RTU两种传输方式掌握器能设置为两种传输模式ASCII 或RTU中的任何一种在标准的Modbus 网络通信。用户选择想要的模式,包括串口通信参数波特率、校验方式等,在配置每个掌握器的时候,在一个Modbus 网络上的全部设备都必需选择一样的传输模式和串口参数。所选的ASCII 或RTU 方式仅适用于标准的Modbus 网络,它定义了在这些网络上连续传输的消息段的每一位,以及打算怎样将信息打包成消息域和如何解码。在其它网络上象MAP 和Modbus Plus Modbus 消息被转成与串行传输无关的帧。1、ASCII 模式当掌握器设为在Modbus 网络上以ASC
2、II美国标准信息交换代码 模式通信,在消息中的每个 8Bit字节都作为两个ASCII 字符发送。这种方式的主要优点是字符发送的时间间隔可到达 1 秒而不产生错误。 代码系统 十六进制,ASCII 字符 0.9,A.F 消息中的每个ASCII 字符都是一个十六进制字符组成每个字节的位 1 个起始位 7 个数据位,最小的有效位先发送 1 个奇偶校验位,无校验则无 1 个停顿位有校验时,2 个Bit无校验时 错误检测域 LRC(纵向冗长检测) 2、RTU 模式当掌握器设为在Modbus 网络上以RTU远程终端单元模式通信, 在消息中的每个 8Bit 字节包含两个 4Bit 的十六进制字符。这种方式的
3、主要优点是:在同样的波特率下,可比ASCII 方式传送更多的数据。 代码系统 8 位二进制,十六进制数 0.9,A.F 消息中的每个 8 位域都是一个两个十六进制字符组成每个字节的位 1 个起始位 8 个数据位,最小的有效位先发送 1 个奇偶校验位,无校验则无 1 个停顿位有校验时,2 个Bit无校验时 错误检测域 CRC(循环冗长检测)Modbus 消息帧两种传输模式中ASCII 或RTU,传输设备以将Modbus 消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开头工作, 读地址安排信息,推断哪一个设备被选中播送方式则传给全部设备,判知何时信息已完成。局部的消息也能侦测到并且错误能
4、设置为返回结果。1、ASCII 帧使用ASCII 模式,消息以冒号:字符ASCII 码 3AH开头,以回车换行符完毕ASCII 码 0DH,0AH。其它域可以使用的传输字符是十六进制的 0.9,A.F。网络上的设备不断侦测“:”字符, 当有一个冒号接收到时,每个设备都解码下个域地址域来推断是否发给自己的。消息中字符间发送的时间间隔最长不能超过 1 秒, 否则接收的设备将认为传输错误。一个典型消息帧如下所示:2、RTU 帧使用 RTU 模式,消息发送至少要以 3.5 个字符时间的停顿间隔开头。在网络波特率下多样的字符时间,这是最简洁实现的(如以下图的 T1-T2-T3-T4 所示)。传输的第一个
5、域是设备地址。可以使用的传输字符是十六进制的 0.9,A.F。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域地址域接收到,每个设备都进展解码以推断是否发往自己的。在最终一个传输字符之后,一个至少3.5 个字符时间的停顿标定了消息的完毕。一个的消息可在此停顿后开头。整个消息帧必需作为一连续的流转输。假设在帧完成之前有超过 1.5 个字符时间的停赶忙间,接收设备将刷不完整的消息并假定下一字节是一个消息的地址域。同样地,假设一个消息在小于 3.5 个字符时间内接着前个消息开头,接收的设备将认为它是前一消息的连续。这将导致一个错误,由于在最终的CRC 域的值不行能是正确的。一典型的消息帧如下
6、所示:Modbus RTU 协议格式:恳求和响应带有六个字节的前缀,如下:byte 0:设备地址byte 1:功能码byte 2:存放器地址byte 3:存放器地址byte 4:数据长度byte 5:数据长度byte 6:CRC 校验byte 7:CRC 校验举例:Modbus-RTU 读取温湿度仪表Modbus TCP 协议格式:TCP 和RTU 协议格外类似,只要把RTU 协议的两个字节的校验码去掉,然后在RTU 协议的开头加上 5 个 0 和一个 6 并通过TCP/IP 网络协议发送出去即可MBAP Header 长度共 7 个字节,分别为Transaction identifier(事
7、务标识符),Protocol identifier(协议标识符),Length(长度),Unitidentifier(单元标识符)组成,具体如下表所示: 恳求和响应带有六个字节的前缀,如下:byte 0:事务处理标识符 由效劳器复制 通常为 0byte 1:事务处理标识符 由效劳器复制 通常为 0byte 2:协议标识符= 0byte 3:协议标识符= 0byte 4:长度字段 上半局部字节 = 0 (全部的消息长度小于256)byte 5:长度字段 (下半局部字节)= 后面字节的数量byte 6:单元标识符 (原“从站地址”) byte 7:MODBUS 功能代码byte 8 on:所需的数
8、据地址码:地址码为通讯传送的第一个字节。这个字节说明由用户设定地址码的从机将接收由主机发送来的信息。并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开头。主机发送的地址码说明将发送到的从机地址,而从机发送的地址码说明回送的从机地址。功能码:主机发送的功能码告知从机执行什么任务。下表列出的功能码都有具体的含义及操作。数据区:数据区是依据不同的功能码而不同。数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。各种状况下的协议格式如下:举例:Modbus-TCP 读取温湿度仪表注:通讯涉及的均为 616 进制湿度: 等于实际值 *100 ,单位为百分号。温度:等于实际值
9、 *100 + 27315 。温度举例: :假设 软件 读取到温度 值 为 6 : 75 C1 (16 进制) ) 转换为 30145 ( 十进制) )实际温度用 T T 表示 :T = (30145 27315)/100 = 28.3 ( ( ) )存放器内容定义:只读对象:0x0000: 当前湿度值,0x0001: 当前温度值,读取温湿度数据举例 读取 1 号仪表的温湿度值 ,03 命令 : 起始地址 读取个数恳求: 00 00 00 00 00 06 01 03 00 00 00 02响应: 00 00 00 00 00 07 01 03 04 18 3E 77 51协议解析:恳求:00
10、 00 00 00 固定码00 06 数据长度01 设备地址03 功能码00 00 起始存放器地址00 02 读取存放器个数响应:00 00 00 00 固定码00 07 数据长度01 设备地址03 功能码04 返回存放器数据长度18 3E 湿度(实际湿度 = 6206/100 = 62.06%)77 51 温度(实际温度 = (30545 -27315)/100 = 31.30)说明:实际上 Modbus 协议包括 ASCII、RTU、TCP。标准的 Modicon 掌握器使用 RS232C 实现串行的 Modbus。Modbus 的 ASCII、RTU 协议规定了消息、数据的构造、命令和就答的方式,数据通讯承受 Maser/Slave 方式。Modbus 协议需要对数据进展校验,串行协议中除有奇偶校验外,ASCII 模式承受 LRC 校验,RTU 模式承受 16 位 CRC 校验. ModbusTCP 模式没有额外规定校验,由于 TCP 协议是一个面对连接的牢靠协议。MODBUS TCP 和 MODBUS RTU 的差异不是很大。二者一样的地方是应用数据单元是全都的。差异是 MODBUS TCP 是传输在 TCP/IP 网络上的,多了一个报文头,少了 CRC 校验,承受 TCP 的 502 端口RTU 多了设备地址和 CRC 校验