Skip to content

11.4 批量写梯形图(电气工程师专用) ​

尊敬的电气工程师:梯形图也能批量下发。和 Lua / DTU 不同,REPL 没有给"下载梯形图"单独做一个简写命令,但可以用一行 JSON 直接走底层引擎(设备模式下 device_id 自动填,不用手写)。您照样是"准备一个文件 + 改几行批处理"。

适用:把同一份梯形图(指令表)刷到一批设备。文件就是一行条指令的纯文本,不是 CSV、也不是工程目录。

批量下发梯形图指令流:选中 → 下载(可校验) → 退出,复制几组做更多台

第一步:准备梯形图文件 ​

把梯形图写成**指令表(IL)**纯文本,保存为 ladder.il(和批处理同目录)。示例(上电 M8000 导通时 Y0 输出):

text
LD M8000
OUT Y0
END

END 是最后一行,而且只写一次

指令表以 END 收尾。少写 END 时工具会替您补上,程序照样能编过——但请照习惯写出来, 读的人一眼能看到程序在哪里结束。

真正会咬人的是反过来那种:END 之后还写着指令。这些行不会被解析、也不会报错, 静默丢弃。想写「主程序 + 中断 / 子程序」,正确结构是 FEND 在前、END 收尾(见 程序流程与跳转),不是把额外段落接在 END 后面。

(建议)先本地自检一下写法对不对 ​

在改多台设备之前,可以先拿这个文件做一次纯本地编译检查——不连设备、不改动任何东西,把下面这行放到 @@CMDS@@ 后面单独跑一次:

text
{"method":"ladder_encode","params":{"text":{"$file":"ladder.il"}}}

窗口最下面那一段里:

  • 出现 "errno":0 和 "step_count":3 → 指令表能编译,写法没问题。 step_count 是指令步数,不等于文件行数:LD/OUT/END 这些占 1 步, 应用指令按操作数个数占步(MOV 带 2 个操作数就占 5 步)。 实测 LD M8000 + MOV D0 D2 + END 这三行,返回的是 "step_count":7。 所以判"编过了"看 errno 和有没有 result,不要拿行数去核对步数。
  • 出现 "errno":1 并带行号 → 直接告诉您第几行错了。实测把 OUT Y0 换成不存在的 BOGUS Y0,返回:步号1(第2行): 未知的应用指令: BOGUS。 同一类硬报错还有:# 当注释(无法识别的操作数: #)、X8(X 编号必须是八进制(0-7的组合): X8)、 D12000(特殊寄存器 D12000 超出范围(D8000-D8511))。
  • 出现 参数展开失败: 打开文件失败: ladder.il → 文件名写错或没和 .bat 放同一目录。

指令该怎么写(LD / OUT / ANI / T / C 等)见 4.6 支持的指令一览。

第二步:写批处理 ​

在 @@CMDS@@ 之后,用一行 JSON 调用 ladder_download(梯形图下载):

text
@@CMDS@@
# 第 1 台
SCAN
OPT 1
{"method":"ladder_download","params":{"text":{"$file":"ladder.il"},"options":{"verify":true,"autoStopRun":true}}}
BYE
# 第 2 台
OPT 2
{"method":"ladder_download","params":{"text":{"$file":"ladder.il"},"options":{"verify":true,"autoStopRun":true}}}
BYE
  • 这行以 { 开头,REPL 会直接交给底层引擎执行,无需简写命令。
  • "text":{"$file":"ladder.il"}:把 ladder.il 的内容当指令表文本读入。
  • options.verify:true:下载后校验;autoStopRun:true:下载前自动 STOP→RUN,避免在线运行时写不进。
  • 做更多台:复制 OPT / {...} / BYE 三行。

第三步:双击运行 ​

双击 .bat,工具逐台把梯形图下载进设备并校验。

跑完看到什么算成功 ​

这行 JSON 下面窗口里是空白的,不打印直观文字回执——正常,不代表失败。结果在窗口最下面「每条指令的实际结果」那一段:

json
{"errmsg":"","errno":0,"method":"ladder_download","result":{"bytes":98,"steps":3},"seq":5,"type":"resp"}
  • "errno":0 成功;steps:3 表示 3 步指令(LD / OUT / END)被正确编译下载;bytes:98 是生成的字节码长度。
  • 带 verify:true 时下载后会自行回读比对,校验不通过就会在这一行给出非 0 的 errno 和 errmsg,可放心用于现场。

这一段是在软 PLC 模拟器(序列号 10000001)上实测的返回:就是上面那份三行 ladder.il 下载的结果。

用模拟器练习:一次一台

模拟器版本 2026.9.16 实测:下载之后模拟器进程可能自行退出,同一份脚本里第二台会报 未找到设备。请一台一跑,跑完重新点「🖥 启动软PLC」。详见 11.1 的注意事项。

注意事项 ​

  • ladder.il 须与 .bat 同目录,UTF-8 保存。

  • 梯形图是真实写入并会切换运行态,下载前设备会先 STOP,写完恢复 RUN;执行前确认目标设备。

  • 不同设备不同梯形图时,把 $file 后面的文件名换成各自的文件即可(如 ladder_line1.il)。

  • 从 GX Works2 拿过来的工程:工具和 GX Works2 的指令表 CSV 能互转。把 GX 导出的 CSV(表头含「步号」「指令」,UTF-8/ANSI 存盘)与本 .bat 放同一目录,跑这一行就能转成指令表文本:

    text
    {"method":"ladder_csv","params":{"action":"import","csv":{"$file":"from_gx.csv"}}}

    窗口最下面那一段里 "errno":0 时,result.text 就是指令表(实测返回 "text":"LD M8000\nOUT Y0\nEND"),把 \n 处断成行、存成 ladder.il 即可喂给上面的 ladder_download。反向(指令表 → GX 的 CSV)把 import 换成 export、csv 换成 text。

和界面操作的关系

梯形图也能在上位机编辑器里手动下载(见梯形图编译下载与上载)。批量操作用于"同图刷多台",二者底层是同一套下载协议。

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