主题
11.3 批量写 DTU 配置(电气工程师专用)
尊敬的电气工程师:DTU 配置决定设备通过什么协议(BACnet / Modbus / MQTT / Water 水文 / OPC-UA 等)与上位系统通讯。现场一批设备若走同一种通讯方案,可以用批量操作一次把同一份 DTU 配置刷进去,不用逐台在界面里点。
适用:给一批设备写入相同的 DTU 通讯配置(如统一接入同一个 BACnet 网络或 MQTT 平台)。
第一步:准备 DTU 配置文件
把配置保存为 dtu.json(和批处理同目录)。它就是一个普通的 JSON 对象,下面是 BACnet 的最小可用结构:
json
{
"bacnet": {
"enable": true,
"link": "eth0",
"port": 47808,
"device_instance": 12345,
"device_name": "LPPLC-DEMO",
"objects": [],
"polls": []
}
}字段以实际模块为准
上面是 BACnet 示例。DPU 支持哪些协议、各协议字段名是什么,取决于设备型号与固件。真实字段结构请参考 DTU 配置式编程总览(其中 BACnet 见 2.1 BACnet)或设备实际界面;写错字段不会"写崩"设备,但对应功能不生效。
第二步:写批处理
text
@@CMDS@@
# 第 1 台
SCAN
OPT 1
DTU SET dtu.json
BYE
# 第 2 台
OPT 2
DTU SET dtu.json
BYEDTU SET <文件>:把该 JSON 配置写入设备(设备端存为config.lua)。- 做更多台:复制
OPT / DTU SET / BYE三行。
第三步:双击运行
双击 .bat,工具逐台写入 DTU 配置。
跑完看到什么算成功
DTU SET 那一行下面窗口里是空白的,不打印直观文字回执——正常,不代表失败。结果在窗口最下面「每条指令的实际结果」那一段:
json
{"errmsg":"","errno":0,"method":"write_dtu_config","result":"DTU 配置已写入","seq":5,"type":"resp"}"errno":0 即写入成功。这一段是在软 PLC 模拟器(序列号 10000001)上实测的返回。
DTU 配置一般不需要重启即生效;若您的协议模块(如 MQTT、Water)需要热加载,可在写完后再发一条 RESTART(见批量操作多台 PLC 的指令表)。
想确认配置真的进了设备
在 OPT 与 BYE 之间再补一行,把设备上的配置读回本地文件:
text
DTU GET check.json打开 check.json 与您下发的 dtu.json 对一下取值即可。注意两点实测结论:
- 读回的是设备自己存的格式:键的顺序、缩进和空格会跟您写的文件不一样(例如
objects/polls被排到中间、:前后多了空格)。按值比对,别按文本比对,更不要用"diff 一下不一样"当作失败。 - 重启模拟器后再读,内容仍在 —— 说明是真的写进设备了,不是只缓存在上位机里。
用模拟器练习:一次一台
模拟器版本 2026.9.16 实测:写入之后模拟器进程可能自行退出,同一份脚本里第二台会报 未找到设备。请一台一跑,跑完重新点「🖥 启动软PLC」。详见 11.1 的注意事项。
注意事项
dtu.json须与.bat同目录,UTF-8 保存。- 配置是真实写入,会覆盖设备原有 DTU 配置;下发前确认设备与目标网络匹配(如
device_instance不要与同网段其它设备冲突)。 - 不同设备不同配置时,把
DTU SET后面的文件名换成各自的文件即可。 - 可用
DTU GET [文件]把设备上当前配置读回本地核对。
进阶
若只改个别设备的个别字段,也可在设备模式下直接发一行 JSON: {"method":"write_dtu_config","params":{"config":{"$json_file":"dtu.json"}}}