AI PLC 编程:7 个免费实战课,每课都能验收

7 个免费实战课:让 AI 在真实博途工程里写 SCL、读老工程、做变更分析、跑仿真验收,每课都以编译 0/0 或 PASS/FAIL 收尾。

分享
AI PLC 编程:7 个免费实战课,每课都能验收

一句话结论:AI 写 PLC 程序最缺的不是"能不能写出来",而是"写出来之后,谁拿什么证明它是对的"。PLC AI 实战 用 7 节免费图文课,把这件事拆成 7 个能核对的落点:编译 0 错误 0 警告、读回接口与需求一致、场景表 PASS/FAIL、重构前后逐点回归。没有视频、不卖课,也不提供下载。


一、AI PLC 编程的卡点,已经从"写"移到了"验收"

第一次让智能体写 SCL 的工程师,反馈几乎一样:看着挺对,但不敢用。

"看着挺对"来自模型的长处:接口、变量名、IF/THEN 结构,它写得像模像样。"不敢用"来自现场的常识:PLC 程序错了,代价不是一次编译报错,而是一条产线的误动作。

这套课最值钱的地方,是把三次真实翻车原样摆出来,而不是演示"AI 一次写对":

  1. 编译 0/0,但需求根本没实现。 需求写的是"传感器触发后输出 2 秒",实现用的是 TON。传感器只来一个扫描周期,TON 的 ET 永远到不了 2000 ms,输出一次都不会亮。
  2. 编译 0/0,但设备一个都不动。 重构三电机延时启停时,把 TP 写成 TON,编译照样 0 错误 0 警告;按一下按钮,三台电机一台都不启动。
  3. 编译 0/0,但现场永远读不到。 改一个 IO 地址时,TIA 编译器不检查"这个地址有没有物理通道"——改到本工程不存在的 I30.0,依然 0 错误 0 警告。

三件事的共同点是:编译器管不了它们。所以判据只有一条——每一步都要有能复核的证据,而不是 AI 的一句"已完成"。

二、这套课把"验证"分成四层,别混着用

这是全文最该记住的一张表。课程里每一课都会告诉你在哪一层,以及这一层不能证明什么:

层级 谁来判 能证明什么 不能证明什么
结构校验(scl_validate) 云仿真服务的解析器 源码能被解析、结构合法 TIA 的编译规则、行为
TIA 编译 博途编译器 块能在你的工程里编译通过(0 错误 0 警告) 行为是否符合需求、地址是否真有通道
云仿真场景 扫描级仿真器 给定输入序列下,输出断言是否成立(PASS/FAIL) 硬件、总线、HMI、安全回路;也不等于 TIA 编译
虚拟 PLC / 现场 S7-PLCSIM Advanced / 真机 下载后真实扫描行为、诊断与故障 安全功能、联锁、急停仍需人工评审

一个很现实的细节:scl_validate 返回 ok: true 只代表能解析。课程第一课里那个漏掉 PT 的定时器调用,结构校验很可能照样通过,而 TIA 编译会报 Parameter 'PT' has to be used.。

三、7 节课怎么排:从"能编译"到"能回归"

阶段 课程 工具 时长 落点(可验收物)
入门 写一段 SCL:从需求到编译 0 错误 0 警告 TiaLink 30 分钟 编译 0/0 + 「需求 → 实现 → 结论」对照表
入门 用 AI 改造示例库里的第一个例子 TiaLink 20 分钟 点表 +1 标签、串 1 触点、编译 0/0、结构读回
进阶 读懂一套没注释的博途老工程 TiaLink(只读) 25 分钟 《工程说明书》+ 人工核对清单,工程零改动
进阶 改一个 IO 地址,会影响谁? TiaLink(只读 + dryRun) 25 分钟 引用清单 + 风险清单 + 变更方案 + 预检结果
进阶 投运前先仿真:下载到虚拟 PLC TiaLink + PLCSIM Advanced 35 分钟 场景表 + 实测值
进阶 不装博途先跑一遍:把 SCL 跑成 PASS/FAIL PLC 云仿真 MCP 35 分钟 ALL PASS 报告 + scans 数
实战 重构不改行为:三段重复逻辑收成一个 FB TiaLink + PLCSIM 40 分钟 基线 vs 回归 逐点对照

