菜单

6.4 Modbus 从站

下载

屏作为 从站,等待 PLC 或上位机读写屏内寄存器。本节使用海岸泵站工程和 PLC 联调助手。

核心功能

  • 提供线圈、离散输入、输入寄存器和保持寄存器。
  • 接收主站写入并更新画面。
  • 读取屏幕操作后的数值。

1. 参数设置

在 工程 → 设置 → 工程设置 中配置通信参数。

波特率、数据位、校验位、停止位和接收回调统一见 6.1 DCBUS;本章串口联调使用 115200、8N1。

6.4 Modbus 从站 参数编号,完整 IDE 窗口
序号 参数 本例 作用
1 协议类型 ModbusSlave 选择当前工程使用的通信协议。
2 从站站点 1 屏在 Modbus 总线上的站号;本例 1,正常单播范围 1~247。
3 字符间隔 5 用于判断一帧接收结束的字符间隔。
4 延时应答ms 20 收到请求后等待多久再应答;本例 20 ms。
5 同步画面 否 公共设置,见 6.3 Modbus 主站 的“公共参数”。
6 画面写入地址 未设置 公共设置,见 6.3 Modbus 主站 的“公共参数”。
7 画面取自地址 未设置 公共设置,见 6.3 Modbus 主站 的“公共参数”。
8 字节序 默认大端 公共设置,见 6.3 Modbus 主站 的“公共参数”。

2. 地址绑定

控件 工程地址 协议数值地址 功能
水温 3X0064 100 输入寄存器,读 FC04
液位 3X0065 101 输入寄存器,读 FC04
转速 / 低速 / 高速 4X0064 100 保持寄存器,读 FC03,写 FC06/10
水泵 / 启动 / 停止 0X0224 548 线圈,读 FC01,写 FC05

地址换算: 工程地址后缀按十六进制填写,0064=十进制 100,0224=十进制 548。0/1 区的单地址为 1 位,3/4 区为 16 位字;40001 等手册标签须先按设备规则换算。

3. 应用

下载本节工程 · 6.8 示例下载

  1. 打开 SeasideSlave 并运行,模拟器串口副屏选择 工程通信,打开 COM2。
  2. 助手选择 Modbus 主站,站号 1,打开 COM3。
  3. 点击“读取”,转速初值为 0;写入 70 后,屏上转速更新,再读取确认。
  4. 在助手中启动、停止水泵;在屏上按“低速 40%”,再从助手读取,结果为 40。
Modbus 从站:外部写入、读取及线圈启停

示例脚本每 500 ms 向屏内输入区更新水温 25、液位 65。保持寄存器由主站或画面操作修改,避免周期脚本覆盖设定值。

lua 复制代码
local INPUT, HOLDING = 5, 6

function on_init()
    set_uint16(HOLDING, 100, 0)
    start_timer(6, 500, 0, 0)
end

function on_timer(timer_id)
    if timer_id ~= 6 then return end
    set_uint16(INPUT, 100, 25)
    set_uint16(INPUT, 101, 65)
end

1/3 区对外部主站只读,屏内部 Lua 可以更新这些数据。完整四区及脚本用法见 5.6 Modbus 读写。

3.1 报文核对

以下报文字节为十六进制,末尾为 CRC 低字节、高字节。

操作 请求 正常应答
读取保持寄存器 100,值为 70 01 03 00 64 00 01 C5 D5 01 03 02 00 46 39 B6
写保持寄存器 100=70 01 06 00 64 00 46 49 E7 原报文回显
置位线圈 548 01 05 02 24 FF 00 CD 89 原报文回显
复位线圈 548 01 05 02 24 00 00 8C 79 原报文回显

4. 常见问题

现象 检查项
一直无应答 主从角色、站号、COM 配对及串口参数
读到别的值 数据区、十六进制地址和字节序
写后又恢复原值 设备或周期脚本是否覆盖该地址
显示为 0 0 可以是有效数值,结合通信记录判断

6.8 示例下载 · 6.3 Modbus 主站

上一个
6.3 Modbus 主站
下一个
6.5 三菱 FX2N
最近修改: 2026-11-06Powered by