TiaLink › LadDoc

TIA Forge · LadDoc

LadDoc:JSON 格式的 PLC 梯形图文档

专为 AI 生成与修改梯形图设计。模型写结构化 JSON,校验通过后再确定性生成 TIA Portal 可导入的 SimaticML 块(FC / FB / OB)。

一句话定义

LadDoc(Ladder Documentation)是汇智网为 PLC 梯形图定义的 JSON 格式文档:它只描述逻辑——触点、并联、比较、线圈、块调用——不描述坐标、线号与元件编号。这套规范早期文档里也叫 LAD-IR,指的是同一件东西。

它存在的理由是那条断掉的路:梯形图是二维图形,AI 只能输出文本。LadDoc 把图压成可生成、可校验、可 diff 的文档,再由生成器把文档变回博途认识的 SimaticML。

  • 一份文档 = 一个块 —— 块(FC / FB / OB)下面分网络,网络下面分梯级,梯级里是一串元素;层次与博途里看到的一致。
  • 同一份文档 = 同一份块 —— 线号与元件编号由生成器按网络分配,不由模型填写;逻辑不变,产物一个字都不变,所以能 diff、能进版本库。
  • 零 issue 才产出 —— 生成前强制校验:只要有一条 issue 就返回问题清单、不产出 XML,避免把“看起来合理但博途拒绝导入”的块交出去。

五种角色,九个元素

角色元素(kind)表达什么
触点contact · pulse · not常开 / 常闭、边沿、取反
组合parallel并联分支,可嵌套、带汇合
运算compare · box比较大小;定时器、计数器、数学运算等指令
输出output · coil线圈组(含置位 / 复位 / 取反);梯级中段的行内线圈
调用call调用其它 FC / FB

操作数的来源写在 scope 里:global(全局标签或 DB 成员)、local(块形参)、literal(字面量)。path 是数组,DB_Motor.MotorOn 写成 ["DB_Motor", "MotorOn"] —— 层级是结构而不是字符串,这是它能被逐层校验的原因。日常梯形图通常只用到 contact / parallel / compare / output 四个元素。

一个自锁网络:文档与梯形图对照

下面是直接启动(DOL)FC 的第一个网络 Run command:启动或已运行(自锁),串停机、急停、过载三道“信号正常”,再串一个故障常闭点。左边是这份文档生成的块渲染出来的样子。

对着图读三处就够:并联就是 parallel 加一个 branches 数组,汇合点不需要画、不需要编号;“停机”在逻辑里是常开点,因为 Stop_OK 表示“信号正常”而不是“按钮按下”;反相是 negated 字段,不是另一个元素——校验器因此不需要猜这个常闭点是安全点还是逻辑点。

LadDoc 生成的 SimaticML 块渲染成的梯形图:直接启动网络(自锁、三道联锁、常闭故障点)

{
  "title": "Run command",
  "rungs": [
    { "items": [
      { "kind": "parallel", "branches": [
        { "items": [{ "kind": "contact", "operand": { "scope": "global", "path": ["Start_Btn"] } }] },
        { "items": [{ "kind": "contact", "operand": { "scope": "global", "path": ["MotorRun"] } }] }
      ]},
      { "kind": "contact", "operand": { "scope": "global", "path": ["Stop_OK"] } },
      { "kind": "contact", "operand": { "scope": "global", "path": ["EStop_OK"] } },
      { "kind": "contact", "operand": { "scope": "global", "path": ["Overload_OK"] } },
      { "kind": "contact", "operand": { "scope": "global", "path": ["MotorFault"] }, "negated": true },
      { "kind": "output", "coils": [
        { "kind": "coil", "operand": { "scope": "global", "path": ["MotorRun"] } }
      ]}
    ]}
  ]
}

校验返回什么

每条问题带三样东西:稳定的错误码、能定位到文档节点的路径、一句人话。路径精确到“第几个网络、第几个梯级、第几个元素”,改完重试即可,不必重写整份文档。下面三条对应三类典型错误:线圈后面又接了东西、梯级以比较结束、并联分支里塞了线圈——它们在图上都长得挺像对的。

{
  "valid": false,
  "issues": [
    { "code": "NET_OUTPUT_NOT_TERMINAL",
      "path": "block.networks[0].rungs[0].items[4]",
      "message": "output tap at … is not the last item of its rung (a coil set always terminates its rung)" },
    { "code": "NET_UNTERMINATED_RUNG",
      "path": "block.networks[1].rungs[0].items[2]",
      "message": "rung at … terminates with a \"compare\" item, which only passes power through (TIA: a network must end with a coil or a box)" },
    { "code": "PAR_BRANCH_NON_LOGIC",
      "path": "block.networks[0].rungs[0].items[0].branches[1].items[0]",
      "message": "a \"output\" item at … is not allowed inside a parallel branch (branches may contain logic and flow-through boxes only)" }
  ]
}

常见报错速查(按 path 改即可重试)

