MODBUS协议合约(功能码及其报文解析-).doc

上传人:一*** 文档编号:809305 上传时间:2019-07-16 格式:DOC 页数:14 大小:199.50KB
返回 下载 相关 举报
MODBUS协议合约(功能码及其报文解析-).doc_第1页
第1页 / 共14页
MODBUS协议合约(功能码及其报文解析-).doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《MODBUS协议合约(功能码及其报文解析-).doc》由会员分享,可在线阅读,更多相关《MODBUS协议合约(功能码及其报文解析-).doc(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、MODBUS 协议协议Modbus 是一种串行通信协议,是 Modicon 于 1979 年,为使用可编程逻辑控制器(PLC)而发表的。事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus 比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求 相对容易的工业网络部署 对供应商来说,修改移动原生的位或字节没有很多限制 Modbus 允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus 通常用来连接监控计算机和 remote termina

2、l unit (RTU)。Modbus 协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。大多数 Modbus 设备通信通过串口 EIA-485 物理层进行1。对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU 是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII 是一种人类可读的,冗长的表示方式。这两个变种都使用串行通讯(serial communication)方式。RTU 格式后续的命令数据带有循环冗余校验的校验和,而 ASCII 格式采用纵向冗余校验的校验和。被配置为 RTU 变种的节点不会和设置为ASCII 变种的节

3、点通信,反之亦然。对于通过 TCP/IP(例如以太网)的连接,存在多个 Modbus/TCP变种,这种方式不需要校验和的计算。对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。Modbus 有一个扩展版本 Modbus Plus(Modbus+或者 MB+),不过此协定是 Modicon 专有的,和 Modbus 不同。它需要一个专门的协处理器来处理类似 HDLC 的高速令牌旋转。它使用 1Mbit/s 的双绞线,并且每个节点都有转换隔离装置,是一种采用转换边缘触发而不是电压水平触发的装置。连接 Modbus Plus 到计算机需要特别的接口,通常是支持 ISA(

4、SA85),PCI 或者 PCMCIA 总线的板卡。Modbus 协议是一个 master/slave 架构的协议。有一个节点是 master 节点,其他使用 Modbus 协议参与通信的节点是 slave 节点。每一个 slave 设备都有一个唯一的地址。在串行和 MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个 Modbus 命令,但是通常也只有一个主节点设备启动指令)。一个 ModBus 命令包含了打算执行的设备的 Modbus 地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址 0 例外,指定地址 0 的指令是广播指令,所

5、有收到指令的设备都会执行,不过不回应指令)。所有的 Modbus 命令包含了检查码,以确定到达的命令没有被破坏。基本的 ModBus 命令能指令一个 RTU改变它的寄存器的某个值,控制或者读取一个 I/O 端口,以及指挥设备回送一个或者多个其寄存器中的数据。有许多 modems 和网关支持 Modbus 协议,因为 Modbus 协议很简单而且容易复制。它们当中一些为这个协议特别设计的。有使用有线、无线通信甚至短消息和 GPRS 的不同实现。不过设计者需要克服一些包括高延迟和时序的问题。MODBUS 通信过程如下图MODBUS RTU 报文格式起始位设备地 址功能代 码数据CRC 校验结束符T

6、1-T2-T3-T48Bit8Bitn 个8Bit16BitT1-T2-T3-T4MODBUS ASCII 报文格式起始位设备地 址功能代码数据LRC 校 验结束符1 个字符2 个字 符2 个字符 n 个字符2 个字 符2 个字符MODBUS TCP 报文交互标识协议标识 报文长度 设备标识 功能代码数据2 字节 一般为 02 字节 一般为 02 字节 高字节在 前1 字节 也就是设 备地址1 个字符 n 个字符实际上 MODBUS RTU 与 ASCII 的内容是完全相同的,不同的的 ASCII 方式用“:”标识帧起始,用“CR LF”标识帧结束。校验采用 LRC,把 RTU 帧中一个字节的

7、内容换成了 2 个 ASCII 字符。比如在 RTU 方式下设备地址 01 只有一个字节,在 ASCII 方式下转换成字符串“01”(16 进制的 30 31 )。MODBUS TCP 中的设备标识,功能码等与 MODBUS RTU 相同,可以认为是在 MODBUS RTU 报文的前边加了一个头,去掉了 CRC 校验这个尾。MODBUS 协议定义了 4 种基本数据类型:可读写位数据,只读位数据,只读 16 位数据,可读写 16 位数据。这些数据分别被称为线圈状态,输入状态,输入寄存器,保持寄存器。MODBUS 协议中定义的这些数据都是一个从地址 1 开始的数组,访问时需要指明从哪个地址开始访问