合计约 3.5 小时。顺序不是按知识点排的,而是按工程里的真实顺序:写 → 改 → 读 → 评估影响 → 仿真 → 验收 → 回归。每课结尾都有一张「验证清单」,过不了就不算做完。

四、逐课看那 7 个真正会卡住人的点

1)写 SCL:第一版是 2 错误 2 警告

一节课的输入其实只有一段需求(FB_Sorter:Start/SensorA/SensorB/Reset 进,DiverterA/DiverterB/Running 出,互锁、2 秒输出、复位全清)。之后读工程、建 CPU、写块、导入、编译、修错、读回、保存,都是智能体自己做的。

实测环境:TiaLink 1.1.0.0 + TIA Portal V19 + S7-1200(CPU 1214C,V4.6)。第一版读完代码你会觉得"完全符合需求",但导入编译后是 2 错误 2 警告:

  • [Error] Parameter 'PT' has to be used. —— 定时器每次调用都必须带 PT,包括复位分支里那句 #PulseA(IN := FALSE);。正确做法是把复位条件并进 IN,每个扫描周期只调用一次计时器。
  • [Warning] The parameter '#Running' might not be initialized. —— 输出在读取前没被确定赋值。用带初值的 Static 状态变量承载状态,最后 #Running := #RunningState; 无条件赋值。

改完才是 0/0。这里还埋着两条工程纪律:每轮导入都会在工程里留下一个外部源文件(多轮迭代后堆一堆),以及 导入 ≠ 保存——导入成功不等于落盘,关掉工程就丢。

2)改示例:别把它导进正在用的正式工程

第二课练的是工程里更高频的活:拿现成逻辑改。示例库里挑了最简单的「按钮翻转输出」(LAD 4 个网络),改造需求是加一个 Enable(%I0.1):Enable=0 时强制断开输出,Enable=1 时保持翻转。

全流程只有两处改动:点表加 1 个标签、Network 2 的电源轨后串 1 个触点;编译 0/0 后读回结构验证 Motor = Enable AND (Tag_1 OR Motor) AND NOT Tag_2。

两个坑很实在:

  • UId 必须是十进制整数,写成十六进制直接报错;
  • 导入后 TIA 会重新编号 UId,所以验证不能按 UId 断言,只能按结构读回。

还有一条前置纪律:示例自带 Main (OB1) 和 Default tag table,导入会覆盖同名对象,不要导进正式工程。先跑一遍基线 0/0,后面改造出问题才分得清是谁的锅。

3)读老工程:把"已确认 / 推断 / 无法确认"写进文档

第三课是纯只读:一套 MIT 开源示例工程 PLC_SCADA_HMI,5 个块(OB1 + FB2/FB3 + DB12/DB13)、51 个标签、HMI 3 个画面 40 个变量。产出是一份《工程说明书》,工程零改动。

实测立刻撞上老工程的三个典型形态:

  • CPU 是 F 型(1513F-1 PN,6ES7 513-1FL02-0AB0,固件 V2.9),但程序里没有 F 块。这不等于"用错了硬件",但必须单列成安全项交人工确认。
  • 空接口的 FB 不是空块:Auto_mode / Manu_mode 的接口区一个参数都没有,逻辑全写在对全局变量(ZS-*、CV-*、HMI_*、SIM_*)的读写上。这意味着"改动影响面"要用变量去追,不能用接口去追。
  • 单个巨型网络:Auto_mode 只有一个网络,里面有 36 个操作数;Main 的 4 个网络里,2 个是空的。把它当"一条 rung"讲一定是错的,只能按功能段拆(传感器链、执行器链、报警/仿真、MATLAB 握手)。

再加一条对账:51 个标签里 6 个没有被任何 PLC 块引用,其中 HMI_PID 值得单独拎出来——HMI 里有 PID 画面,但 PLC 里没有 PID 块、这个标签也没人引用,"PID 可能根本没实现"需要人工确认。这类结论不写"推断/无法确认",说明书就是假的。

4)变更影响分析:编译 0/0 不代表现场能读到

第四课解决"敢改"。改动候选只有一个:把 ZS-101(Infeed Sensor)从 %I29.0 改到 %I29.4。全程只读,最后用 dryRun 预检方案。

