Modbus功能码示例
Modbus通讯功能码及实例
功能码名称作用01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02 读取输入状态取得一组开关输入的当前状态(ON/OFF)03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05 强置单线圈强置一个逻辑线圈的通断状态06 预置单寄存器把具体二进值装入一个保持寄存器07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时12 读取通信事件记录可是主机检索每台从机的ModBu s事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送15 强置多线圈强置一串连续逻辑线圈的通断16 预置多寄存器把具体的二进制值装入一串连续的保持寄存器17 报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态18 (884和MI CRO 84)可使主机模拟编程功能,修改PC状态逻辑19 重置通信链路发生非可修改错误后,是从机复位于已知状态,可重置顺序字节20 读取通用参数(584L)显示扩展存储器文件中的数据信息21 写入通用参数(584L)把通用参数写入扩展存储文件,或修改之22~64 保留作扩展功能备用65~72 保留以备用户功能所用留作用户功能的扩展编码73~119 非法功能120~127 保留留作内部作用128~255 保留用于异常应答实例在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
ModBus通信协议的【功能码】
ModBus通信协议的【功能码】
Modbus的功能码
ModBus 功能码与数据类型对应表:
RTU ⽅式读取整数据的例⼦:
解析⼀下:主机发送指令,访问从站地址为1,使⽤功能码03(读保持寄存器),起始地址⾼8位、低8位:表⽰想读取的模拟量的起始地址(起始地址为0)。
⽐如例⼦中的起始地址为38,⼗进制为:56。
寄存器数量⾼8位、低8位:表⽰从起始地址开始读多少个模拟量。
例⼦中为1个模拟量。
注意,在返回的信息中⼀个模拟量需要返回两个字节。
错误校验为CRC校验。
从站应答:设备地址和命令号和上⾯的相同。
返回的字节数:表⽰数据的字节个数,也就是数据1,2...n中的n的值。
例⼦中返回了1个模拟量的数据,因为⼀个模拟量需要2个字节所以共2个字节。
数据⾼低字节:41和24代表返回的1个模拟量的值,即⼗进制的16676。
错误校验为CRC校验。
modbus功能码10报文举例说明
modbus功能码10报文举例说明在Modbus通信协议中,功能码10用于写多个寄存器的操作。
下面是一个功能码10报文的例子,以便更好地理解其结构和用法。
首先,功能码10报文由以下部分组成:1. 从站地址:报文的第一个字节是从站地址,用于指定要操作的从站设备。
该地址通常是一个唯一的标识符,用于区分不同的设备。
2. 功能码:紧接着从站地址的下一个字节是功能码,这里使用功能码10表示要进行写操作。
3. 起始地址:接下来的两个字节表示要写入数据的起始寄存器地址。
通过指定起始地址,我们可以告诉从站设备要写入哪些寄存器的数据。
4. 寄存器数量:紧跟在起始地址后的两个字节表示要写入数据的寄存器数量。
这告诉从站设备要写入多少个连续的寄存器。
5. 字节数:下一个字节表示后续数据的字节数。
在功能码10中,每个寄存器的值需要用两个字节表示,所以字节数等于寄存器数量的两倍。
6. 数据:最后,报文中包含实际要写入的数据。
根据字节数指定的数量,每个数据值占两个字节。
举个例子,假设我们要将5个寄存器的值写入地址为1000的起始地址。
这个报文可以表示为:从站地址 | 功能码 | 起始地址 | 寄存器数量 | 字节数 | 数据------------------------------------------------1 | 10 | 03 E8 | 05 | 0A | 0F A0 21 75 92上述报文的含义是,将数据0x0FA0217592写入从站设备地址为1的寄存器1000至1004。
这是一个简单的功能码10报文的例子,用于说明如何使用Modbus协议的功能码10进行写入操作。
根据实际需求,起始地址、寄存器数量和数据可以根据实际情况进行修改。
Modbus协议提供了丰富的功能码,可以满足不同的通信需求。
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 保留用于异常应答实例在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
Modbus通讯功能码及实例
M o d b u s通讯功能码及实例集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]功能码名称作用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号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
MODBUS协议(功能码及报文解析)-485功能码
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通讯功能码及实例
M o d b u s通讯功能码及实例Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】功能码名称作用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号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
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");
modbusascii报文实例
ModbusASCII 是一种用于串行通信的协议,它通常用于工业自动化领域。
在实际应用中,我们经常需要发送和接收 ModbusASCII 报文,下面我们就来看几个实际的报文实例,以便更好地理解和应用ModbusASCII 协议。
1. 单个功能码读取输入寄存器假设我们需要读取一个设备的输入寄存器,并且该设备的位置区域为01,寄存器的起始位置区域为 0000,需要读取的寄存器数量为 10。
那么对应的 ModbusASCII 报文为:```发送:01 04 00 00 00 0A 3A C4解释:- 01:设备位置区域- 04:功能码,表示读取输入寄存器- 00 00:起始位置区域- 00 0A:寄存器数量- 3A C4:CRC 校验```2. 多个功能码写入多个保持寄存器假设我们需要向设备写入多个保持寄存器的数值,并且该设备的位置区域为 02,寄存器的起始位置区域为 1000,需要写入的寄存器数量为 4,数据分别为 1234、5678、xxx、1213。
那么对应的ModbusASCII 报文为:```发送:02 10 03 E8 00 04 08 9B 13 88 23 40 CA解释:- 02:设备位置区域- 10:功能码,表示写入多个保持寄存器- 03 E8:起始位置区域- 00 04:寄存器数量- 08 9B 13 88 23 40:要写入的数值- CA:CRC 校验```3. 单个功能码读取离散输入假设我们需要读取一个设备的离散输入,并且该设备的位置区域为03,输入的起始位置区域为 0000,需要读取的数量为 8。
那么对应的ModbusASCII 报文为:```发送:03 02 00 00 00 08 84 0B解释:- 03:设备位置区域- 02:功能码,表示读取离散输入- 00 00:起始位置区域- 00 08:数量- 84 0B:CRC 校验```通过以上实例,我们可以看到不同功能码对应的 ModbusASCII 报文结构,以及如何根据具体需求来构建报文。
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协议功能码及格式
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. 读取线圈状态
功能码:01
请求:01 01 00 00 00 19 FD C0
接收:01 01 04 0F 03 80 01 A8 C5
解释:请求中的第一个字节为功能码,接下来的两个字节是线圈的数量,后面的字节是起始地址和校验码。
接收的第一个字节是功能码和地址码,第二个字节是线圈状态的字节数,后面跟着的是线圈状态,最后一个字节是校验码。
2. 读取输入状态
功能码:02
请求:01 02 00 00 00 19 B9 C0
接收:01 02 04 00 00
解释:请求和接收的格式与读取线圈状态类似,只是功能码和地址码不同。
3. 读取保持寄存器
功能码:03
请求:01 03 00 00 00 19 F8 C1
接收:01 03 04 3F FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
解释:请求和接收的格式与读取线圈状态类似,只是功能码和地址码不同。
Modbus功能码示例
Modbus功能码示例:分类功能说明:1、读位:一次读512 位(64BYTE)最多,最少16 位(但会读入2 个BYTE)2、写位:一次只能写1 位(针对具体地址写)3、读字:一次最多可读32 个字(64BYTE)4、写字:一次最多可写32 个字(64BYTE)支持的功能码(16 进制表示):01——读位COIL,对应PLC 的DO 状态02——读位INPUT,对应PLC 的DI 状态03——读字,对应PLC 的AO 状态04——读字,对应PLC 的AI 状态05——写位,只写一位COIL,对应PLC 的DO 输出10——写字,写多字,对应PLC 的AO 输出范例:01 功能码:例读DO,2#0X/88(二号站,88 号0X 线圈,此处88 位十进制)发出:02 01 00 50 00 10 3D E4意思:站号02,功能玛01,起始地址0050(十六进制,相当于十进制80),读位长度(0010,相当于十进制16),3DE4 为CRC 校验(先低字节后高字节)回答:02 01 02 80 00 9C 3C 意思:站号02,功能玛01,后面数据(字节)长度02,数据字节1(低字节)80,数据字节2(高字节)00,数据字节先低后高,最后CRC 校验9C3C02 功能玛,读DI 位,例:读1#1X/2,发出:01 02 00 00 00 10 3D C6意思:起始地址0000,一次读入一个字(16 位)长度0010回:01 02 02 FF FF B8 0803 功能玛:例读2#4X/88发出:02 03 00 57 00 01 35 E9回答:02 03 02 00 01 3D 84注意:此功能玛下读入的数据字节排列为先高后低,表明4X/88 的数值为000104 功能玛:读字AI,例1#3X/3发出:01 04 00 02 00 01 90 0A表示:读入的字长度为0001(1 个字)回:01 04 02 10 00 B4 F0 表示3X/3 的值为HEX1000 即十进制4096,先高字节后低字节05 功能玛:例写2#0X/88发出:02 05 00 57 FF 00 3D 9D,“FF 00”表示写“1”,“00 00”表示写“0”回应:02 05 00 57 FF 00 3D 9D,表明写“1”成功10 功能玛:例2#0010 和0011,写连续多字,例写2#0010 和0011 发出:02 10 00 10 00 02 04 XX XX XX XX XX XX 字长字节长CRC回:02 10 00 10 00 02 XX XX 字长CRC例:写-3 到1#4X/1发出:01 10 00 00 00 01 02 FF FD 26 21,负数采用补码回:01 10 00 00 00 01 01 C9。
modbus功能码及格式
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字节
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
写入线圈个数
2字节
0x0001或0x07B0
出错时的返回:
功能代码
1字节
0x8F
错误代码
1字节
01/02/03/04
例子:
7、“16(0x10)”写多寄存器
发送:
功能代码
1字节
0x10
起始地址
2字节
0x0000~0xFFFF
写入寄存器个数
2字节
0x0001~0x007B
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 保留用于异常应答实例在这些功能码中较长使用得就是1、2、3、4、5、6号功能码,使用它们即可实现对下位机得数字量与模拟量得读写操作。
(完整版)MODBUS协议(功能码及报文解析)(可编辑修改word版)
MODBUS 协议Modbus 是一种串行通信协议,是Modicon 于 1979 年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
Mod bus 比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbus 允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbus 通常用来连接监控计算机和 rem ote 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常用指令包括以下几种:
- 功能码03H:
- 功能:读取远程从站若干个保持寄存器(Holding Register)的数值。
- 操作方式:每个保持存储器的数值以字(2个字节)的形式进行应答。
- 举例:假设要读取从机地址0x03的108~110保持存储器的数值,其寄存器地址范围为0x006B~0x006D。
- 发送指令:
- 应答:从站应答数据包括从站地址、功能码、应答字节数、寄存器1高字节、寄存器1低字节、寄存器N高字节、寄存器N低字节。
- 功能码04H:
- 功能:读1~125个连续输入寄存器(Input Register)的数值。
- 操作方式:每个输入寄存器存储器的数值以字(2个字节)的形式进行应答。
- 举例:假设要读取从机地址0x03的9~10号输入存储器的数值,其寄存器地址范围为0x0008~0x0009。
- 发送指令:
- 应答:从站应答数据包括从站地址、功能码、应答字节数、寄存器1高字节、寄存器1低字节、寄存器N高字节、寄存器N低字节。
- 功能码05H:
- 功能:对单个线圈进行写操作。
线圈编号从1开始,地址从0开始。
写值0xFF00表示将线圈置为ON,写值0x0000表示将线圈置为OFF,其它值是无效的。
- 操作方式:位操作。
- 举例:假设要将从站地址0x03的第33个线圈(地址:0x0020)的值设置为ON。
- 发送指令:
- 应答:从站应答数据包括从站地址、功能码、寄存。
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 保留用于异常应答实例在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Modbus功能码示例:
分类功能说明:
1、读位:一次读512 位(64BYTE)最多,最少16 位(但会读入2 个BYTE)
2、写位:一次只能写1 位(针对具体地址写)
3、读字:一次最多可读32 个字(64BYTE)
4、写字:一次最多可写32 个字(64BYTE)
支持的功能码(16 进制表示):
01——读位COIL,对应PLC 的DO 状态
02——读位INPUT,对应PLC 的DI 状态
03——读字,对应PLC 的AO 状态
04——读字,对应PLC 的AI 状态
05——写位,只写一位COIL,对应PLC 的DO 输出10——写字,写多字,对应PLC 的AO 输出
范例:
01 功能码:例读DO,2#0X/88(二号站,88 号0X 线圈,此处88 位十进制)
发出:02 01 00 50 00 10 3D E4
意思:站号02,功能玛01,起始地址0050(十六进制,相当于十进制80),读位长度(0010,相当于十进制16),3DE4 为CRC 校验(先低字节后高字节)
回答:02 01 02 80 00 9C 3C 意思:站号02,功能玛01,后面数据(字节)长度02,数据字节1(低字节)80,数据字节2(高字节)00,数据字节先低后高,最后CRC 校验9C3C
02 功能玛,读DI 位,例:读1#1X/2,
发出:01 02 00 00 00 10 3D C6
意思:起始地址0000,一次读入一个字(16 位)长度0010
回:01 02 02 FF FF B8 08
03 功能玛:例读2#4X/88
发出:02 03 00 57 00 01 35 E9
回答:02 03 02 00 01 3D 84
注意:此功能玛下读入的数据字节排列为先高后低,表明4X/88 的数值为0001
04 功能玛:读字AI,例1#3X/3
发出:01 04 00 02 00 01 90 0A
表示:读入的字长度为0001(1 个字)
回:01 04 02 10 00 B4 F0 表示3X/3 的值为HEX1000 即十进制4096,先高字节后低字节
05 功能玛:例写2#0X/88
发出:02 05 00 57 FF 00 3D 9D,“FF 00”表示写“1”,“00 00”表示写“0”
回应:02 05 00 57 FF 00 3D 9D,表明写“1”成功
10 功能玛:例2#0010 和0011,写连续多字,例写2#0010 和0011 发出:02 10 00 10 00 02 04 XX XX XX XX XX XX 字长字节长CRC
回:02 10 00 10 00 02 XX XX 字长CRC
例:写-3 到1#4X/1
发出:01 10 00 00 00 01 02 FF FD 26 21,负数采用补码
回:01 10 00 00 00 01 01 C9。