前言
鸽了好久的一个总结,断断续续终于给补全了。都快忘记这玩意了。。。
1. Modbus协议簇功能码介绍
1.1 Modbus-RTU功能码
代码 | 中文名称 | 寄存器PLE地址 | 位操作/字操作 | 操作数量 |
---|---|---|---|---|
01 | 读线圈状态 | 00001-09999 | 位操作 | 单个或多个 |
02 | 读离散输入状态 | 10001-19999 | 位操作 | 单个或多个 |
03 | 读保持寄存器 | 40001-49999 | 字操作 | 单个或多个 |
04 | 读输入寄存器 | 30001-39999 | 字操作 | 单个或多个 |
05 | 写单个线圈 | 00001-09999 | 位操作 | 单个 |
06 | 写单个保持寄存器 | 40001-49999 | 字操作 | 单个 |
15 | 写多个线圈 | 00001-09999 | 位操作 | 多个 |
16 | 写多个保持寄存器 | 40001-49999 | 字操作 | 多个 |
1.2 Modbus-TCP功能码
功能码 | 名称 | 描述 |
---|---|---|
1 | READ_COILS(读线圈) | 取得一组逻辑线圈的当前状态(ON/OFF) |
2 | READ_DISCRETE_INPUTS(读离散输入) | 取得一组开关输入的当前状态(ON/OFF) |
3 | READ_HOLDING_REGS(读保持寄存器) | 在一个或多个保持寄存器中取得当前的二进制值 |
4 | READ_INPUT_REGS(读输入寄存器) | 在一个或多个输入寄存器中取得当前的二进制值 |
5 | WRITE_SINGLE_COIL(写单个线圈) | 强制一个逻辑线圈的通断状态 |
6 | WRITE_SINGLE_REG(写单个寄存器) | 把具体二进制值装入一个保持寄存器 |
7 | READ_EXCEPT_STAT(读取异常状态) | 取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态 |
8 | DIAGNOSTICS(诊断) | 把诊断校验报文送从机,以对通信处理进行评鉴 |
11 | 7GET_COMM_EVENT_CTRS(读取事件计数) | 可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时 |
12 | GET_COMM_EVENT_LOG(读取事件记录) | 可使主机检索每台从机的Modbus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误 |
15 | WRITE_MULT_COILS(写多线圈) | 强制一串连续逻辑线圈的通断 |
16 | WRITE_MULT_REGS(写多寄存器) | 把具体的二进制值装入一串连续的保持寄存器 |
17 | REPORT_SLLAVE_ID(报告从机标识) | 可使主机判断编址从机的类型及该从机运行指示灯的状态 |
20 | READ_FILE_RECORD(读取文件记录) | 读取文件记录信息 |
21 | WRITEE_FILE_RECORD(写文件记录) | 进行文件记录写入 |
22 | MASKK_WRITE_REG(屏蔽写寄存器) | 该功能可设置或清除寄存器中的单个bit |
23 | READ_WRITE_REG(读、写多个寄存器) | 该功能实现了一个读寄存器与一个写寄存器的组合 |
24 | READ_FIFO_QUEUE(读取先进先出队列) | 读取先进先出缓冲区 |
90 | UNITY_SCHNEIDER(Unity-施耐德) | 施耐德UnityPro软件与PLC通信所使用的特定功能码 |
1.3 Modbus异常码
功能码 | 名称 | 描述 |
---|---|---|
02 | Illegal Data Address | 服务器不允许的地址,准确的说,是起始地址与寄存器个数的组合是无效的,比如超出地址范围 |
03 | Illegal Data Value | 请求报文中数据域的值是服务器所不允许的,比如隐含的长度是不正确的 |
04 | Server Devrice Failure | 服务器试图响应时出现不可重新获得的错误 |
05 | Acknowledge | 与编程命令一起使用,返回这个响应以防止客户机中发生超时错误 |
06 | Server Device Busy | 与编程命令一起使用 |
08 | Memory Parity Error | 与功能码20和21以及参考类型6一起使用,指示扩展文件区不能通过一致性校验 |
0A | Gateway Path Unavailable | 与网关一起使用,指示网关不能为处理请求分配输入端口至输出端口的内部通信路径 |
0B | Gateway Target Device Failled to Respond | 与网关一起使用,指示没有从目标设备中获得响应 |
2. wires hark过滤
2.1 协议过滤
1 | modbus |
2.2 功能码过滤
1 | modbus.func_code == xxx |
2.3 Modbus TCP
Modbus TCP数据格式
1 | Transaction identifier : 事务标识符 |
本文作者:
foxcookie
发布时间: 2021-12-29
最后更新: 2023-04-03
本文标题: Modbus协议
本文链接: https://foxcookie.github.io/2021/12/29/Modbus协议/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
发布时间: 2021-12-29
最后更新: 2023-04-03
本文标题: Modbus协议
本文链接: https://foxcookie.github.io/2021/12/29/Modbus协议/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!