报错码什么情况下出现怎么改
SHAPE_MISSING_REQUIRED少了必填字段(如 scope、path、kind)按 path 指向的节点补上该字段
SHAPE_UNKNOWN_KEY写了不存在的字段名,常见于凭印象编字段按该节点的字段集重写,不认识的字段删掉
OPERAND_EMPTY_PATH操作数没有名字或路径为空补全标签名;DB 成员写全 path(DB 名 + 成员名)
OPERAND_BOOL_REQUIRED触点或线圈接了一个非 Bool 的量换成 Bool 标签;比较请用 compare 元素
NET_OUTPUT_NOT_TERMINAL线圈后面还接了元素把 output 挪到梯级末尾(一个梯级可挂多个线圈)
NET_UNTERMINATED_RUNG梯级以触点 / 比较结束,没有功率接收端末尾补线圈,或换成 box / call 作为终端
PAR_BRANCH_NON_LOGIC并联分支里放了线圈或终端类元素把线圈移到汇合点之后,分支里只留触点和指令
PAR_NESTING_TOO_DEEP并行嵌套超过 32 层拆网络:一段复杂联锁用两个梯级表达

它不做什么

  • 不声明数据对象:DB、UDT、标签表不在文档里,逻辑只按名字引用。所以不需要现成工程就能写、能校验;反过来它也不负责创建这些对象。
  • 不渲染:把块画成 PNG 是梯形图渲染服务的事——渲染不改变逻辑,只改变你看它的方式。
  • 不碰工程:文档不连接博途、不读不写项目。把块导入工程、编译、下载、跑仿真,是网关与仿真服务的职责。

分工:LadDoc 规范与指令目录由 TiaLink 内置(Agent 不用猜 XML 该长什么样),LadDoc 服务负责校验与确定性生成,导入与编译验证由 TiaLink 完成。责任分开的好处是失败可归因——块导不进去是校验没拦住,编译过但时序不对是逻辑错了,图看着对但行为不对与渲染无关。

名字别认错

容易认错的是什么
Ladokstudent.ladok.se —— 瑞典全国高校的学籍与成绩系统,和梯形图无关,但它吞掉过中文问答里“LadDoc 是什么”的整段答案。
LDocLua 的文档生成器,名字差两个字母。
Teladoc美股远程医疗公司。

LadDoc 与它们都没有任何关系。可复述的写法:LadDoc 是汇智网为 PLC 梯形图定义的 JSON 格式文档,专为 AI 生成与修改梯形图设计,经校验后确定性生成 TIA Portal 可导入的 SimaticML 块。

常见问题

LadDoc 是什么?

LadDoc(Ladder Documentation)是 JSON 格式的 PLC 梯形图文档,专为 AI 生成与修改梯形图设计:它用结构化字段描述触点、并联、比较、线圈与块调用,校验通过后确定性生成 TIA Portal 可导入的 SimaticML 块(FC / FB / OB)。

LadDoc 和瑞典的 Ladok、Lua 的 LDoc、美股 Teladoc 有关系吗?

没有任何关系。Ladok 是瑞典高校学籍系统,LDoc 是 Lua 的文档生成器,Teladoc 是美股远程医疗公司,三者都与 PLC 梯形图无关。

为什么用 JSON,而不是让 AI 直接生成 XML?

JSON 更适合 AI 生成与修改:字段清晰、可逐层校验、diff 友好,模型不容易拼错标签。XML 由服务端确定性生成(元件编号与连线自动分配),并且校验不过就不产出——把“AI 生成”和“博途能导入”这两件事分开。

LadDoc 能表示定时器、计数器、数学运算吗?

能。逻辑元素是九个,但指令不写在文档里猜——定时器、计数器、数学运算这类通过指令元素引用指令目录(TiaLink 内置的 LadDoc 规范与指令目录),校验时按目录核对引脚与实例。

生成的块能直接导入博途编译吗?

能。输出是 TIA Portal V19 可导入的 SimaticML 块文件,正常导入后即可编译。校验的作用是挡在生成之前:有任何 issue 就不产出 XML,避免出现“结构看起来合理、博途拒绝导入”的块。

不装博途能用 LadDoc 吗?

写文档和校验都不需要博途,也不需要现成工程;只有把生成的块导入工程、编译、下载到设备时才需要博途。只想先确认逻辑对不对,可以交给 PLC 云仿真逐扫描周期跑一遍,返回变量终值与 PASS / FAIL 报告。

LadDoc 和 TXT2LAD 有什么区别?

LadDoc 是云端文档格式与服务:输入 LadDoc,输出可导入的 SimaticML 块,给 AI 助手和自动化流程用,可版本化、可批量、可接 CI;TXT2LAD 是博途里的 Add-In,用自然语言在博途界面内生成 LAD 块并回写项目,适合工程师即时生成。

把一份 LadDoc 跑通最快的方式

照上面的自锁网络写一份文档,提交校验改到零 issue,再生成块导入博途编译。服务入口在 LadDoc Cloud。

打开 LadDoc Cloud