实测结论比想象中干净,也比想象中危险:

  • 引用点:Auto_mode 6 处 + Manu_mode 2 处,全是读,块里 0 处绝对地址。所以块一行都不用改,只改点表——这才是"影响面"算清楚了。
  • HMI 侧是符号访问(AddressAccessMode=Symbolic),地址变更会自动跟随;但画面和注释里写死的地址文字,编译查不出来,只能人工同步。
  • 硬件对照:%I29.0 属于 ET200SP 的 DI 8x24VDC ST_2(Input29),I29.0–3 被 ZS-101..104 占用,目标 %I29.4 是同一模块的空闲通道。
  • 最危险的一条:TIA 编译不检查地址有没有物理通道。改到不存在的地址照样 0 错误 0 警告,但现场永远读不到信号;而且改地址本质是改"物理接线 ↔ 地址"的对应,端子要挪,这只有人或图纸能确认。
  • dryRun 预检返回 {action: "overwrite", kind: "tagTable", tagCount: 27}——你以为只改了一行,实际会覆盖整张 27 个标签的点表。没有这一步,改完才发现别的标签被回退,是很常见的事故。

5)虚拟 PLC:编译通过之后,行为才第一次有机会被看见

第五课把程序真的跑起来:把示例库的「排风机控制」(一个网络,TOF 1 分钟)下载到 S7-PLCSIM Advanced 6.0 的虚拟 PLC,按场景表给输入、看输出、记录实测值。

实测环境搭了 CPU 1516-3 PN/DP。第一次整机编译是 0 错误 1 警告:Inputs or outputs are used that do not exist in the configured hardware——1516 没有板载 I/O,点表里的 %I0.0、%Q0.0 在硬件里"不存在"。插上一块 DI、一块 DQ(起始地址 0)之后,才变成 0/0。

虚拟 PLC 的顺序是固定的:注册实例 → 上电 → 等 Stop → 下载 → RUN。新注册的实例是空的,所以上电后必须等它到 Stop 再下载;/sim/status 返回 403 只有两种可能:TiaLink 带了 --no-sim,或者这台机器没装 PLCSIM Advanced。

四个场景跑下来,抓到一个"编译查不出、看图也容易读错"的行为:

按停止按钮,排风机不会立即停。 这个网络的 TOF 输入是 Turn_On_PB AND NOT Turn_Off_PB——对 TOF 来说,松开启动按钮和按停止按钮是同一个下降沿,风机都会继续排风 1 分钟。看一眼梯形图很容易读成"按停止就停",行为只能由实测说了算。

交付物也因此变了:不是"我看过了,没问题",而是场景表 + 实测值 + 一句结论。

6)云端仿真:把"触发"这个词写清楚

第六课换了一条更轻的路:不装 TIA、不装 PLCSIM、不需要 Windows,把同一段 SCL 交给 PLC 云仿真 MCP,在云端逐扫描执行,用场景表跑成 PASS/FAIL。

上手只要三步:微信登录 → 建一个 sim_live_ 开头的 API Key → 把 https://tia.hubwiz.com/sim/mcp 配进任意支持 Streamable HTTP 的 MCP 客户端。端点暴露 6 个工具(lad_* / scl_*),本课只用 scl_validate、scl_simulate、scl_run_scenario。

计费和字段先记住,能省很多来回:

  • initialize、tools/list、resources/read 不扣额度,每次被接受的 tools/call 扣 1 次;新用户 100 次,这一课大约用 8–12 次;
  • tickMs 默认 10 ms,所以 100 tick = 1 秒;
  • scl_simulate 的步进单位叫 scans,scl_run_scenario 里叫 ticks——这是最容易写错的地方。

第一次跑验收,就拿到了课程里最典型的一条失败:

PASS  start latches, reset clears (3 step(s), 5 scan(s))
FAIL  sensor A pulse gives a 2 s diverter pulse: step 3 scan 100: DiverterA expected true, got false
FAIL  both sensors: A wins, only one output: step 2 scan 1: DiverterA expected true, got false
RESULT: FAIL (2 failure(s), 109 scan(s))

根因就是第一课那个 TON:延时接通要求 IN 连续为 1 满 PT,而传感器只来一个扫描周期。需求里的"触发后输出 2 秒",被实现成了"持续压住 2 秒才输出"——两件完全不同的事。

换成 TP(固定脉宽)后三个场景都过了,但补一条"输出过程中按复位"又失败:TP 的脉冲不会被 IN := FALSE 掐断,DiverterA := PulseA.Q AND NOT Reset 只是把输出遮住,脉冲还在后台跑,复位一松开就又亮。最终方案是锁存 + TON 计时结束:把"正在输出"做成显式状态 ActiveA/ActiveB,Reset 直接清状态,互锁也改成检查对方的 Active 而不是输出。

