AI PLC 编程:7 个免费实战课,每课都能验收
7 个免费实战课:让 AI 在真实博途工程里写 SCL、读老工程、做变更分析、跑仿真验收,每课都以编译 0/0 或 PASS/FAIL 收尾。
一句话结论:AI 写 PLC 程序最缺的不是"能不能写出来",而是"写出来之后,谁拿什么证明它是对的"。PLC AI 实战 用 7 节免费图文课,把这件事拆成 7 个能核对的落点:编译 0 错误 0 警告、读回接口与需求一致、场景表 PASS/FAIL、重构前后逐点回归。没有视频、不卖课,也不提供下载。
一、AI PLC 编程的卡点,已经从"写"移到了"验收"
第一次让智能体写 SCL 的工程师,反馈几乎一样:看着挺对,但不敢用。
"看着挺对"来自模型的长处:接口、变量名、IF/THEN 结构,它写得像模像样。"不敢用"来自现场的常识:PLC 程序错了,代价不是一次编译报错,而是一条产线的误动作。
这套课最值钱的地方,是把三次真实翻车原样摆出来,而不是演示"AI 一次写对":
- 编译 0/0,但需求根本没实现。 需求写的是"传感器触发后输出 2 秒",实现用的是
TON。传感器只来一个扫描周期,TON的ET永远到不了 2000 ms,输出一次都不会亮。 - 编译 0/0,但设备一个都不动。 重构三电机延时启停时,把
TP写成TON,编译照样 0 错误 0 警告;按一下按钮,三台电机一台都不启动。 - 编译 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_mode6 处 +Manu_mode2 处,全是读,块里 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
- 打开一个可以随便改的沙盒工程,启动 TiaLink(与博途同机),页首状态条会自动检测是否连接、项目名是否一致;
- 客户端加一个 Streamable HTTP MCP 服务,URL 指向
http://localhost:8080/mcp,带BearerToken;跨机器时把localhost换成博途那台机器的局域网地址; - 从「用 AI 改造示例库里的第一个例子」开始(20 分钟,改动最小、验证最快),再回到「写 SCL 到 0/0」(30 分钟);
- 如果健康检查里白名单那项不通过,第一次写入 TIA 会弹授权窗——这一下只能人工点确认,先跑一次
TiaLink.Helper.exe可以免掉。
路线 B:暂时没有博途
- 打开 PLC 云仿真,微信扫码登录,建一个 API Key(只在创建时显示一次,别提交到仓库);
- MCP 端点填
https://tia.hubwiz.com/sim/mcp; - 直接做「不装博途先跑一遍」那一课,练习对象就是路线 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 个扫描周期、
dryRun27 个标签等)均来自 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)。 - 本文未做独立复测,数字与结论以官方页面为准;版本与工具数量可能随更新变化。
延伸阅读(本站)
- AI × 工业 / PLC 完全指南
- AI 写 PLC 程序:哪些真能用、哪些还是噱头
- 西门子 PLC 梯形图示例库:60 个可导入博途的练习题
- 接手别人的 PLC 程序:动第一行代码前的 4 步取证
- 梯形图转 SCL 迁移实战指南:能自动转什么、哪些必须重构、怎么验证
- 没有硬件也能练 PLC:Factory I/O + OpenPLC 虚拟实验台
工具入口:PLC AI 实战课程 | TiaLink | PLC 云仿真 | 梯形图转 SCL | 文本转梯形图 | TIA Forge 总入口
本文由汇智网(hubwiz.com)编译整理,转载请注明出处。
这是「AI × 工业 / PLC」专题的一部分。完整地图见:AI × 工业 / PLC 完全指南