主题
11.4 批量写梯形图(电气工程师专用)
尊敬的电气工程师:梯形图也能批量下发。和 Lua / DTU 不同,REPL 没有给"下载梯形图"单独做一个简写命令,但可以用一行 JSON 直接走底层引擎(设备模式下 device_id 自动填,不用手写)。您照样是"准备一个文件 + 改几行批处理"。
适用:把同一份梯形图(指令表)刷到一批设备。文件就是一行条指令的纯文本,不是 CSV、也不是工程目录。
第一步:准备梯形图文件
把梯形图写成**指令表(IL)**纯文本,保存为 ladder.il(和批处理同目录)。示例(上电 M8000 导通时 Y0 输出):
text
LD M8000
OUT Y0
ENDEND 是最后一行,而且只写一次
指令表以 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。
和界面操作的关系
梯形图也能在上位机编辑器里手动下载(见梯形图编译下载与上载)。批量操作用于"同图刷多台",二者底层是同一套下载协议。