跑到 ALL PASS 的规模是:8 个场景 + 16 组 sweep + 5000 扫描 fuzz = 5735 个扫描周期。报告已在本地 scl-sim 0.1.0 和线上端点回放(2026-10-19):同一份 SCL + 同一份场景,得到相同的 PASS/FAIL 和 scans 数。

7)重构回归:TP 写成 TON,编译 0/0,三个电机一个都没动

最后一课补上"改结构但不改行为"。对象是示例库的「三电机延时启停」:按一下按钮打开 20 秒窗口,三台电机分别延时 5/10/15 秒启动,窗口一过全停。原程序在同一个网络里把 TON + 线圈写了三遍,只有 PT 和输出不同——典型的复制粘贴。

重构目标是收成一个参数化 FB(输入 Enable/Pt,输出 Q),实例化三次,点表、符号、地址一个都不动。

这节课作者自己也翻车了一次:顺手把 IEC_Timer_0_DB 的调用从 TP 写成 TON,编译照样 0 错误 0 警告,但按按钮后三个电机一个都不启动。改回 TP 后,同一张场景表逐点回归,前后完全一致。

所以这一课的两条纪律比代码更重要:

  • 先存行为基线:同一张场景表,改前跑一遍、改后跑一遍、逐格对比。没有基线就重构,等于拿现场当测试环境。
  • 回归只信输出位和场景表:结构化成员(比如 DB.Ton.ET)读不到就换证据,不要拿"看起来对"补空白。

五、人和 AI 的分工:这 7 课里,你其实只做三件事

课程刻意把人的动作压到很少,因为工业场景里更值得讨论的不是"AI 能不能写代码",而是"哪些动作必须留在人手上"。7 课跑下来,分工基本是固定的:

环节 智能体做 人必须做
写 SCL 读工程、建 CPU、生成块、导入、编译、按编译结果自修、清理外部源文件、保存 说清需求;确认"先报告后改动"的那一次;抽查读回对照表
改示例 起点表、串触点、编译、结构读回 确认改造边界(只改 Main 和点表);确认这不是正式工程
读老工程 盘点设备/块/变量/HMI、导出、按块和网络归纳、标出未引用标签 判断哪些结论要升级为安全项;核对"推断"和"无法确认"两类
变更影响 扫引用、区分读写与符号/绝对地址、对硬件通道、dryRun 预检 决定改不改;确认端子与图纸;确认保存
虚拟 PLC 建设备、插模块、导入、编译、注册、上电、下载、读写、填表 下载时点掉 TIA 授权窗;看场景表里"实测值"是否真的来自读数
云仿真 写场景 JSON、跑断言、定位失败扫描 核对场景表是否漏需求(尤其是"触发"的定义)
重构回归 存基线、写参数化 FB、替换、重跑、逐点对比 判断哪些块不许"顺手重构";确认是否替换原程序

一句话概括:动作可以交给 AI,判断不能。 课程把判断做成清单和表格,就是为了让"人看一眼"变成"人核对一遍"。

六、四个常见问题

Q1:一定要装博途才能学吗? 不必须。7 课里有 1 课(云端 PASS/FAIL)完全不碰博途,只要浏览器、微信登录和任意支持 Streamable HTTP 的 MCP 客户端;其余 6 课需要 Windows + TIA Portal V19。

Q2:TiaLink 会不会自己改我的工程? 不会自动落盘。它把 Openness 能力封装成 MCP 工具,写入是显式动作;导入前有预检、默认不覆盖同名对象、导入后不自动保存——"导入 ≠ 保存"这句在 7 课里出现了不止一次。

Q3:云仿真过了,是不是就等于程序没问题? 不等于。云仿真只跑 SCL 的扫描语义,不跑总线、HMI、驱动、安全回路,也不是 TIA 编译器。它最擅长抓的恰恰是"编译 0/0 但行为不成立"这一类缺口,比如需求写"触发后输出 2 秒"、实现却是 TON。

Q4:AI 写的块能直接进生产吗? 不建议。课程口径始终是:AI 辅助、必须以编译与读回核对为准、改动必须人工复核;安全功能、联锁与急停不交给 AI。能进生产的不是"AI 写的代码",而是"过了验收链的代码"。

