MODBUS协议范文功能码及报文解析.docx
- 文档编号:29604912
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:8
- 大小:17.80KB
MODBUS协议范文功能码及报文解析.docx
《MODBUS协议范文功能码及报文解析.docx》由会员分享,可在线阅读,更多相关《MODBUS协议范文功能码及报文解析.docx(8页珍藏版)》请在冰豆网上搜索。
MODBUS协议范文功能码及报文解析
MODBUS协议范文(功能码及报文解析)
Modbu是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
Modbu比其他通信协议使用的更广泛的主要原因有:
公开发表并且无版税要求相对容易的工业网络部署
对供应商来说,修改移动原生的位或字节没有很多限制Modbu允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbu通常用来连接监控计算机和remoteterminalunit(RTU)。
Modbu协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
对于通过TCP/IP(例如以太网)的连接,存在多个Modbu/TCP变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbu有一个扩展版本ModbuPlu(Modbu+或者MB+),不过此协定是Modicon专有的,和Modbu不同。
它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。
它使用1Mbit/的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。
连接ModbuPlu到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA总线的板卡。
Modbu协议是一个mater/lave架构的协议。
有一个节点是mater节点,其他使用Modbu协议参与通信的节点是lave节点。
每一个lave设备都有一个唯一的地址。
在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbu命令,但是通常也只有一个主节点设备启动指令)。
一个ModBu命令包含了打算执行的设备的Modbu地址。
所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会执行,不过不回应指令)。
所有的Modbu命令包含了检查码,以确定到达的命令没有被破坏。
基本的ModBu命令能指令一个RTU改变
它的寄存器的某个值,控制或者读取一个I/O端口,以及指挥设备回送一个或者多个其寄存器中的数据。
有许多modem和网关支持Modbu协议,因为Modbu协议很简单而且容易复制。
它们当中一些为这个协议特别设计的。
有使用有线、无线通信甚至短消息和GPRS的不同实现。
不过设计者需要克服一些包括高延迟和时序的问题。
MODBUS通信过程如下图
n个8Bit16Bit
起始位1个字符
设备地功能代码址
数据
LRC校验
结束符2个字符
2个字2个字2个字符n个字符符符
2字节2字节1字节一般为0高字节在也就是设1个字符n个字符前备地址
实际上MODBUSRTU与ASCII的内容是完全相同的,不同的的ASCII方式用“:
”标识帧起始,用“CRLF”标识帧结束。
校验采用LRC,把RTU帧中一个字节的内容换成了2个ASCII字符。
比如在RTU方式下设备地址01只有一个字节,在ASCII方式下转换成字符串“01”(16进制的3031)。
MODBUSTCP中的设备标识,功能码等与MODBUSRTU相同,可以认为是在MODBUSRTU报文的前边加了一个头,去掉了CRC校验这个尾。
MODBUS协议定义了4种基本数据类型:
可读写位数据,只读位数据,只读16位数据,可读写16位数据。
这些数据分别被称为线圈状态,输入状态,输入寄存器,保持寄存器。
MODBUS协议中定义的这些数据都是一个从地址1开始的数组,访问时需要指明从哪个地址开始访问,访问多少个数据。
下表是MODBUS的功能码。
ModBu功能码功能码010203040506名称读取线圈状态读取输入状态读取保持寄存器读取输入寄存器强置单线圈预置单寄存器作用取得一组逻辑线圈的当前状态(ON/OFF)取得一组开关输入的当前状态(ON/OFF)在一个或多个保持寄存器中取得当前的二进制值在一个或多个输入寄存器中取得当前的二进制值强置一个逻辑线圈的通断状态把具体二进值装入一个保持寄存器取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态080910回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴
07
读取异常状态
编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑可使主机与一台正在执行长程序任务从机通控
询(只用于484)信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时可是主机检索每台从机的ModBu事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误
11
12
读取通信事件记录
13
编程(184/384484可使主机模拟编程器功能修改PC从机逻辑584)可使主机与正在执行任务的从机通信,定期控探询(184/384484询该从机是否已完成其程序操作,仅在含有功584)能13的报文发送后,本功能码才得发送强置多线圈强置一串连续逻辑线圈的通断
1415
161718192021
预置多寄存器报告从机标识
把具体的二进制值装入一串连续的保持寄存器可使主机判断编址从机的类型及该从机运行指示灯的状态发生非可修改错误后,是从机复位于已知状态,可重置顺序字节显示扩展存储器文件中的数据信息把通用参数写入扩展存储文件,或修改之
(884和MICRO84)可使主机模拟编程功能,修改PC状态逻辑重置通信链路读取通用参数(584L)写入通用参数(584L)
22~保留作扩展功能备64用65~保留以备用户功能72所用73~非法功能119120~保留127128~保留255留作内部作用用于异常应答留作用户功能的扩展编码
各个功能码对应的数据类型代功能码0102030405读读读读写位位16位整型16位整型位数据类型
061516
写写写
整16位整型位整16位整型
各个命令的功能和报文如下:
01命令读取线圈状态MODBUS地址00001~MODBUS请求功能码起始地址读取数量MODBUS响应功能码字节计数线圈状态N=读取数量/8错误响应功能码错误代码举例请求域名称功能码起始地址高(字节)起始地址低(字节)读取数量高(字节)读取数量低(字节)数据(he某)0100130013域名称功能码字节计数27(h)~20状态35(h)~28状态38(h)~36状态响应数据(he某)0103CD6B0511BYTEBYTE0某01Nn=NorN+11BYTE2BYTE2BYTE0某010某0000TO0某FFFF1TO2000(0某7D0)
nBYTE如果余数不为0则N=N+111BYTEBYTE
0某01+0某800某1or0某2or0某3or0某4
02命令读取输入状态MODBUS地址10001~
MODBUS请求功能码起始地址读取数量MODBUS响应功能码字节计数输入状态N=读取数量/8错误响应功能码错误代码举例请求域名称功能码起始地址高(字节)起始地址低(字节)读取数量高(字节)读取数量低(字节)数据(he某)0200C40016域
名称功能码字节计数204(h)~197状态212(h)~205状态218(h)~213状态响应数据(he某)0203ACDB3511BYTEBYTE0某02Nn=NorN+11BYTE2BYTE2BYTE0某020某0000TO0某FFFF1TO2000(0某7D0)
nBYTE如果余数不为0则N=N+111BYTEBYTE
0某02+0某800某1or0某2or0某3or0某4
03读保持寄存器
功能码字节计数输入状态错误响应功能码错误代码举例请求域名称功能码起始地址高(字节)起始地址低(字节)读取数量高(字节)读取数量低(字节)
11N某2
BYTEBYTEBYTE
0某03N某2
11
BYTEBYTE
0某03+0某800某1or0某2or0某3or0某4
响应数据(he某)03006B0003域名称功能码字节计数寄存器高(108)寄存器低(108)寄存器高(109)寄存器低(109)寄存器高(110)寄存器低(110)数据(he某)0306022B00000064
04输入寄存器MODBUS地址30001~
MODBUS请求功能码起始地址读取数量MODBUS响应功能码字节计数输入状态错误响应功能码错误代码举例11BYTEBYTE0某04+0某800某1or0某2or0某3or0某411N某2BYTEBYTEBYTE0某04N某21BYTE2BYTE2BYTE0某040某0000TO0某FFFF1TO125(0某7D)
请求域名称功能码起始地址高(字节)起始地址低(字节)读取数量高(字节)读取数量低(字节)数据(he某)0400080001域名称功能码字节计数
响应数据(he某)0402000A
输入寄存器高(9)输入寄存器低(9)
05
设置单个继电器状态
MODBUS响应功能码设置地址设置内容错误响应功能码错误代码举例(吸合6号继电器)请求域名称功能码设置地址高(字节)设置地址低(字节)设置内容高(字节)设置内容低(字节)数据(he某)050005FF00域名称功能码设置地址高(字节)设置地址低(字节)设置内容高(字节)设置内容低(字节)响应数据(he某)050005FFFF11BYTEBYTE0某05+0某800某1or0某2or0某3or0某41BYTE2BYTE2BYTE0某050某0000TO0某FFFF0某0000OR0某FF00
06
设置单个保持寄存器
MODBUS请求功能码设置地址设置内容MODBUS响应功能码设置地址设置内容错误响应功能码错误代码举例设置9号保持寄存器内容为25请求域名称功能码设置地址高(字节)设置地址低(字节)设置内容高(字节)设置内容低(字节)数据(he某)0600080019域名称功能码设置地址高(字节)设置地址低(字节)设置内容高(字节)设置内容低(字节)响应数据(he某)060008001911BYTEBYTE0某06+0某800某1or0某2or0某3or0某41BYTE2BYTE2BYTE0某060某0000TO0某FFFF0某0000to0某FF001BYTE2BYTE2
BYTE0某060某0000TO0某FFFF0某0000to0某FF00
15设置多个继电器状态MODBUS请求功能码设置起始地址设置长度1BYTE2BYTE2BYTE0某0F0某0000TO0某FFFF0某0000TO0某7B0
字节计数设置内容MODBUS响应功能码设置起始地址设置长度错误响应功能码错误代码举例设置继电器请求域名称功能码设置地址高(字节)设置地址低(字节)设置数量高(字节)设置数量低(字节)字节计数设置内容高(字节)设置内容低(字节)
1BYTENBYTE
N
1BYTE2BYTE2BYTE
0某0F0某0000TO0某FFFF0某0000TO0某7B0
11
BYTEBYTE
0某0F+0某800某1or0某2or0某3or0某4
响应数据(he某)0F0013000A02CD01域名称功能码设置地址高(字节)设置地址低(字节)设置数量高(字节)设置数量低(字节)数据(he某)0F0013000A
16设置多个保持寄存器MODBUS请求功能码设置起始地址设置长度1BYTE2BYTE2BYTE0某100某0000TO0某FFFF0某0000TO0某7B0
字节计数设置内容MODBUS响应功能码设置起始地址设置长度错误响应功能码错误代码举例设置多个保持寄存器请求域名称功能码设置地址高(字节)设置地址低(字节)设置数量高(字节)设置数量低(字节)字节计数设置内容高(字节)设置内容低(字节)设置内容高(字节)设置内容低(字节)
1BYTEN某2BYTE
N某2
1BYTE2BYTE2BYTE
0某100某0000TO0某FFFF0某0000TO0某7B0
11
BYTEBYTE
0某10+0某800某1or0某2or0某3or0某4
响应数据(he某)100001000204000A0102域名称功能码设置地址高(字节)设置地址低(字节)设置数量高(字节)设置数量低(字节)数据(he某)0F00010002
如果智能设备有开关量输入输出,模拟量输入输出,有计数器等。
很明显开关量输入可以映射到10001地址,第一路开关量输入为10001,第二路为10002,
开关量输出映射到00001地址,第一路为00001,第二路为00002,.
模拟量输入映射到30001地址,第一路为30001,第二路为30002,
模拟量输出和计数器输入映射到40001地址,第一路为40001,第二路为40002,
当然也可以把所有的数据都放在保持寄存器中,这样对于MODBUS主设备访问时要简单,访问效率能提高,但是处理起来略显繁琐。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MODBUS 协议 范文 功能 报文 解析
![提示](https://static.bdocx.com/images/bang_tan.gif)