《MODBUS协议功能码及报文解析要点.docx》由会员分享,可在线阅读,更多相关《MODBUS协议功能码及报文解析要点.docx(17页珍藏版)》请在第一文库网上搜索。
1、ModbUS是一种串行通信合同,是MOdiCon于1979年,为使用可编程逻辑控制器(P1C)而刊登时。事实上,它已经成为工业领域通信合同原则,并且目前是工业电子设备之间相称常用的连接方式。ModbUS比其他通信合同使用的更广泛的重要因素有:公开刊登并且无版税规定相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有诸多限制Modbus容许多种设备连接在同一种网络上进行通信,举个例子,一种由测量温度和湿度的装置,并且将成果发送给计算机。在数据采集与监视控制系统(SCADA)中,M。dbus一般用来连接监控计算机和remoteterminIuit(RTU)oModbus合同目前存在用于串
2、口、以太网以及其他支持互联网合同的网络的版本。大多数ModbUS设备通信通过串口EIA-485物理层进行。对于串行连接,存在两个变种,它们在数值数据表达不同和合同细节上略有不同。ModbusRTU是一种紧凑时,采用二进制表达数据的方式,ModbusASCII是一种人类可读时,冗长的表达方式。这两个变种都使用串行通讯(seria1commuication)方式。RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。被配备为RTU变种的节点不会和设立为ASC11变种的节点通信,反之亦然。对于通过TCP/IP(例如以太网)的连接,存在多种ModbUS/TCP变
3、种,这种方式不需要校验和的计算。对于所有的这三种通信合同在数据模型和功能调用上都是相似的,只有封装方式是不同的。Modbus有一种扩展版本ModbusP1US(Moe1bUs+或者MB+),但是此协定是MOe1iCon专有的和MOdbUS不同。它需要一种专门的协解决器来解决类似HD1C的高速令牌旋转。它使用1Mbit/s的双绞线,并且每个节点均有转换隔离装置,是一种采用转换/边沿触发而不是电压/水平触发的装置。连接ModbUSP1us到计算机需要特别的接口,一般是支持ISA(SA85),PC1或者PCMCIA总线的板卡。MC)dbus合同是一种masters1ve架构的合同。有一种节点是mas
4、ter节点,其他使用ModbUS合同参与通信的节点是s1ave节点。每一种s1ave设备均有一种唯一的地址。在串行和MB+网络中,只有被指定为主节点的节点可以启动一种命令(在以太网上,任何一种设备都能发送一种Modbus命令,但是一般也只有一种主节点设备启动指令)。一种ModBUS命令涉及了打算执行的设备的ModbuS地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会执行,但是不回应指令)。所有的MOdbUS命令涉及了检查码,以拟定达到的命令没有被破坏。基本的ModBus命令能指令一种RTu变化它的寄存器的某个值,控
5、制或者读取一种o端口,以及指挥设备回送一种或者多种其寄存器中的数据。有许多modemS和网关支持ModbUS合同,由于ModbiJS合同很简朴并且容易复制。它们当中某些为这个合同特别设计的。有使用有线、无线通信甚至短消息和GPRS的不同实现。但是设计者需要克服某些涉及高延迟和时序的问题。MODBUS通信过程如下图MODBUSRTU报文格式起始位设备地址功能代码数据CRC校验结束符T1-T2aT1-Tn个8Bi-T3-T8Bit8Bit16Bit2-T3t4-T4起始位分工功能代码数据必结束符址验2个字2个字1个字符52个字符n个字符位2个字符MODBUS交互标记2字节一般为0TCP报文合同标记
6、报文长度设备标记功能代码数据2字节2字节1字节一般为0高字节在也就是设1个字符n个字符前备地址事实上MODBUSRTU与ASCII的内容是完全相似的,不同的的ASC11方式用“:”标记帧起始,用“CR1F”标记帧结束。校验采用1RC,把RTU帧中一种字节的内容换成了2个ASCII字符。例如在RTU方式下设备地址O1只有一种字节,在ASCI1方式下转换成字符串tt01w(16进制的3031)oMODBUSTCP中的设备标记,功能码等与MODBUSRTU相似,可以觉得是在MoDBUSRTU报文的前边加了一种头,去掉了CRC校验这个尾。MODBUS合同定义了4种基本数据类型:可读写位数据,只读位数据
7、,只读16位数据,可读写16位数据。这些数据分别被称为线圈状态,输入状态,输入寄存器,保持寄存器。MODBUS合同中定义的这些数据都是一种从地址1开始的数组,访问时需要指明从哪个地址开始访问,访问多少个数据。下表是MODBUS的功能码。MOc1BUS功能码功能码名称作用O1读取线圈状态获得一组逻辑线圈的目前状态(ON/OFF)02读取输入状态获得一组开关输入B目前状态(ON/OFF)03读取保持寄存器在一种或多种保持寄存器中获得目前的二进制值04读取输入寄存器在一种或多种输入寄存器中获得目前B二进制值05强置单线圈强置一种逻辑线圈的通断状态06预置单寄存器把具体二进值装入一种保持寄存器07读取
8、异常状态获得8个内部线圈的通断状态,这8个线圈I内地址由控制器决定,顾客逻辑可以将这些线圈定义,以阐明从机状态,短报文合适于迅速读取状态08回送诊断校验把诊断校验报文送从机,以对通信解决进行评鉴09编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑可使主机与一台正在执行长程序任务从机通10控询(只用于484)信,打听该从机与否已完毕其操作任务,仅在具有功能码9时报文发送后,本功能码才发送11读取事件计数可使主机发出单询问,并随后鉴定操作与否成功,特别是该命令或其他应答产生通信错误时可是主机检索每台从机BM0dBus事务解决12读取通信事件记录通信事件记录。如果某项事务解决完毕,记录会给
9、出有关错误13编程(184/384484584)可使主机模拟编程器功能修改PC从机逻辑打听(184/384484584)可使主机与正在执行任务的从机通信,定期控14询该从机与否已完毕其程序操作,仅在具有功能13的报文发送后,本功能码才得发送15强置多线圈强置一串持续逻辑线圈日勺通断16预置多寄存器把具体的二进制值装入一串持续的保持寄存器17报告从机标记可使主机判断编址从机日勺类型及该从机运营批示灯B状态18(884和M1CRO84)可使主机模拟编程功能,修改PC状态逻辑19重置通信链路发生非可修改错误后,是从机复位于已知状态,可重置顺序字节20读取通用参数(5841)显示扩展存储器文献中日勺数
10、据信息21写入通用参数(5841)把通用参数写入扩展存储文献,或修改之2保存作扩展功能备264用6572保存以备顾客功能所用留作顾客功能的扩展编码73119非法功能12012保存留作内部作用7128255保存用于异常应答各个功能码相应的数据类型代功能数据类型码01读位MODBUS合同相称复杂,但是常用的命令也就简朴的几种,O1.02,03,04,05,06,15,16号命令。各个命令的功能和报文如下:01命令读取线圈状态MoDBUS地址OOOO1MODBUS祈求功能码1BYTE0X01起始地址2BYTEOX0000TO0XFFFF读取数量2BYTE1TO(OX7DO)MODBUS响应功能码1B
11、YTE0X01字节计数1BYTEN线圈状态nBYTEn=NorN+1N二读取数量/8如果余数不为O则N=N+1错误响应功能码1BYTE0X01+0X80错误代码1BYTE0x1or0x2oror0x30x4举例祈求响应域名称数据(hex)域名称数据(hex)功能码01功能码01起始地址高(字节)00字节计数03起始地址低(字节)1327(h)20状态CD读取数量高(字节)0035(h)28状态6B读取数量低(字节)1338(h)36状态0502命令读取输入状态MODBUS地址10001-MODBUS祈求功能码1BYTE0X02起始地址2BYTE0X0000TO0XFFFF读取数量2BYTE1T
12、O(OX7DO)MODBUS响应功能码1BYTE0X02字节计数1BYTEN输入状态nBYTEn=NorN1N二读取数量/8如果余数不为0贝IJN=N+1错误响应功能码1BYTEOX02+0X80错误代码1BYTE0x1or02or03or0x4举例祈求响应域名称数据(heX)域名称数据(hex)功能码02功能码02起始地址高(字节)00字节计数03起始地址低(字节)C4204(h)-197状态AC读取数量高(字节)00212(h)205状态DB读取数量低(字节)16218(h)213状态35MODBUS祈求功能码1BYTE0X03起始地址2BYTE0X0000TO0XFFFF读取数量2BYT
13、E1TO125(0X7D)MODBUS响应功能码1BYTE0X03字节计数1BYTEN*2输入状态N*2BYTE错误响应功能码1BYTE0X03+0X8O错误代码1BYTE0x1Or0x2or0x3or0x4举例祈求响应域名称数据(hex)域名称数据(heX)功能码03功能码03起始地址高(字节)OO字节计数06起始地址低(字节)6B寄存器高(108)02读取数量高(字节)OO寄存器低(108)2B读取数量低(字节)03寄存器高(109)00寄存器低(109)00寄存器高(110)00寄存器低(110)64O4输入寄存器MoDBUS地址30O01MODBUS祈求功能码1BYTE0X04起始地址2BYTE0X0000TOOXFFFF读取数量2BYTE1TO125(0X7D)MODBUS响应功能码1BYTE0X04字节计数1BYTEN*2输入状态N*2BYTE错误响应功能码1BYTE0X04+0X80错误代码1BYTE0x1or0x2or0x3or0x4举例祈求响应域名称数据(hex)域名称数据(hex)功能码04功能码04起始地址高(字节)00字节计数02起始地址低(字节)08输入寄存器高(9)00读取数量高(字节)OO输入寄存器低(9)OA读取数量低(字节)