七、怎么开始:两条路线,最短 20 分钟

路线 A:有 Windows + TIA Portal V19

  1. 打开一个可以随便改的沙盒工程,启动 TiaLink(与博途同机),页首状态条会自动检测是否连接、项目名是否一致;
  2. 客户端加一个 Streamable HTTP MCP 服务,URL 指向 http://localhost:8080/mcp,带 Bearer Token;跨机器时把 localhost 换成博途那台机器的局域网地址;
  3. 从「用 AI 改造示例库里的第一个例子」开始(20 分钟,改动最小、验证最快),再回到「写 SCL 到 0/0」(30 分钟);
  4. 如果健康检查里白名单那项不通过,第一次写入 TIA 会弹授权窗——这一下只能人工点确认,先跑一次 TiaLink.Helper.exe 可以免掉。

路线 B:暂时没有博途

  1. 打开 PLC 云仿真,微信扫码登录,建一个 API Key(只在创建时显示一次,别提交到仓库);
  2. MCP 端点填 https://tia.hubwiz.com/sim/mcp;
  3. 直接做「不装博途先跑一遍」那一课,练习对象就是路线 A 里那个已经编译 0/0 的 FB_Sorter——你会亲眼看到它在云仿真里先 FAIL 两次。

八、边界:这套课不提供什么

  • 不提供下载。设计如此:不落地文件,只走 TiaLink 导入,导入前有预检、导入后不自动保存。
  • 云仿真课只上传示例或脱敏代码。不要把客户工程贴到云端;需要动博途的课,操作全部在你本机完成,工程数据不出厂。
  • 仿真通过不是现场验收。PLCSIM 只仿真 CPU 行为,总线、HMI、驱动、安全回路都不在范围内;云仿真更只跑 SCL 的扫描语义。
  • 改动必须人工复核。安全功能、联锁与急停不交给 AI;AI 生成的代码一律先按"待验证"对待。
  • 版本相关。课程按 TiaLink 1.1.0.0 + TIA Portal V19 + S7-PLCSIM Advanced 6.0 实测,版本不同,报错文案和工具名可能变化——所以课程反复强调看结构化结果,别按报错文字硬匹配。

九、适合谁,不适合谁

适合:会用博途、但"AI 写的块不敢进工程"的工程师;接手老工程、想先拿到说明书再动手的人;要带新人、需要一套可检查的练习路径的人;以及要判断"AI 到底能替你做哪一步"的技术负责人。

不适合:没摸过 TIA Portal 的(先去 示例库 60 例 练手);想找"一键生成梯形图、直接下载工程"的;想跳过人工评审和安全验证的。

十、小结

把 7 课串起来看,它讲的其实不是"AI 有多能写",而是一条可复核的交付链:

写出来 → 编译过 → 读回对 → 影响算清 → 仿真跑通 → 场景 PASS → 重构后行为不变。

每一步都有一个不依赖 AI 自述的判据。这也是这套课最值得抄走的部分:哪怕你不用 TiaLink、不用云仿真,把"每步都要有证据"这条原则搬到你自己的流程里,AI 才真的能进工程。

想直接开始:20 分钟的 改造示例,或者 35 分钟的 云端 PASS/FAIL 验收。


核验说明

  • 课程结构、7 节课的步骤、实测数字(编译 0/0、2 错误 2 警告、36 个操作数、51 个标签中 6 个未引用、5735 个扫描周期、dryRun 27 个标签等)均来自 Learn-LAD 官方课程页 https://tia.hubwiz.com/learn-lad/ai/ 及其 7 个子页,核验日期 2026-10-20。
  • 课程声明的实测环境为 TiaLink 1.1.0.0 + TIA Portal V19 + S7-PLCSIM Advanced 6.0;云仿真报告在 scl-sim 0.1.0 与线上端点回放一致(2026-10-19)。
  • 本文未做独立复测,数字与结论以官方页面为准;版本与工具数量可能随更新变化。

延伸阅读(本站)

工具入口:PLC AI 实战课程 | TiaLink | PLC 云仿真 | 梯形图转 SCL | 文本转梯形图 | TIA Forge 总入口

本文由汇智网(hubwiz.com)编译整理,转载请注明出处。

这是「AI × 工业 / PLC」专题的一部分。完整地图见:AI × 工业 / PLC 完全指南