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 协议的报文通常由地址域、功能码域、数据域和校验域组成。
地址域用于标识从设备的地址,确保主设备的指令能够准确发送到目标设备。
- 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
例子:
如有侵权请联系告知删除,感谢你们的配合!。