8、,访问多少个数据。下表是 MODBUS 的功能码。ModBus 功能码 功能 码名称作用01读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02读取输入状态取得一组开关输入的当前状态(ON/OFF)03读取保持寄存器在一个或多个保持寄存器中取得当前的二进制 值04读取输入寄存器在一个或多个输入寄存器中取得当前的二进制 值05强置单线圈强置一个逻辑线圈的通断状态06预置单寄存器把具体二进值装入一个保持寄存器07读取异常状态取得 8 个内部线圈的通断状态,这 8 个线圈的地址由控制器决定,用户逻辑可以将这些线圈 定义,以说明从机状态,短报文适宜于迅速读 取状态08回送诊断校验把诊断校验报文送

9、从机,以对通信处理进行评 鉴09编程(只用于 484) 使主机模拟编程器作用,修改 PC 从机逻辑10控询(只用于 484)可使主机与一台正在执行长程序任务从机通信, 探询该从机是否已完成其操作任务,仅在含有 功能码 9 的报文发送后,本功能码才发送11读取事件计数可使主机发出单询问,并随即判定操作是否成 功,尤其是该命令或其他应答产生通信错误时12读取通信事件记录可是主机检索每台从机的 ModBus 事务处理通 信事件记录。如果某项事务处理完成,记录会 给出有关错误13编程(184/384 484 584)可使主机模拟编程器功能修改 PC 从机逻辑14探询(184/384 484 584)可

10、使主机与正在执行任务的从机通信,定期控 询该从机是否已完成其程序操作,仅在含有功 能 13 的报文发送后,本功能码才得发送15强置多线圈强置一串连续逻辑线圈的通断16预置多寄存器把具体的二进制值装入一串连续的保持寄存器17报告从机标识可使主机判断编址从机的类型及该从机运行指 示灯的状态18(884 和 MICRO 84)可使主机模拟编程功能,修改 PC 状态逻辑19重置通信链路发生非可修改错误后,是从机复位于已知状态, 可重置顺序字节20读取通用参数 (584L)显示扩展存储器文件中的数据信息21写入通用参数 (584L)把通用参数写入扩展存储文件,或修改之226 4保留作扩展功能备 用657

11、 2保留以备用户功能 所用留作用户功能的扩展编码731 19非法功能120 127保留留作内部作用128 255保留用于异常应答各个功能码对应的数据类型代码功能数据类型01读位02读位03读16 位整型04读16 位整型05写位06写整 16 位整型15写位16写整 16 位整型MODBUS 协议相当复杂,但是常用的命令也就简单的几个,01,02,03,04,05,06,15,16 号命令。各个命令的功能和报文如下:01 命令 读取线圈状态 MODBUS 地址 00001MODBUS 请求请求功能码1 BYTE0X01起始地址2 BYTE0X0000 TO 0XFFFF读取数量2 BYTE1

12、TO 2000(0X7D0)MODBUS 响应响应功能码1 BYTE0X01字节计数1 BYTEN线圈状态n BYTEn =N or N+1N =读取数量/8 如果余数不为 0 则 N=N+1 错误错误 响应响应功能码1 BYTE0X01+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例举例请求响应域名称数据(hex)域名称数据(hex)功能码01功能码01起始地址高(字节)00字节计数03起始地址低(字节)1327(h)20 状 态CD读取数量高(字节)0035(h)28 状 态6B读取数量低(字节)1338(h)36 状 态0502 命令 读取输入状态 M

13、ODBUS 地址 10001MODBUS 请求请求功能码1 BYTE0X02起始地址2 BYTE0X0000 TO 0XFFFF读取数量2 BYTE1 TO 2000(0X7D0)MODBUS 响应响应功能码1 BYTE0X02字节计数1 BYTEN输入状态n BYTEn =N or N+1N =读取数量/8 如果余数不为 0 则 N=N+1 错误错误 响应响应功能码1 BYTE0X02+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例举例请求响应域名称数据(hex)域名称数据(hex)功能码02功能码02起始地址高(字节)00字节计数03起始地址低(字节)C

14、4204(h)197 状态AC读取数量高(字节)00212(h)205 状态DB读取数量低(字节)16218(h)213 状态3503 读保持寄存器 MODBUS 地址 40001MODBUS 请求请求功能码1 BYTE0X03起始地址2 BYTE0X0000 TO 0XFFFF读取数量2 BYTE1 TO 125(0X7D)MODBUS 响应响应功能码1 BYTE0X03字节计数1 BYTEN*2输入状态N*2 BYTE 错误错误 响应响应功能码1 BYTE0X03+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例举例请求响应域名称数据(hex)域名称数据(

15、hex)功能码03功能码03起始地址高(字节)00字节计数06起始地址低(字节)6B寄存器高(108)02读取数量高(字节)00寄存器低(108)2B读取数量低(字节)03寄存器高(109)00寄存器低(109)00寄存器高(110)00寄存器低(110)6404 输入寄存器 MODBUS 地址 30001MODBUS 请求请求功能码1 BYTE0X04起始地址2 BYTE0X0000 TO 0XFFFF读取数量2 BYTE1 TO 125(0X7D)MODBUS 响应响应功能码1 BYTE0X04字节计数1 BYTEN*2输入状态N*2 BYTE 错误错误 响应响应功能码1 BYTE0X04

