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");
- 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。