04-功能详解

功能详解

Modbus RTU 详解

┌─────────┬──────────┬───────────────┬──────────┐
│ 从站地址 │  功能码   │     数据       │  CRC16   │
│  1 byte │  1 byte  │   N bytes     │  2 bytes │
└─────────┴──────────┴───────────────┴──────────┘

CRC16 校验

程序自动计算发送帧的 CRC16 并验证接收帧的 CRC16。CRC 错误时会在日志中提示。

CRC16 算法:初始值 0xFFFF,多项式 0xA001,处理所有字节(地址 + 功能码 + 数据)。

广播模式

从站地址设为 0,所有从站执行指令但不回复。仅适用于写操作(功能码 05/06/15/16)。

Modbus TCP 详解

┌──────────┬──────────┬──────────┬──────────┬──────────┬───────────────┐
│ 事务标识符 │ 协议标识符 │  长度     │ 单元标识符 │  功能码   │     数据       │
│  2 bytes │  2 bytes │ 2 bytes  │  1 byte  │  1 byte  │   N bytes     │
└──────────┴──────────┴──────────┴──────────┴──────────┴───────────────┘
└─────────────── MBAP 报文头 (7 bytes) ──────────────┘└────── PDU ──────┘

TCP vs RTU 差异

RTUTCP
帧定界字符间隔(3.5 字符时间)TCP 分包
校验CRC16TCP 校验
地址1 字节(1-247)IP:Port + MBAP
默认端口N/A502

功能码详解

功能码请求数据响应数据
01 读线圈起始地址(2B) + 数量(2B)字节数 + 位数据(每8个线圈1字节)
02 读离散输入同上同上
03 读保持寄存器起始地址(2B) + 数量(2B)字节数 + 寄存器值(每寄存器2B)
04 读输入寄存器同上同上

写入功能码(05-06, 15-16)

功能码请求数据
05 写单线圈线圈地址(2B) + 值(FF00=ON, 0000=OFF)
06 写单寄存器寄存器地址(2B) + 值(2B)
15 写多线圈起始地址(2B) + 数量(2B) + 字节数 + 位数据
16 写多寄存器起始地址(2B) + 数量(2B) + 字节数 + 寄存器值序列

异常响应

当从站无法处理请求时,返回异常响应。功能码最高位置 1。

异常码名称说明
01非法功能码从站不支持该功能码
02非法数据地址起始地址 + 数量超出范围
03非法数据值写入值不合理
04从站设备故障从站内部错误
05确认从站已接受但需较长时间处理
06从站设备忙从站正在处理其他任务

程序会自动识别异常响应并在日志中显示对应的异常信息。

写入多寄存器

对于功能码 16(写多寄存器),在 写入数据 框中输入要写入的值,以空格或逗号分隔:

100 200 300 400 500

程序自动计算字节数和寄存器数量。

自动轮询

> 提示:轮询间隔不宜过短(建议 ≥ 200ms),避免从站处理不过来。

数据可视化

  1. 在左侧 数据可视化 面板中勾选 启用图表
  2. 图表区域显示在报文日志下方

图表类型

类型适用场景
折线图寄存器值连续变化趋势
平滑曲线同上,更平滑的展示
散点图离散采样点分布
面积图强调数值累积量
柱状图多寄存器值对比
饼图各寄存器值占比

提取 Modbus 寄存器值

程序自动从 Modbus 响应报文中解析对应地址的寄存器值并在图表中绘制。

时间窗口

调整图表显示的时间范围:5 秒 ~ 600 秒(10 分钟)。

智能分析

点击 智能分析 按钮,程序自动扫描最近的寄存器数据并推荐可能的数值提取规则。

日志导出

支持 TXT 和 CSV 格式。导出内容为十六进制格式的完整 Modbus 报文。