16、+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例举例请求响应域名称数据(hex)域名称数据(hex)功能码04功能码04起始地址高(字节)00字节计数02起始地址低(字节)08输入寄存器高 (9)00读取数量高(字节)00输入寄存器低 (9)0A读取数量低(字节)0105 设置单个继电器状态MODBUS 请求请求功能码1 BYTE0X05设置地址2 BYTE0X0000 TO 0XFFFF设置内容2 BYTE0x0000 OR 0XFF00 0x0000 释放继电器 0xff00 吸合继电器MODBUS 响应响应功能码1 BYTE0X05设置地址2 BYTE

17、0X0000 TO 0XFFFF设置内容2 BYTE0x0000 OR 0XFF00错误错误 响应响应功能码1 BYTE0X05+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例举例(吸合吸合 6 号继电器号继电器)请求响应域名称数据(hex)域名称数据(hex)功能码05功能码05设置地址高(字节)00设置地址高(字节)00设置地址低(字节)05设置地址低(字节)05设置内容高(字节)FF设置内容高(字节)FF设置内容低(字节)00设置内容低(字节)FF06 设置单个保持寄存器MODBUS 请求请求功能码1 BYTE0X06设置地址2 BYTE0X0000

18、TO 0XFFFF设置内容2 BYTE0x0000 to 0XFF00MODBUS 响应响应功能码1 BYTE0X06设置地址2 BYTE0X0000 TO 0XFFFF设置内容2 BYTE0x0000 to 0XFF00错误错误 响应响应功能码1 BYTE0X06+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例举例 设置设置 9 号保持寄存器内容为号保持寄存器内容为 25请求响应域名称数据(hex)域名称数据(hex)功能码06功能码06设置地址高(字节)00设置地址高(字节)00设置地址低(字节)08设置地址低(字节)08设置内容高(字节)00设置内容高

19、(字节)00设置内容低(字节)19设置内容低(字节)1915 设置多个继电器状态MODBUS 请求请求功能码1 BYTE0X0F设置起始地址2 BYTE 0X0000 TO 0XFFFF设置长度2 BYTE0X0000 TO 0X7B0字节计数1 BYTEN设置内容N BYTE MODBUS 响应响应功能码1 BYTE0X0F设置起始地址2 BYTE0X0000 TO 0XFFFF设置长度2 BYTE0X0000 TO 0X7B0错误错误 响应响应功能码1 BYTE0X0F+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例举例 设置继电器设置继电器请求响应域名

20、称数据(hex)域名称数据(hex)功能码0F功能码0F设置地址高(字节)00设置地址高(字节)00设置地址低(字节)13设置地址低(字节)13设置数量高(字节)00设置数量高(字节)00设置数量低(字节)0A设置数量低(字节)0A字节计数02设置内容高(字节)CD设置内容低(字节)0116 设置多个保持寄存器MODBUS 请求请求功能码1 BYTE0X10设置起始地址2 BYTE0X0000 TO 0XFFFF设置长度2 BYTE0X0000 TO 0X7B0字节计数1 BYTEN*2设置内容N*2 BYTE MODBUS 响应响应功能码1 BYTE0X10设置起始地址2 BYTE0X000

21、0 TO 0XFFFF设置长度2 BYTE0X0000 TO 0X7B0错误错误 响应响应功能码1 BYTE0X10+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例举例 设置多个保持寄存器设置多个保持寄存器请求响应域名称数据(hex)域名称数据(hex)功能码10功能码0F设置地址高(字节)00设置地址高(字节)00设置地址低(字节)01设置地址低(字节)01设置数量高(字节)00设置数量高(字节)00设置数量低(字节)02设置数量低(字节)02字节计数04设置内容高(字节)00设置内容低(字节)0A设置内容高(字节)01设置内容低(字节)02MODBUS

22、协议在智能设备中的应用上面讲述了 MODBUS 协议的报文以及命令,那么在智能设备中如何使用这个协议呢?如果智能设备有开关量输入输出,模拟量输入输出,有计数器等。很明显开关量输入可以映射到 10001 地址,第一路开关量输入为 10001,第二路为 10002, 开关量输出映射到 00001 地址,第一路为 00001,第二路为 00002,.模拟量输入映射到 30001 地址,第一路为 30001,第二路为 30002,模拟量输出和计数器输入映射到 40001 地址,第一路为 40001,第二路为 40002,当然也可以把所有的数据都放在保持寄存器中,这样对于 MODBUS 主设备访问时要简单,访问效率能提高,但是处理起来略显繁琐。

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com