TiaLink
把 TIA Portal 接到你的智能体:导入、编译、读回核对、PLCSIM 仿真。本地运行,工程数据不出厂。
打开 TiaLink从示例页一键导入「按钮翻转输出」,让 AI 加一个使能输入:改点表、串一个触点、编译 0/0、读回验证,全程可核对。
学完你能:能把示例库的现成逻辑当起稿,让 AI 完成一次真实改造,并用编译和结构读回证明改对了。
上一课《写一段 SCL》是从零写;这一课练工程里更高频的活:拿现成逻辑改。示例库的 60 个示例就是最好的起稿素材——挑一个接近你需求的,导入自己的工程,让 agent 改一处,再编译、读回、验证。
本课用示例库里最简单的入门例子 按钮翻转输出(单按钮翻转,LAD 4 个网络)实测,改造需求是加一个使能输入:
Enable(Bool,%I0.1):Enable=0时输出Motor强制断开;Enable=1时保持原有"按一下翻转"逻辑。
实测过程(新空项目):agent 建 S7-1200(1214C)→ 从示例页导入示例(点表 + Main)→ 基线编译 0/0 → 改造:点表加 1 个标签、Network 2 电源轨后串 1 个触点 → 导入 → 编译 0/0 → 读回结构验证 Motor = Enable AND (Tag_1 OR Motor) AND NOT Tag_2。
实测还踩到两个真实坑(都写进了「常见坑」):UId 必须是十进制整数;导入后 UId 会被 TIA 重新编号,验证不能按 UId 断言。工程最后没有保存(导入 ≠ 保存),是否保存由你确认。
http://localhost:8080/mcp;Main(OB1) 和 Default tag table,导入会覆盖同名对象;在博途那台机器上启动 TiaLink、打开(或新建)那个可以随便改的工程。页首状态条会自动检测;然后在客户端里加一个 Streamable HTTP MCP 服务:
先在本页顶部点「设置」填一次地址(存在本机,示例库页面也用同一个地址),下面的 URL 会跟着更新,点「复制」贴进客户端配置:
{
"mcpServers": {
"tialink": {
"type": "http",
"url": "http://localhost:8080/mcp",
"headers": { "Authorization": "Bearer <你的 TiaLink API Token>" }
}
}
}看到什么:客户端列出 TiaLink 的工具(名字以 tialink_ 开头,覆盖健康检查、读工程、导入、编译、保存等)。工具数量随版本变化,不必对数字。
打开按钮翻转输出示例页,点「导入到我的 TIA 项目」——导入的就是页面上那份 V19 SimaticML(点表 + Main 块)。空项目里没有 CPU 时,先让 agent 建一台,再导入。
看到什么:点表里出现 PB/Motor/Tag_1/Tag_2,程序块里出现 Main (OB1),编译 0 错误 0 警告。这一步先确认"起稿"是干净的——后面改造出问题,才能分清是谁的锅。
把下面这段发给 agent(示例和需求换成你自己的):
只读先看一遍,然后做一次改造。需求:把当前的"按钮翻转输出"逻辑加一个使能输入
Enable(Bool,%I0.1):Enable=0时输出Motor强制断开;Enable=1时保持原有"按一下翻转"逻辑。要求:
- 先告诉我你打算改哪些对象、每处怎么改,等我确认;
- 只改
Main和点表,不要动其他任何东西,也不要改PB/Motor/Tag_1/Tag_2的地址和含义;- 改完导入并编译到 0 错误 0 警告;
- 读回验证:点表里有
Enable且地址是%I0.1;Main的输出网络里Enable在并联分支之前;说明每条结论的依据;- 导入后不要保存,等我说。
发完这一条,你等着看结果就行。下面是它实际会做的事(本次实测过程)。
按需求,它只动两个地方:给点表加 Enable@%I0.1,然后在 Main 的输出网络(Network 2)电源轨之后、原来两个并联触点之前插入一个 Enable 触点:
改造前:Motor = (Tag_1 OR Motor) AND NOT Tag_2
改造后:Motor = Enable AND (Tag_1 OR Motor) AND NOT Tag_2
这个"串一个触点"的改法看着简单,落到 SimaticML 是三步接线手术:把 电源轨 → 两个触点.in 这条线拆开,改成 电源轨 → 新触点.in、新触点.out → 两个触点.in,并给新触点配一个符号访问。
坑一:UId 必须是十进制整数。 第一次导入被拒,TIA 报"UId 特性无效——3A 不是有效的 Int32 值":FlgNet 里的 UId 是十进制(25、30…),按十六进制生成就不合法。改成 40/41/42 后通过。
坑二:导入成功后 UId 会被 TIA 重新编号。 验证时不能按"我插入的 UId 是 41"去断言——读回时它已经变成别的值。必须按符号和结构验证:
Enable@%I0.1),Main 输出网络带上使能;环境:新空项目 · S7-1200 CPU 1214C V4.6(L0_Station / PLC_1)· TiaLink 1.1.0.0 + TIA Portal V19
| 对象 | 改动 | 依据 |
|---|---|---|
| Default tag table | 新增 Enable(Bool,%I0.1) |
需求指定地址 |
| Main (OB1) | Network 2 电源轨后插入 Enable 常开触点 |
需求:Enable=0 强制断开输出 |
PB@%I0.0、Motor@%Q0.0、Tag_1@%M0.0、Tag_2@%M0.1 的地址与含义;Tag_1 = PB AND NOT Motor;Tag_2 = PB AND MotorMotor = Enable AND (Tag_1 OR Motor) AND NOT Tag_2tagChanges: {added: 1}{"name":"Main","blockClass":"OB","overwritten":true}state=Success, errorCount=0, warningCount=0Enable@%I0.1 存在Enable 访问 → Contact:in 接电源轨、out 并联到 Tag_1/Motor3A 非 Int32),改十进制后通过改动已导入内存但未保存(dirty=true);保存需工程主人确认。未做行为验证(编译 ≠ 行为),建议用仿真或硬件确认。
Enable=0 时输出是否真的断开,要靠仿真或硬件(见下一课《投运前先仿真》,待上线);Main 和 Default tag table,导入前确认工程里没有你不想被覆盖的同名对象。正常使用不需要;如果你想在每一步停下来看,可以用这些指令:
| 想介入的点 | 发给 agent 的话 |
|---|---|
| 先看再改 | 只读。列出你打算改的对象和每处改法,等我确认,不要导入。 |
| 只改点表 | 先只加点表标签 Enable,地址 %I0.1,导入后编译,别动块。 |
| 只改逻辑 | 只改 Main 的输出网络:在并联分支前串 Enable 触点,其他网络不要动。 |
| 编译报告 | 导入后自己编译,把结果和错误原文给我,不要只给结论。 |
| 读回验证 | 读回点表和 Main,按符号/结构说明 Enable 的位置,给出依据。 |
| 暂不保存 | 所有改动先不要保存,等我确认。 |
Main 出现,基线编译 0/0;Enable@%I0.1);Enable 在并联分支之前,接线结构正确;验证按符号/结构,不按 UId;Main(OB1)、Default tag table,会覆盖你的同名对象。用空项目/副本。UId 是十进制 Int32;写成 3A 会直接被拒。把 TIA Portal 接到你的智能体:导入、编译、读回核对、PLCSIM 仿真。本地运行,工程数据不出厂。
打开 TiaLink