Skip to content

11.3 批量写 DTU 配置(电气工程师专用) ​

尊敬的电气工程师:DTU 配置决定设备通过什么协议(BACnet / Modbus / MQTT / Water 水文 / OPC-UA 等)与上位系统通讯。现场一批设备若走同一种通讯方案,可以用批量操作一次把同一份 DTU 配置刷进去,不用逐台在界面里点。

适用:给一批设备写入相同的 DTU 通讯配置(如统一接入同一个 BACnet 网络或 MQTT 平台)。

批量下发 DTU 配置指令流:选中 → 写入配置 → 退出,复制几组做更多台

第一步:准备 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
BYE
  • DTU 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"}}}

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研