TiaLink
把 TIA Portal 接到你的智能体:导入、编译、读回核对、PLCSIM 仿真。本地运行,工程数据不出厂。
打开 TiaLink只用一个 HMI 设备,不接 PLC:用 TiaLink 建 21 个控件、10 个动态化和 5 个按钮事件,做一个可手动切换相位的 WinCC Unified 交通灯面板;读回 21/10/5,用 TiaLink 编译到 0/0 并保存。
学完你能:能独立用 AI/TiaLink 建出一个可操作的 Unified 画面,用值映射把 1 个状态字变成 9 路灯和 1 个状态文本,并用读回、编译和保存验收;知道 HMI-only 与接 PLC 的差别。
本课只加一个 WinCC Unified HMI 设备,不接 PLC:用 TiaLink 在 HMI 里建 1 个状态变量、21 个控件、10 个动态化和 5 个按钮事件,做一个可以手动切换相位的交通灯面板。
为什么先做 HMI-only?因为 HMI 变量、控件几何、动态化、按钮事件和读回本身就是一套完整的手艺;先把 HMI 侧做对,再接 PLC,排查问题会清楚得多。接 PLC 的 12 个 Bool 变量版本放在「下一步」,不作为本课验收。
备注:接 PLC 时的连接伙伴设置在 TIA 中完成一次。
TiaLink 侧已在 TIA Portal V20 上实测:HMI_1(MTP700 Unified Comfort,800×480)、HMI_State(DInt)、TL_Main 的 21 个控件 / 10 个动态化 / 5 个事件;HMI 编译 0 错误 0 警告,保存后工程没有未保存修改。
口径:AI 是辅助,画面和逻辑必须人工复核。交通灯的真实时序、联锁和安全相关逻辑,最终仍要由 PLC 程序和现场调试确认。
HMI_State,不建连接;DInt 状态字(0=停、1=东、2=西、3=北)驱动 9 个灯和 1 个状态文本,而不是堆 12 个 Bool;Left/Top/Width/Height,哪些(圆)用 CenterX/CenterY/Radius;HMI_1;http://localhost:8080/mcp;把 TiaLink 配成 MCP 服务:
{
"mcpServers": {
"tialink": {
"type": "http",
"url": "http://localhost:8080/mcp",
"headers": { "Authorization": "Bearer <你的 TiaLink API Token>" }
}
}
}真实使用只有一次输入。把下面这段发给 agent;本课后面的步骤都是它实际做的事:
在当前 TIA 工程里只加一个 WinCC Unified HMI(不要 PLC);如果工程里还没有 HMI,你自己建一个 MTP700 Unified Comfort,然后做一个 800×480 的交通灯面板
TL_Main:
- 建内部变量
HMI_State(DInt,0=停,1=东,2=西,3=北);- 建 21 个控件:5 个按钮(START/STOP/EAST/WEST/NORTH)、1 个状态 IOField、3 个灯组底板、3 个方向文字、9 个圆灯;
- 9 个灯的
BackColor绑定HMI_State,用 0–3 值映射:当前方向绿灯亮、其余方向红灯亮、黄灯暗;- 状态 IOField 用 0–3 映射
STOPPED/EAST/WEST/NORTH;- 5 个按钮按下时写
HMI_State(START/EAST=1,STOP=0,WEST=2,NORTH=3);- 读回 21 个控件/10 个动态化/5 个事件,编译到 0/0,保存。
下面每一步都写「看到什么」,你可以按这些数字抽查,不用相信 agent 的自我总结。
agent 会先检查 TiaLink 是否已连接、许可证是否可写、工程里有没有一个 Unified HMI。你不需要手动执行任何命令。
如果工程里还没有 HMI,agent 会自己建一个 MTP700 Unified Comfort;你只需要在它报告后确认。
看到什么:设备列表里有 HMI_1,类型是 Unified Comfort,不是 classic。如果是 classic,本课的 HMI 动态化和按钮事件不适用,先换一个 Unified 设备。
agent 会先建 HMI_Tags,再建一个 HMI_State。
看到什么:变量是 HMI_State,类型 DInt,内部变量——没有 PLC 连接、没有绑定 PLC 变量。这正是本课要的:先不碰 PLC–HMI 连接。
为什么用一个 DInt,而不是 12 个 Bool?因为这是一个「手动相位」面板:HMI_State 的 0/1/2/3 就是四个状态,9 个灯和 1 个状态文本都从它派生。接 PLC 时再换成 9 个灯位 + 3 个控制位,见「下一步」。
agent 会建画面 TL_Main,尺寸 800×480,然后按下面的布局建 21 个控件:
| 类型 | 数量 | 名称 | 几何 |
|---|---|---|---|
| Rectangle | 3 | Rect_East / Rect_West / Rect_North |
Left=20/280/540,Top=40,240×300 |
| Text | 3 | Text_East / Text_West / Text_North |
Top=45,240×28,白字 |
| Circle | 9 | Lamp_EastRed 等 |
CenterX=140/400/660,CenterY=130/215/300,Radius=30 |
| Button | 5 | Btn_Start / Btn_Stop / Btn_East / Btn_West / Btn_North |
Top=400,高 40 |
| IOField | 1 | Field_Status |
Left=40,Top=355,720×32 |
看到什么:21 个控件全部创建成功,没有失败项。
两个容易踩的几何点:
HmiCircle 用 CenterX/CenterY/Radius;给它传 Left 会失败;Text,不要用 Label:V19 的 HmiLabel 创建返回 Not supported,用 HmiText 的 Text 属性写文字。agent 会给 9 个灯的 BackColor 各建 4 条值映射(状态 0/1/2/3),再给状态字段建 4 条文字映射。
9 个灯的颜色规则:
HMI_State |
东向灯组 | 西向灯组 | 北向灯组 |
|---|---|---|---|
| 0 停 | 全暗 | 全暗 | 全暗 |
| 1 东 | 绿亮、红暗、黄暗 | 红亮、绿暗、黄暗 | 红亮、绿暗、黄暗 |
| 2 西 | 红亮、绿暗、黄暗 | 绿亮、红暗、黄暗 | 红亮、绿暗、黄暗 |
| 3 北 | 红亮、绿暗、黄暗 | 红亮、绿暗、黄暗 | 绿亮、红暗、黄暗 |
状态字段的 4 条文字映射是:0 → STOPPED、1 → EAST、2 → WEST、3 → NORTH。
黄灯在这个手动面板里保持暗态:真实交通灯的黄灯需要「绿→黄→红」的定时过渡,这是下一步接 PLC / 定时器要做的,不是本课的手动按钮能表达的。把黄灯先留成暗态,比假装它会闪更诚实。
看到什么:一共 10 个动态化——9 个灯各 4 条颜色映射,状态字段 4 条文字映射。
5 个按钮都在按下时写同一个状态字:
| 控件 | 事件 | 目标变量 | 写入值 |
|---|---|---|---|
Btn_Start |
按下 | HMI_State |
1 |
Btn_Stop |
按下 | HMI_State |
0 |
Btn_East |
按下 | HMI_State |
1 |
Btn_West |
按下 | HMI_State |
2 |
Btn_North |
按下 | HMI_State |
3 |
看到什么:5 个事件全部通过语法检查;按下按钮时分别写入 1、0、1、2、3。
START 和 EAST 都写入 1:START 是一个更直观的启动入口,EAST 是相位选择;两个都保留,方便操作。注意:一个按钮事件只能写一个变量;如果你以后需要「按一下同时置位 3 个灯」,那要把逻辑放到 PLC,或改成值映射/状态字。
agent 会读回整张画面,并保存工程。
看到什么:
| 检查 | 结果 |
|---|---|
| 控件 | 21 |
| 动态化 | 10 |
| 事件 | 5 |
| 变量 | HMI_State,DInt,内部变量 |
| 保存 | 成功 |
| 工程状态 | 没有未保存修改 |
agent 会调用 TiaLink 编译 HMI。本课实测返回 0 错误 0 警告。
看到什么:编译结果 0 错误 0 警告;编译后保存成功,工程没有未保存修改。
如果编译报错,agent 会收到错误信息并继续修;它通常会先检查 HMI_State、9 个灯的绑定和 5 个按钮事件。你只需要看最后是不是 0 错误 0 警告。
最快的方式是用 TIA Portal 自带的 HMI 仿真,不需要真实面板,也不需要 PLC:
HMI_1 属性里把「起始画面」设为 TL_Main;HMI_1 或打开 TL_Main,点工具栏的「启动仿真 / Start simulation」(显示器 + 播放图标),或右键 HMI_1 → 启动仿真;EAST、WEST、NORTH、STOP、START,看状态字段和 9 个灯是否跟着变。如果你有真实面板,也可以把 HMI 下载到面板,操作步骤同上。
如果你要让灯跟着 PLC 的 EAST_GREEN 等 9 个位走,或者让 START/STOP 控制 PLC 的 STARTED,就把 HMI-only 版升级成 PLC 版:
START、STOP、STARTED 和 9 个灯位;HMI_Connection_1;接 PLC 时在 TIA 的连接编辑器里设置一次 PLC/站号;HMI_State 换成 12 个 Bool HMI 变量(3 个控制/状态 + 9 个灯),每个都带 Connection 和 PlcTag;BackColor 改成绑定各自的灯位,值映射键用 Int32 0/1(不是 true/false);START/STOP 用按下/松开写位,让 PLC 的 SR 保持运行状态;HMI_1 是 Unified Comfort;HMI_Tags/HMI_State 是 DInt,内部变量,没有 PLC 连接;TL_Main 是 800×480,读回 21 / 10 / 5;BackColor 各有 4 条值映射;状态字段有 4 条文字映射;HMI_State 没有 PLC 连接,不是绑定失败;本课就是 HMI-only。要接 PLC,见「下一步」。HmiCircle 用 CenterX/CenterY/Radius;Left/Top/Width/Height 只适用于 Button/IOField/Rectangle/Text 等。Label 在 V19 不可用:HmiLabel 创建返回 Not supported,静态文字用 Text。HMI_State 是 DInt,键是 0–3;如果以后接 PLC 的 Bool 灯位,键必须是 Int32 0/1,不能写 true/false。"STOPPED" 这样的字符串;如果属性是数值型,就写数字。Pressed 会显示为原生 Down,Released 是 Up,Clicked 是 Tapped;这是正常的。Int(16 位)做值映射时,TIA 可能报「上限值和下限值应属于相同的数据类型」;把 HMI_State 改成 DInt(32 位)后编译通过。traffic-light 下载到 PLCSIM Advanced;TL_Main 旁边再加一个画面,用按钮事件做画面切换;报警和趋势需要额外的 HMI 对象,先把本课的 21/10/5 做稳。把 TIA Portal 接到你的智能体:导入、编译、读回核对、PLCSIM 仿真。本地运行,工程数据不出厂。
打开 TiaLink