modbus功能码及格式
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 命令,但是通常也惟独一个主节点设备启动指令)。
modbus协议功能码及格式
1、“01”读取线圈状态发送:功能代码1字节 0x01起始地址2字节 0x0000~0xFFFF 线圈数量2字节 1~2000(0x7D0)接收:功能代码1字节 0x01字节数1字节 N线圈状态n字节n = N/N+1N=读取线圈个数 / 8 ,如果余数不为0则N=N+1出错时的返回:功能代码1字节 0x81错误代码1字节 01/02/03/04例子:返送:01 01 00 00 00 19 FD C0 即:读取25个线圈的状态返回:01 01 04 0F 03 80 01 A8 C5FC BN N1 N2 N3 N4 CRC,N1为前8位的状态以此内推。
2、“02”读取输入状态发送:功能代码1字节 0x02起始地址2字节 0x0000~0xFFFF 输入点数量2字节 1~2000(0x7D0)接收:功能代码1字节 0x02字节数1字节 N输入点状态n字节n = N/N+1N=读取输入点个数 / 8 ,如果余数不为0则N=N+1出错时的返回:功能代码1字节 0x82错误代码1字节 01/02/03/04例子:发送:01 02 00 00 00 19 B9 C0读25个输入线圈的状态返回:01 02 04 00 00 00 00 FB E2FC BN N1 N2 N3 N4 CRC3、“03”保持型寄存器读取发送:功能代码1字节 0x03起始地址2字节 0x0000~0xFFFF 寄存器数量2字节 1~125(0x7D)接收:功能代码1字节 0x03字节数1字节 2*N寄存器值 N*2字节N=寄存器数量出错时的返回:功能代码1字节 0x83错误代码1字节 01/02/03/04例子:发送:01 03 00 00 00 03 05 CB读3个寄存器里面的值返回:01 03 06 01 2C 01 2C 01 2C 71 1A返回3个寄存器的值,每个寄存器的值有2个BYTE组成4、“05”写单一线圈发送:功能代码1字节 0x05线圈地址2字节 0x0000~0xFFFF 写入值2字节 0x0000或0xFF00接收:功能代码1字节 0x05线圈地址2字节 0x0000~0xFFFF 写入值2字节 0x0000或0xFF00出错时的返回:功能代码1字节 0x85错误代码1字节 01/02/03/04例子:发送:01 05 00 00 FF 00 8C 3A写单个线圈的值,把地址为0的线圈置一。
Modbus功能码表
Modbus功能码一览________________________________________Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表1是ModBus的功能码定义。
表1 ModBus功能码功能码名称作用01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02 读取输入状态取得一组开关输入的当前状态(ON/OFF)03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05 强置单线圈强置一个逻辑线圈的通断状态06 预置单寄存器把具体二进值装入一个保持寄存器07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时12 读取通信事件记录可是主机检索每台从机的ModBus事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送15 强置多线圈强置一串连续逻辑线圈的通断16 预置多寄存器把具体的二进制值装入一串连续的保持寄存器17 报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态18 (884和MICRO 84)可使主机模拟编程功能,修改PC状态逻辑19 重置通信链路发生非可修改错误后,是从机复位于已知状态,可重置顺序字节20 读取通用参数(584L)显示扩展存储器文件中的数据信息21 写入通用参数(584L)把通用参数写入扩展存储文件,或修改之22~64 保留作扩展功能备用65~72 保留以备用户功能所用留作用户功能的扩展编码73~119 非法功能120~127 保留留作内部作用128~255 保留用于异常应答Modbus网络只是一个主机,所有通信都由他发出。
Modbus功能码一览表(最全版)
Modbus功能码一览________________________________________Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表1是ModBus的功能码定义。
表1 ModBus功能码功能码名称作用01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02 读取输入状态取得一组开关输入的当前状态(ON/OFF)03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05 强置单线圈强置一个逻辑线圈的通断状态06 预置单寄存器把具体二进值装入一个保持寄存器07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时12 读取通信事件记录可是主机检索每台从机的ModBus事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送15 强置多线圈强置一串连续逻辑线圈的通断16 预置多寄存器把具体的二进制值装入一串连续的保持寄存器17 报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态18 (884和MICRO 84)可使主机模拟编程功能,修改PC状态逻辑19 重置通信链路发生非可修改错误后,是从机复位于已知状态,可重置顺序字节20 读取通用参数(584L)显示扩展存储器文件中的数据信息21 写入通用参数(584L)把通用参数写入扩展存储文件,或修改之22~64 保留作扩展功能备用65~72 保留以备用户功能所用留作用户功能的扩展编码73~119 非法功能120~127 保留留作内部作用128~255 保留用于异常应答Modbus网络只是一个主机,所有通信都由他发出。
ModBusRTV功能码错误码应答格式和通讯格式汇总
表 1.1 MODBUS 部分功能码.......................................................................................................2 表 1.2 MODBUS 寄存器地址分配...............................................................................................2 表 1.3 MODBUS 寄存器种类说明...............................................................................................3 1.4 PLC 地址和协议地址区别..................................................................................................3 1 功能码“01”:读取线圈寄存器.........................................................................................5 2 功能码“02”:读取开关量输入寄存器............................................................................ 5 3 功能码“03”:读保持寄存器.............................................................................................6 4 功能码“04”读取输入寄存器.............................................................................................6 5 功能码“05”写单个开关量输出.........................................................................................7 6 功能码“06”写单个保持寄存器.........................................................................................7 7 功能码“0F”写多个开关量输出..........................................................................................8 8 功能码“10”写多个保持寄存器........................................................................................ 8 错误代码表................................................................................................................................. 9 9 错误应答..................................................................................................................................9
Modbus通讯格式详解教程
Modbus通讯协议格式Modbus通讯协议格式为主机发送:[开始] [从机地址] [功能代码] [起始寄存器地址高8 位] [低8位] [写单寄存器数高8 位] [低8 位] [LRC 校验码] [CR] [LF]所以本文依据格式逐个介绍解疑:[开始] 为:[从机地址] 为已知;[功能代码] 的名称、作用将在下面介绍;[寄存器地址]分配及寄存器中值的含义将在下面介绍;[LRC 校验码] 可以用Commix软件算出来,详细请参考Commix相关资料;最后是实例加以说明验证。
功能码名称作用01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02 读取输入状态取得一组开关输入的当前状态(ON/OFF)03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05 强置单线圈强置一个逻辑线圈的通断状态06 预置单寄存器把具体二进值装入一个保持寄存器07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时12 读取通信事件记录可是主机检索每台从机的ModBus事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送15 强置多线圈强置一串连续逻辑线圈的通断16 预置多寄存器把具体的二进制值装入一串连续的保持寄存器17 报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态18 (884和MICRO 84)可使主机模拟编程功能,修改PC状态逻辑19 重置通信链路发生非可修改错误后,是从机复位于已知状态,可重置顺序字节20 读取通用参数(584L)显示扩展存储器文件中的数据信息21 写入通用参数(584L)把通用参数写入扩展存储文件,或修改之22~64 保留作扩展功能备用65~72 保留以备用户功能所用留作用户功能的扩展编码73~119 非法功能120~127 保留留作内部作用128~255 保留用于异常应答保护器Modbus 通讯协议:半双工RS485 口,传输距离≤1200 米。
Modbus功能码一览
Modbus功能码一览Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表1是ModBus的功能码定义。
Modbus网络只是一个主机,所有通信都由他发出。
网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。
采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
表2是ModBus各功能码对应的数据类型。
(1)在ModBus系统中有2种传输模式可选择。
这2种传输模式与从机PC通信的能力是同等的。
选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。
一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)这两种模式的定义见表3编程的主计算机及主PC很适宜。
RTU则适用于机器语言编程的计算机和PC主机。
用RTU模式传输的数据是8位二进制字符。
如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。
用以构成报文的ASCII字符都是十六进制字符。
ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。
表4给出了以RTU 方式读取整数据的例子(CRC-16(循环冗余错误校验)CRC-16错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选发送。
报文先与X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示为二进制数 11000000000000101。
MODBUS协议功能码及报文解析-485功能码
MODBUS协议功能码及报文解析-485功能码MODBUS 协议功能码及报文解析 485 功能码在工业自动化领域,通信协议是实现设备之间高效、准确数据交换的关键。
MODBUS 协议作为一种广泛应用的工业通信协议,凭借其简单易用、开放性强等特点,在众多场景中发挥着重要作用。
其中,485 功能码更是 MODBUS 协议中的核心组成部分,理解它们对于掌握MODBUS 协议的应用至关重要。
MODBUS 协议最初由 Modicon 公司于 1979 年开发,现已成为工业领域通信的事实标准。
它支持多种物理层介质,如 RS-232、RS-485 等。
而在采用 RS-485 物理层的应用中,MODBUS 协议的功能码决定了数据的传输方式和内容。
MODBUS 协议中的功能码可以分为四大类:读输入寄存器、读保持寄存器、写单个寄存器、写多个寄存器。
下面我们来详细解析一下这些功能码。
读输入寄存器功能码(04H)主要用于读取从设备的输入状态或数据。
例如,在一个温度监测系统中,传感器将温度值转换为数字信号存储在输入寄存器中,主设备通过发送 04H 功能码及相应的寄存器地址和数量,就可以获取温度数据。
读保持寄存器功能码(03H)用于读取从设备中可修改和保存的数据。
比如,设备的配置参数、运行时间等通常存储在保持寄存器中,主设备使用 03H 功能码来获取这些信息,以便进行监控和管理。
写单个寄存器功能码(06H)允许主设备向从设备的单个寄存器写入数据。
假设我们要设置一个设备的工作模式,就可以通过 06H 功能码将代表特定工作模式的数值写入相应的寄存器。
写多个寄存器功能码(10H)则用于一次性向从设备的多个寄存器写入数据。
这在需要批量设置参数或更新大量数据时非常有用,能提高通信效率。
了解了这些基本的功能码,接下来我们看看 MODBUS 协议的报文结构。
MODBUS 协议的报文通常由地址域、功能码域、数据域和校验域组成。
地址域用于标识从设备的地址,确保主设备的指令能够准确发送到目标设备。
modbus 功能码请求格式
m_Command->AddString("16,写多个保持寄存器,011000000001020000A650");
对于功能码6,保持寄存器读出AQW0的值
//VW0(0),vw2(1),vw4(2),vw6,vw8...,本身AQW不能直接读,需要通过程序传送数据VW100到AQW0(看梯形图)
6,写单个保持寄存器(VW100--第51个作为AQW0值,寻址为50,0x32),0106003200002805
写单个:01 05 00 01 FF 00(开) --功能5
01 05 00 01 00 00(关)
写多个:01 0F 00 00 00 08 01 00(Q0...)--功能15
01 0F 00 08 00 10 02 02 00
读单个:01 01 00 01 00 01 --功能1
举例:15号命令请求格式(从设备地址为1、Modbus功能码15、Modbus寄存器开始地址0、写位变量个数16,即2个字节)
01 0F 00 00 00 10 02 01 00 E3 B0
字节0为从设备ID、字节1为功能码(十六进制)、字节2-3为Modbus寄存器开始地址、字节4-5为Modbus寄存器个数、字节6为发送字节个数、字节7-8为发送数据(2个字节即16个位)、字节9-10为CRC校验
m_Command->AddString("3,读保持寄存器(字,两个字节,16位),010300000001840A");
m_Command->AddString("4,读单个/多个输入寄存器(字,两个字节,16位),01040000000131CA");
MODBUS协议(功能码及报文解析)
MODBUS协议Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
M odbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数Modbus设备通信通过串口EIA-485物理层进行[1]。
对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。
Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。
这两个变种都使用串行通讯(serial communication)方式。
RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。
被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。
对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP 变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbus 有一个扩展版本 Modbus Plus(Modbus+或者MB+),不过此协定是Modicon专有的,和 Modbus不同。
它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。
它使用1Mbit/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。
(完整版)MODBUS协议(功能码及报文解析)
MODBUS协议Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
M odbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数Modbus设备通信通过串口EIA-485物理层进行[1]。
对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。
Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。
这两个变种都使用串行通讯(serial communication)方式。
RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。
被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。
对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP 变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbus 有一个扩展版本 Modbus Plus(Modbus+或者MB+),不过此协定是Modicon专有的,和 Modbus不同。
它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。
它使用1Mbit/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。
modbus功能码
modbus功能码Modbus是一种常用的工业通信协议,用于连接现代自动化系统中的设备和控制器。
Modbus功能码是对Modbus协议中不同数据访问请求的分类和标识,用于指示主站要求从站进行的特定操作。
本文将详细解释Modbus功能码的不同类型和用途。
Modbus协议定义了一种简单且经济有效的通信方式,支持在不同设备之间进行数据读写和控制操作。
Modbus功能码是在Modbus 通信过程中使用的一种标识符,用于确定通信的目的和操作类型。
在Modbus协议中,功能码用于请求或响应不同类型的操作。
常用的Modbus功能码包括读取操作、写入操作和控制操作。
1.读取操作功能码:1.1 读取线圈状态(功能码01): 用于读取从站的线圈状态,并将其返回给主站。
可以用于查询设备的开关状态等信息。
1.2 读取输入状态(功能码02): 用于读取从站的输入状态,如传感器的输入状态等信息。
1.3 读取保持寄存器(功能码03): 用于读取从站的保持寄存器中的数据。
1.4 读取输入寄存器(功能码04): 用于读取从站的输入寄存器中的数据。
2.写入操作功能码:2.1 写单个线圈(功能码05): 用于将从站的某个线圈设置为特定状态,例如打开或关闭。
2.2 写单个保持寄存器(功能码06): 用于将从站的某个保持寄存器设置为特定值。
2.3 写多个线圈(功能码15): 用于同时设置多个从站的线圈状态。
2.4 写多个保持寄存器(功能码16): 用于同时设置多个从站的保持寄存器中的数据。
3.控制操作功能码:3.1 强制单个线圈(功能码05): 用于将从站的某个线圈设置为特定状态,通常用于控制设备的开关状态。
3.2 屏蔽写保持寄存器(功能码22): 用于在特定的地址范围内写入从站的保持寄存器中的数据。
根据不同的功能码,主站可以向从站发送特定的请求,并从从站获得相应的响应。
这样,主站可以实现与从站之间的数据交换和控制操作。
需要注意的是,Modbus功能码是通信双方之间的约定,主站和从站必须按照相同的功能码进行通信,才能实现正确的数据交换和操作。
Modbus功能码一览表
远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系 统,各 PC 可以和中心主机交换信息而不影响各 PC 执行本身的控制任务。表 2 是 ModBus 各功能码对应的数据类型。
表 2 ModBus 功能码与数据类型对应表
代码
功能
数据类型
01
读
位
02
读
位
03
读
整型、字符型、状态字、浮点型
习惯于成串发送数据的设备会首选送出字符的最右位(LSB-最低有效位)。 而在生成 CRC 情况下,发送首位应是被除数的最高有效位 MSB。由于在运算中不 用进位,为便于操作起见,计算 CRC 时设 MSB 在最右位。生成多项式的位序也必 须反过来,以保持一致。多项式的 MSB 略去不记,因其只对商有影响而不影响 余 数。 生成 CRC-16 校验字节的步骤如下: ①装如一个 16 位寄存器,所有数位均为 1。
(2)Modbus 的数据校验方式 CRC-16(循环冗余错误校验)
CRC-16 错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位 和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选 发 送。报文先与 X↑16 相乘(左移 16 位),然后看 X↑16+X↑15+X↑2+1 除, X↑16+X↑15+X↑2+1 可以表示为二进制数 11000000000000101。整数商位忽略 不记,16 位余数加入该报文(MSB 先发送),成为 2 个 CRC 校验字节。余数中的 1 全部初始化,以免所 有的零成为一条报文被接收。经上述处理而含有 CRC 字 节的报文,若无错误,到接收设备后再被同一多项式(X↑16+X↑15+X↑2+1)除, 会得到一个 零余数(接收设备核验这个 CRC 字节,并将其与被传送的 CRC 比较)。 全部运算以 2 为模(无进位)。
Modbus通讯 功能码及实例
功效【2 】码名称感化01 读取线圈状况取得一组逻辑线圈的当前状况(ON/OFF)02 读取输入状况取得一组开关输入的当前状况(ON/OFF)03 读取保持存放器在一个或多个保持存放器中取得当前的二进制值04 读取输入存放器在一个或多个输入存放器中取得当前的二进制值05 强置单线圈强置一个逻辑线圈的通断状况06 预置单存放器把具体二进值装入一个保持存放器07 读取平常状况取得8个内部线圈的通断状况,这8个线圈的地址由掌握器决议08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09 编程(只用于484)使主机模仿编程器感化,修正PC从机逻辑10 控询(只用于484)可使主机与一台正在履行长程序义务从机通信,探听该从机是否已完成其操作义务,仅在含有功效码9的报文发送后,本功效码才发送11 读取事宜计数可使主机发出单讯问,并随即剖断操作是否成功,尤其是该敕令或其他应答产生通信错误时12 读取通信事宜记载可是主机检索每台从机的ModBus事务处理通信事宜记载.假如某项事务处理完成,记载会给出有关错误13 编程(184/384 484 584)可使主机模仿编程器功效修正PC从机逻辑14 探听(184/384 484 584)可使主机与正在履行义务的从机通信,按期控询该从机是否已完成其程序操作,仅在含有功效13的报文发送后,本功效码才得发送15 强置多线圈强置一串持续逻辑线圈的通断16 预置多存放器把具体的二进制值装入一串持续的保持存放器17 报告从机标识可使主机断定编址从机的类型及该从机运行指导灯的状况18 (884和MICRO 84)可使主机模仿编程功效,修正PC状况逻辑19 重置通信链路产生非可修正错误后,是从机复位于已知状况,可重置次序字节20 读取通用参数(584L)显示扩大存储器文件中的数据信息21 写入通用参数(584L)把通用参数写入扩大存储文件,或修正之22~64 保留作扩大功效备用65~72 保留以备用户功效所用留感化户功效的扩大编码73~119 不法功效120~127 保留留作内部感化128~255 保留用于平常应答实例在这些功效码中较长应用的是1.2.3.4.5.6号功效码,应用它们即可实现对下位机的数字量和模仿量的读写操作.1.读可读写数字量存放器(线圈状况):盘算机发送敕令:[装备地址] [敕令号01] [肇端存放器地址高8位] [低8位] [读取的存放器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]例:[11][01][00][13][00][25][CRC低][CRC高]意义如下:<1>装备地址:在一个485总线上可以挂接多个装备,此处的装备地址表示想和哪一个装备通信.例子中为想和17号(十进制的17是十六进制的11)通信.<2>敕令号01:读取数字量的敕令号固定为01.<3>肇端地址高8位.低8位:表示想读取的开关量的肇端地址(肇端地址为0).比如例子中的肇端地址为19.<4>存放器数高8位.低8位:表示从肇端地址开端读若干个开关量.例子中为37个开关量.<5>CRC校验:是从开首一向校验到此之前.在此协定的最后再作介绍.此处须要留意,CRC校验在敕令中的高下字节的次序和其他的相反.装备响应:[装备地址] [敕令号01] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位] [CRC校验的高8位]例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高]意义如下:<1>装备地址和敕令号和上面的雷同.<2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的值.<3>数据1...n:因为每一个数据是一个8位的数,所以每一个数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合.比如例子中,表示20号(索引号为19)开封闭合,21号断开,22闭合,23闭合,24断开,25断开,26闭合,27闭合...假如讯问的开关量不是8的整倍数,那么最后一个字节的高位部分无意义,置为0.<4>CRC校验同上.2.读只可读数字量存放器(输入状况):和读取线圈状况相似,只是第二个字节的敕令号不再是1而是2.3.写数字量(线圈状况):盘算机发送敕令:[装备地址] [敕令号05] [需下置的存放器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]例:[11][05][00][AC][FF][00][CRC低][CRC高]意义如下:<1>装备地址和上面的雷同.<2>敕令号:写数字量的敕令号固定为05.<3>需下置的存放器地址高8位,低8位:表清楚明了须要下置的开关的地址.<4>下置的数据高8位,低8位:表明须要下置的开关量的状况.例子中为把该开封闭合.留意,此处只可所以[FF][00]表示闭合[00][00]表示断开,其他数值不法.<5>留意此敕令一条只能下置一个开关量的状况.装备响应:假如成功把盘算机发送的敕令原样返回,不然不响应.4.读可读写模仿量存放器(保持存放器):盘算机发送敕令:[装备地址] [敕令号03] [肇端存放器地址高8位] [低8位] [读取的存放器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]例:[11][03][00][6B][00][03][CRC低][CRC高]意义如下:<1>装备地址和上面的雷同.<2>敕令号:读模仿量的敕令号固定为03.<3>肇端地址高8位.低8位:表示想读取的模仿量的肇端地址(肇端地址为0).比如例子中的肇端地址为107.<4>存放器数高8位.低8位:表示从肇端地址开端读若干个模仿量.例子中为3个模仿量.留意,在返回的信息中一个模仿量须要返回两个字节.装备响应:[装备地址] [敕令号03] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位] [CRC校验的高8位]例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]意义如下:<1>装备地址和敕令号和上面的雷同.<2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的值.例子中返回了3个模仿量的数据,因为一个模仿量须要2个字节所以共6个字节.<3>数据1...n:个中[数据1][数据2]分离是第1个模仿量的高8位和低8位,[数据3][数据4]是第2个模仿量的高8位和低8位,以此类推.例子中返回的值分离是555,0,100.<4>CRC校验同上.5.读只可读模仿量存放器(输入存放器):和读取保存存放器相似,只是第二个字节的敕令号不再是2而是4.6.写单个模仿量存放器(保持存放器):盘算机发送敕令:[装备地址] [敕令号06] [需下置的存放器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]例:[11][06][00][01][00][03][CRC低][CRC高]意义如下:<1>装备地址和上面的雷同.<2>敕令号:写模仿量的敕令号固定为06.<3>需下置的存放器地址高8位,低8位:表清楚明了须要下置的模仿量存放器的地址.<4>下置的数据高8位,低8位:表明须要下置的模仿量数据.比如例子中就把1号存放器的值设为3.<5>留意此敕令一条只能下置一个模仿量的状况.装备响应:假如成功把盘算机发送的敕令原样返回,不然不响应.。
Modbus功能码一览
Modbus 功能码一览Modbus 网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包 括软件。
它可应用于各种数据采集和过程监控。
下表1是Mo d Bus 的功能码定义。
Modbus网络只是一个主机,所有通信都由他发出。
网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。
采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
表2是ModB us各功能码对应的数据类型。
(1)在ModBus系统中有2种传输模式可选择。
这2种传输模式与从机PC通信的能力是同等的。
选择时应视所用ModBus主机而定,每个ModBu s系统只能使用一种模式,不允许2种模式混用。
一种模式是AS CII(美国信息交换码),另一种模式是R TU(远程终端设备)这两种模式的定义见表3的主计算机及主PC很适宜。
RTU则适用于机器语言编程的计算机和P C主机。
用RTU模式传输的数据是8位二进制字符。
如欲转换为AS CII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。
用以构成报文的ASCII字符都是十六进制字符。
ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。
表4给出了以R TU 方式读取整数据的例子(CRC-16(循环冗余错误校验)CRC-16错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选发送。
modbus协议格式
modbus协议格式Modbus是一种通信协议,常用于工业自动化领域中的数据传输。
该协议定义了一种以主从架构进行通信的方式,其中主设备(通常是一个控制器)通过发送命令来读取或写入从设备(如传感器、执行器等)的数据。
下面是Modbus协议的格式。
Modbus协议包括了不同的功能码,每个功能码对应一种操作。
常用的功能码包括读取和写入寄存器、读取和写入多个寄存器等。
以下是Modbus协议的格式:1. 通讯起始位:一个起始位用于标记通讯的开始。
通常是一个高电平信号。
2. 从设备地址位:一个8位的二进制数,用于标识从设备的地址。
每个从设备都有一个唯一的地址。
3. 功能码:一个8位的二进制数,用于标识所需执行的操作。
例如,功能码03表示读取多个寄存器的值。
4. 数据位:根据功能码的不同,数据位的格式也会有所不同。
在读取寄存器的操作中,数据位表示了要读取的寄存器地址以及寄存器数量。
在写入寄存器的操作中,数据位表示了寄存器地址和要写入的值。
5. CRC校验:一个16位的循环冗余校验码,用于检测数据传输过程中是否出现错误。
发送方会计算CRC校验码并将其附加到消息的末尾,接收方在接收消息后也会重新计算CRC校验码并与接收到的校验码进行比较,如果两者不一致,则说明数据传输过程中出现了错误。
6. 通讯结束位:一个结束位用于标记通讯的结束。
通常是一个低电平信号。
总体来说,Modbus协议的格式是比较简单且易于理解的。
通过定义好的功能码和数据位,主设备可以以统一的方式与不同的从设备进行通讯,实现数据的读取和写入操作。
同时,通过CRC校验码的使用,可以有效地检测和纠正数据传输过程中的错误,提高通讯的可靠性。
需要注意的是,Modbus协议有两种常用的传输方式:串行和以太网。
串行通信是通过RS485或RS232等物理层接口进行数据传输的,而以太网通信则是通过TCP/IP协议在局域网或广域网中进行数据传输的。
不同的通信方式会影响到数据帧的封装和物理层的传输。
modbus功能码及格式
1、“01”读取线圈状态发送:功能代码1字节0x01起始地址2字节0x0000~0xFFFF 线圈数量2字节1~2000(0x7D0)接收:功能代码1字节0x01字节数1字节N线圈状态n字节n = N/N+1N=读取线圈个数 / 8 ,如果余数不为0则N=N+1出错时的返回:功能代码1字节0x81错误代码1字节01/02/03/04例子:2、“02”读取输入状态发送:功能代码1字节0x02起始地址2字节0x0000~0xFFFF 输入点数量2字节1~2000(0x7D0)接收:功能代码1字节0x02字节数1字节N输入点状态n字节n = N/N+1N=读取输入点个数 / 8 ,如果余数不为0则N=N+1出错时的返回:功能代码1字节0x82错误代码1字节01/02/03/04例子:3、“03”保持型寄存器读取发送:功能代码1字节0x03起始地址2字节0x0000~0xFFFF 寄存器数量2字节1~125(0x7D)接收:功能代码1字节0x03字节数1字节2*N寄存器值N*2字节N=寄存器数量出错时的返回:功能代码1字节0x83错误代码1字节01/02/03/04例子:4、“05”写单一线圈发送:功能代码1字节0x05线圈地址2字节0x0000~0xFFFF 写入值2字节0x0000或0xFF00接收:功能代码1字节0x05线圈地址2字节0x0000~0xFFFF 写入值2字节0x0000或0xFF00出错时的返回:功能代码1字节0x85错误代码1字节01/02/03/04例子:5、“06”写单一寄存器发送:功能代码1字节0x06寄存器地址2字节0x0000~0xFFFF 写入值2字节0x0000~0xFFFF 接收:功能代码1字节0x06寄存器地址2字节0x0000~0xFFFF 写入值2字节0x0000~0xFFFF 出错时的返回:功能代码1字节0x86错误代码1字节01/02/03/04例子:6、“15(0x0F)”写多线圈发送:功能代码1字节0x0F起始地址2字节0x0000~0xFFFF 写入线圈个数2字节0x0001~0x07B0写入字节数1字节N写入值N字节N=写入线圈个数 / 8 ,如果余数不为0则N=N+1接收:功能代码1字节0x0F起始地址2字节0x0000~0xFFFF出错时的返回:功能代码1字节0x8F错误代码1字节01/02/03/04例子:7、“16(0x10)”写多寄存器发送:功能代码1字节0x10起始地址2字节0x0000~0xFFFF 写入寄存器个数2字节0x0001~0x007B 写入字节数1字节2*N写入值N*2字节N=写入寄存器个数接收:功能代码1字节0x10起始地址2字节0x0000~0xFFFF出错时的返回:功能代码1字节0x90错误代码1字节01/02/03/04例子:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、“01”读取线圈状态
发送:
功能代码1字节0x01
起始地址2字节0x0000~0xFFFF 线圈数量2字节1~2000(0x7D0)接收:
功能代码1字节0x01
字节数1字节N
线圈状态n字节n = N/N+1
N=读取线圈个数/ 8 ,如果余数不为0则N=N+1
出错时的返回:
功能代码1字节0x81
错误代码1字节01/02/03/04
例子:
2、“02”读取输入状态
功能代码1字节0x02
起始地址2字节0x0000~0xFFFF 输入点数量2字节1~2000(0x7D0)
功能代码1字节0x02
字节数1字节N
输入点状态n字节n = N/N+1
出错时的返回:
功能代码1字节0x82
错误代码1字节01/02/03/04
例子:
3、“03”保持型寄存器读取
发送:
功能代码1字节0x03
起始地址2字节0x0000~0xFFFF 寄存器数量2字节1~125(0x7D)接收:
功能代码1字节0x03
字节数1字节2*N
寄存器值N*2字节
N=寄存器数量
出错时的返回:
功能代码1字节0x83
错误代码1字节01/02/03/04
例子:
4、“05”写单一线圈
功能代码1字节0x05
线圈地址2字节0x0000~0xFFFF 写入值2字节0x0000或0xFF00
功能代码1字节0x05
线圈地址2字节0x0000~0xFFFF 写入值2字节0x0000或0xFF00出错时的返回:
功能代码1字节0x85
错误代码1字节01/02/03/04
例子:
5、“06”写单一寄存器
功能代码1字节0x06
寄存器地址2字节0x0000~0xFFFF 写入值2字节0x0000~0xFFFF
功能代码1字节0x06
寄存器地址2字节0x0000~0xFFFF 写入值2字节0x0000~0xFFFF
功能代码1字节0x86
错误代码1字节01/02/03/04
例子:
6、“15(0x0F)”写多线圈
发送:
功能代码1字节0x0F
起始地址2字节0x0000~0xFFFF 写入线圈个数2字节0x0001~0x07B0写入字节数1字节N
写入值N字节
功能代码1字节0x0F
起始地址2字节0x0000~0xFFFF 写入线圈个数2字节0x0001或0x07B0
功能代码1字节0x8F
错误代码1字节01/02/03/04
例子:
7、“16(0x10)”写多寄存器
功能代码1字节0x10
起始地址2字节0x0000~0xFFFF 写入寄存器个数2字节0x0001~0x007B 写入字节数1字节2*N
写入值N*2字节
N=写入寄存器个数
接收:
功能代码1字节0x10
起始地址2字节0x0000~0xFFFF 写入寄存器个数2字节0x0001或0x007B
功能代码1字节0x90
错误代码1字节01/02/03/04
例子:
如有侵权请联系告知删除,感谢你们的配合!。