下面记录下常用modbus常用功能码,以备后面查询。
1.常用功能码
日常开发常用的功能码就那几个,基本都是读取传感器数据,配置参数。其它的功能很少用。对主设备来说,外部输入的变量,如开关量,传感器的数据都是只读的,因为这些取决于外部条件。但对从设备来说是可以读写的(写寄存器变量),因为主设备和具体的执行设备之间还隔了一层从设备,主设备获取数据,需要经过从设备。从设备对数据想改就改,可以蒙蔽主设备。
功能码(十进制) | 名称 | 位操作/字操作 | 操作数量 | 主设备访问权限 | 从设备访问权限 |
---|---|---|---|---|---|
01 | 读线圈状态 | 位操作(bool) | 单个或多个 | 读/写 | 读/写 |
02 | 读离散输入状态 | 位操作(bool) | 单个或多个 | 只读 | 读/写 |
03 | 读保持寄存器 | 字操作 | 单个或多个 | 读/写 | 读/写 |
04 | 读输入寄存器 | 字操作 | 单个或多个 | 只读 | 读/写 |
05 | 写单个线圈 | 位操作(bool) | 单个 | 读/写 | 读/写 |
06 | 写单个保持寄存器 | 字操作 | 单个 | 读/写 | 读/写 |
15 | 写多个线圈 | 位操作(bool) | 多个 | 读/写 | 读/写 |
16 | 写多个保持寄存器 | 字操作 | 多个 | 读/写 | 读/写 |
- 功能码01:由于历史原因,这个功能码表示线圈状态。其实不仅仅是线圈的状态,其它的数字输出状态也可以通过这个功能码读取,例如报警位,故障,异常。再比从设备为一个红外检测装置当感应到有人经过,红外会置低(0),那这个0状态就可以用此功能码读取。
- 功能码02:读取外部开关量输入状态,例如面板上开关状态,光耦输入。由外部输入的变量一般主设备是无法修改,不过从设备是可以修改的。
- 功能码03:内部输出量的寄存器,如配置参数
- 功能码04:读外部输入量的寄存器,这个输入可以是传感器的数据,可以是ad采集的电压电流数据等。
- 功能码05:写内部开关量状态,如继电器状态,IO状态
- 功能码06:写内部寄存器的值,如配置参数。
- 功能码15:写内部多个开关信号。
- 功能码16:写内部多个寄存器的值,如配置参数较多,需分批传送。
2.完整功能码
下面完整功能码统计信息,只是方便后续查阅方便。其实在实际开发过程中常用的就那几个。当然用户也可以修改协议格式,支持更多的模块。
下表中的数据引用自:https://blog.csdn.net/u010413574/article/details/88999403
功能码 | 名称 | 作用 |
---|---|---|
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 | 保留 | 用于异常应答 |