VisualHMI Modbus 一主多从:start_read 轮询、cycle 调度与读写从机

免费免费技术资料

这篇内容可直接阅读,适合用于基础学习和搜索引流。

本文目录
  1. 1. 1. start_read:后台自动轮询
  2. 2. 2. cycle 与 cycle_run:高低频任务调度
  3. 3. 3. 读写从机寄存器
  4. 4. 3.1 读(缓存直读)
  5. 5. 3.2 写
  6. 6. 3.3 批量写寄存器
  7. 7. 4. 多从站(一主多从)

HMI 做主站(Modbus Master / FX2N / FX3U 主站模式)时,用 start_read 做后台自动轮询读从机,用 set_xxx 写从机。这篇讲主从模式下的读写套路,以及多从站怎么调度。

1. start_read:后台自动轮询

start_read(index, vtype, addr, quantity, cycle, cycle_run, mode)
-- index:    任务索引号 0~127, 用于 stop_read(index) 停止
-- vtype:    数据类型 VT_3x/VT_4x/VT_0x...
-- addr:     起始寄存器地址
-- quantity: 读取数量 1~120 个寄存器
-- cycle:    轮询周期倍数(默认0=每个通信周期都读)
-- cycle_run:周期内第几次执行(0-based, 需 < cycle)
-- mode:     0=持续周期读取(默认), 1=仅读一次(需先 create_resp_que())

调用后 HMI 把该任务加入通信调度队列,每个通信周期自动发 Modbus 请求,返回数据写入内存镜像。脚本用 get_uint16(VT_4x, addr) 直接读缓存,无通信延迟

VisualHMI Modbus 一主多从:start_read 轮询、cycle 调度与读写从机插图

2. cycle 与 cycle_run:高低频任务调度

HMI 把通信周期划分为多个子周期,用来区分高频/低频任务:

调用 行为
start_read(0, VT_4x, 0x1000, 10) 每个通信周期都读 4×1000~1009(高频)
start_read(1, VT_4x, 0x2000, 10, 3, 2) 每 3 个周期读一次,且在第 3 个周期执行(低频)

调度时序:周期#0(0ms)读 0x1000(高频任务);周期#1 再读 0x1000;周期#2 读 0x1000 + 0x2000(低频任务到点)。这样把不同实时性要求的数据错开,避免总线拥堵。

3. 读写从机寄存器

3.1 读(缓存直读)

local v = get_uint16(VT_4x, 0x1000)   -- 读保持寄存器
local f = get_float(VT_4x, 0x1002)    -- 读单精度浮点(占2寄存器)

3.2 写

set_uint16(VT_4x, 0x1000, 100)        -- 写保持寄存器(功能码06)
set_uint16_ex(VT_4x, 0x1010, 1,2,3,4) -- 批量写(功能码10)

3.3 批量写寄存器

local tb = {1, 2, 3, 4, 5}
set_array(VT_4x, 0x1010, tb)          -- 表方式批量写

4. 多从站(一主多从)

项目创建两个从站,站号 10 和 20。读写前用 select_slave() 切换当前从机,或用 set_slave_site() 建立索引到站号的映射:

set_slave_site(0, 10)   -- 索引0 = 站号10
set_slave_site(1, 20)   -- 索引1 = 站号20
select_slave(0)         -- 切到从站10
set_uint16(VT_4x, 0x0000, 1)
select_slave(1)         -- 切到从站20
local v = get_uint16(VT_4x, 0x1000)

VisualHMI Modbus 一主多从:start_read 轮询、cycle 调度与读写从机插图1

一主多从的关键:①start_read 的 index 是任务索引不是站号,停止用 stop_read(index);②从站切换后读写要重新 select_slave;③高频数据用短周期、低频数据用 cycle 倍数错开,不然总线上全是 HMI 的请求帧

整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)LUA 教程「Modbus 一主多从」,版权归大彩科技所有。

技术术语(共 3 个)—— 点击展开
功能码Modbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
保持寄存器Modbus 16位可读写数据,地址从40001开始
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 LUA 脚本 / 串口屏/HMI 开发 字数 1428 字 · 阅读约 4 分钟 更新 2026-08-04 永久链接 https://www.modbus.cn/51499.html
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注