Releases: bulaofen0036-coder/TIA_Portal_Openness_MCP
v2.2.3 — 笨 AI 健壮性:自愈连接 + 可恢复错误指引 + 操作规则
针对"较弱的 AI 驱动本 MCP 时仍会出 bug"的反馈,从源头降低出错与卡死。工具数不变(189),无破坏性改动。
改进
- 自愈连接/绑定:调用工具前忘了 Connect/Attach 时——若本机已有 TIA 在运行,自动附加并绑定其已打开的工程;已连接但未绑定则自动重绑;本机无 TIA 在运行则不擅自启动、直接给可执行提示。修复了"不按顺序调用→原始空引用崩溃"。
- 可恢复的错误指引:新增异常翻译器(
McpHints),按异常链识别 7 类常见失败(未连接 / 无工程 / 工程已被打开 / 名称路径错→提示查 GetProjectTree·GetSoftwareTree / TIA 版本不匹配 / Openness 用户组 / know-how 保护),统一注入 185 处通用 catch。错误从"只报原始异常"变为"告诉 AI 下一步该做什么"。 - 首调操作规则:
Bootstrap新增OperatingRules(调用顺序 / 写后必 Compile+Save / 名称要精确 / 读错误照做 / 大任务用 ScaffoldProject)。宿主即便不加载 SKILL.md,AI 第一次调用就拿到正确用法。 - 更清晰的前置错误:误导性的 "No project is open" 改为可执行指引。
验证
- V20 / V21 编译 0 错;翻译器离线单测 7/7 通过;对构建产物 stdio smoke test 通过(189 工具、5 条 OperatingRules)。
注:v2.2.2 已被既有的「S7DCL skill 文档」Release 占用,故本代码版本顺延为 2.2.3(已包含该 skill 文档内容)。
交付包 TIA_MCP_Delivery_v2.2.3_20260615.zip 含 V20+V21 双 exe + 完整源码 + skill + 模板,解压即用。
v2.2.2 — S7DCL LAD/SCL 混编授权法(规范 + 已验证样板)
v2.2.2 — S7DCL LAD/SCL 混编授权法(规范/文档 + 已验证样板)
纯文档/技能更新,无代码或工具改动(LAD/S7DCL 相关工具早已具备:ImportFromDocuments/ImportBlocksFromDocuments/ExportAsDocuments/ComposePlcLadFcBlockXml 等)。本版把"如何正确用 .s7dcl 授权 LAD 及 LAD/SCL 混编"的实战知识固化进 skill。
更新内容(tools/tiaportal-mcp/skill/SKILL.md §9a)
- 关键纠错:LAD 导入语法 ≠ 导出语法。 导入须用
GT/LT/EQ/NE_Contact{ SrcType }( in1:=, in2:= )、P_Trig( #bit )、Move( in:=, out1=> );从导出文件抄来的Gt/Lt/Ne/Eq、PBox、Move{ Card; DisableENO }会导入失败。新增"导入 vs 导出"指令对照表。 - 逐网络 LAD/SCL 判断准则(不强行 LAD):互锁/限位/抱闸/工步/指示→LAD;算术/调用/状态机/通信/复杂条件→SCL。
- LAD+SCL 混编已验证:
S7_PreferredLanguage:="LAD"的块可逐网络插入{ S7_Language:="SCL" }网络。 - 纠正导入工作流为
ImportFromDocuments/ImportBlocksFromDocuments+CompileAndDiagnosePlc(含.s7res/UTF-8 BOM/Override保号要点)。 - 标题须
MLC_*引用或省略(内联中文标题会导入失败)。
新增样板
tools/tiaportal-mcp/skill/lad-cookbook/MCPVerify_Mixed_LADSCL.s7dcl(+.s7res)—— 自包含的 LAD+SCL 混编 FB 模板(方向互锁 / 比较+定时 / SCL 算术 / 边沿),全用 import-verified 形式,导入编译 0 错。
实证
江夏 5T车 V21:7 个块(02/03/04/09 手动 + A3_2/3/5 机构)按"逐网络判断"重做为 LAD/SCL 混编,全工程编译 0 错;A0_1/A4_1/通信类按判断保留 SCL。
v2.2.1 — v2.2.0 在线工具真机验证 + 因果溯源在线模式消息修复
v2.2.1 — v2.2.0 在线工具真机验证 + 因果溯源在线模式消息修复
v2.2.0 新增的 3 个在线只读监控工具已在**真实 PLC(CPU 1211C @ 192.168.0.32)**端到端验证通过,并修复了真机验证中发现的一个消息误导问题。工具数不变(189,全部 [L2] 只读)。
真机验证结果
GetPlcRunStateS7— 正确读到RUN;该 1211C 的 SZL 诊断缓冲不可用时按设计干净降级(仍给出 RUN/STOP)。SamplePlcLiveValuesS7— 采样 DB34 心跳/标志位,时间序列与min/max/avg正确(心跳随时间递增)。TraceTagCauseLive— 离线追溯EMG_STOP,正确命中其在Crane_Communication网络4 的赋值及两个门控条件,并正确判定门控操作数为 DB 成员(无绝对地址 → 提示用 OPC UA 符号读)。
修复
TraceTagCause / TraceTagCauseLive:当 TIA 与 PLC 在线连接时,Openness 无法导出块(Export ... not supported in online mode)。此前所有块导出失败仍报 No block writes 'X',会误导为"解析后无写入"。
- 新增
analyzedBlockCount字段;当无任何块成功导出时返回INCONCLUSIVE,并在在线模式失败时提示先在 TIA 转至离线再重试(S7 实时读为独立直连,不受转离线影响)。 - 两个工具的 Description 补充该离线导出前置条件。
包含
- 双运行时:
TiaMcpServer.exe(V21)+bin-v20(V20),net48。 - 完整源码、Skill 规格、静态工具表、能力矩阵、PLC/HMI 模板、一键工程蓝图、手册。
免费开源(MIT),无许可证密钥。运行需 Windows + .NET Framework 4.8 + TIA Portal V20/V21,当前用户加入
Siemens TIA Openness本地组。
v2.1.0 — 在线只读实时读值 (S7 / OPC UA / 监控表 / 离线溯因)
TIA Openness 是工程接口,读不到运行中 CPU 的实时值。本版新增一条独立于 Openness 的运行时只读通道,直连 CPU 读实时值。
新增 5 个工具(全部 [L2],纯只读:不写 / 不强制 / 不改运行模式),工具数 181 → 186
- ReadPlcLiveValuesS7 / ProbeS7CpuIdentity — S7 协议(ISO-on-TCP, 端口 102),绝对地址
DB34.DBD116:DINT/M0.0/IW76,单次几十~几百 ms。expectModuleContains身份护栏。S7-1200/1500 需开 PUT/GET 且读非优化 DB。 - ReadPlcLiveValuesOpcUa — OPC UA(端口 4840,匿名无加密),会话按 endpoint 缓存复用(首次 ~1.7s,之后 ~150-220ms),失效自动重建一次;对锁的等待有界,避免不可达服务器导致后续调用堆积。
- MonitorWatchTableLiveS7 — 经 Openness 取已有监控表条目地址(只读)+ S7 实时读,按 TIA
DEC_signed显示格式映射有符号类型。 - TraceTagCause — 离线静态溯因:导出代码块解析 SimaticML(LAD 线圈 S/R/= 与 ST 的
:=),找写入网络 + 门控条件操作数,再用 ReadPlcLiveValuesS7 实时读判断当前由谁驱动。
每个响应都带 safety 自证字段。真机(CPU 1211C @192.168.0.32)S7 / OPC UA / 监控表三法与博途显示逐字节交叉核对一致。双构建 V20/V21 均 0 错,FileVersion 2.1.0,runtime tools/list 实测 186。
中文使用指南见 docs/在线实时读值_使用指南.md。
下载
TIA_MCP_Delivery_v2.1.0_20260609.zip:完整源码 + V20/V21 双 exe(含 .exe.config 与 Sharp7 / Workstation.UaClient 依赖)。解压即用。
v2.0.2 — V20 标签表兼容修复 + WritePlcSclSourceFile
V20 兼容性修复小版本(修复 GitHub issue #2)。仍为双 V20/V21 binary、MIT。工具数 180 → 181(新增 1 个离线工具)。
修复 — V20 导入标签表报 The engineering version 'V21' ... is not supported
Portal.ImportPlcTagTable 现在统一走 PrepareXmlForImport,把硬编码的 <Engineering version="V21"/> 头改写为当前连接的博途版本(并补 UTF-8 BOM)。此前块 / 类型导入已做此处理,唯独标签表漏过滤,导致 V20 上 PlcBuildAndImport 生成的变量表被 Openness 拒绝。
新增 — WritePlcSclSourceFile(离线,第 181 个工具)
把 SCL 源文本写成本地 .scl 外部源文件(UTF-8 带 BOM,中文注释不乱码)。不连接博途、不导入,只落盘并返回路径与手动导入指引。
作为 V20 用户的稳妥后路:当 FC 逻辑块 XML 因 Cannot create SW.Blocks.CompileUnit... token not supported(V21 SimaticML 令牌)被 V20 拒绝时,改用博途「外部源文件 → 从源生成块」手动导入,绕开严格的 XML 令牌校验。
下载 TIA_MCP_Delivery_v2.0.2_20260608.zip,解压即用(含双 V20/V21 exe + 依赖 + tia.cmd)。
v2.0.1 — 安全(XXE)+隐私小版本
安全与隐私小版本,无行为变更、无新工具(仍 180 工具、双 V20/V21 binary、MIT)。
安全 — 修复 XML 外部实体注入(XXE)
导入/解析 XML 工程产物(块 / 画面 / 变量表 / 监控表)的 6 处 XmlDocument.Load(...) 之前统一设置 XmlResolver = null,禁用外部实体与 DTD 解析。修复在 .NET Framework 4.8 上导入第三方恶意 XML 文件时可被 XXE 利用(本地文件读取 / SSRF / billion-laughs DoS)的风险。XDocument.Load/Parse 路径默认 DtdProcessing.Prohibit,本就安全。
隐私 — 移除源码中的开发机个人路径
清除 Program.cs 中 11 处硬编码的作者机器路径,改为中性兜底(Directory.GetCurrentDirectory() / MyDocuments)。仅出现在 --run-* 开发者自测处理器,正常 MCP/CLI 运行不受影响。
下载 TIA_MCP_Delivery_v2.0.1_20260604.zip,解压即用(含双 exe + 依赖 + tia.cmd)。
v2.0.0 — 声明式 tia CLI
⚠️ 此历史版本的下载包已下架。 请使用最新版 → https://github.com/bulaofen0036-coder/TIA_Portal_Openness_MCP/releases/latest (v2.0.1,已修复 XXE 并清理)。
声明式 tia 命令行大版本:同一个 exe 既是 MCP 服务,也是命令行。任意 AI 产出一份 YAML/JSON spec,任意工程师跑一条命令即可从零建/改博途工程——无需 MCP 客户端、无需安装。
亮点
tia gen <spec>:一条命令从 spec 建完整工程(PLC+HMI+UDT/DB/标签表+SCL/LAD+编译+保存)。tia patch <spec>:增量 upsert 进已有工程。- 还有
compile/describe/export/import/prewarm/schema,退出码 0/1/2。 - YAML + JSON 双解析;
--dry-run离线校验;--json机器可读。
上手优化(本版)
tia命令入口:根目录tia.cmd(V21)/tia-v20.cmd(V20),加 PATH 即可随处tia gen。- 模板开箱即用:自动解析 spec 里的
__BUNDLE__,现成启停/电机模板无需手改路径。 - 修复相对工程路径;
.batV21 缺失自动回退 V20。
验证
- live 实机回归全过(真连 TIA V21):
tia gen16/16 步、编译 Success 0 错;patch/compile/describe/export/import/prewarm 全 rc=0。 - 双 V20/V21 binary、0 编译错误。
仍是完整 MCP 服务(tia verb 之外行为不变),CLI 与 MCP 共享同一引擎。
交付 zip:TIA_MCP_Delivery_v2.0.0_20260603.zip(源码 183 + 双版本 exe/依赖 116,6.07MB)。
v1.0.0 — headless + ScaffoldProject 一键建工程
⚠️ 此历史版本的下载包已下架。 请使用最新版 → https://github.com/bulaofen0036-coder/TIA_Portal_Openness_MCP/releases/latest (v2.0.1,已修复 XXE 并清理)。
首个 1.0 大版本,聚焦「快、好用、不出错」。
性能
- 默认 headless 启动:冷启动约 200–340s → 约 10–28s(全量回归 21/21 通过,含 WinCC Unified HMI)。需 GUI 检查时启动加
--with-ui。 - 常驻实例(可选):
python scripts/prewarm_tia.py保活后,后续会话 Connect 约 0.8–1s。
新工具
ScaffoldProject(L1):单个 JSON spec 一次调用生成完整工程(建项目→PLC/HMI 硬件→UDT/DB/标签表→SCL/LAD→编译→HMI 连接/画面/变量→保存)。支持dryRun=true离线校验。现成模板:scaffold_spec_start_stop.json(启停)、scaffold_spec_motor.json(电机)。
可靠性
- HMI 软件路径自动探测(不再写死
HMI_RT_1) - 连接对挂死/孤儿 TIA 实例加超时跳过
- 单块导入回读校验(
Meta.verified)
工具收敛
- 184 → 180:下线 4 个
Export*ToTemp变体 + 易混 Export/Import 工具补消歧描述
安装
解压附件 zip,把 MCP 配置 command 指向包内 tools/tiaportal-mcp/src/TiaMcpServer/bin/Release/net48/TiaMcpServer.exe(V20 用 bin-v20/Release/net48/)。需 Windows + TIA Portal V20/V21 + .NET 4.8。
v0.0.40 — 示例库注释/丰富 + 二进制移出 git 跟踪
⚠️ 此历史版本的下载包已下架。 请使用最新版 → https://github.com/bulaofen0036-coder/TIA_Portal_Openness_MCP/releases/latest (v2.0.1,已修复 XXE 并清理)。
0.0.40
示例库质量
- 5 个
scl-examples/*.scl重写:块头说明 + 每个接口变量(VAR_INPUT/OUTPUT/VAR)逐行中文注释 + 逻辑分区注释;逻辑更丰富(运行/剩余/完成百分比、限幅、方向、偏差%)。 FB_TimerCounterDemo用静态累计器消除"输出未初始化"告警 → 编译 0 错 0 警。UDT_BasicStatus/DB_BasicStatus每个成员补commentZhCn中文注释。
仓库管理
- 编译产物(exe/DLL/.config)移出 git 跟踪,改由本 Release zip 分发;消除"clean 误删 tracked 二进制 → MCP 启动崩溃"隐患。
交付包
TIA_MCP_Delivery_v0.0.40_20260602.zip 含完整源码 + V21/V20 双 exe(0.0.40)+ 配置。clone 仓库需自行 build 或用本 zip。
v0.0.37 — 错误处理统一 (E)
⚠️ 此历史版本的下载包已下架。 请使用最新版 → https://github.com/bulaofen0036-coder/TIA_Portal_Openness_MCP/releases/latest (v2.0.1,已修复 XXE 并清理)。
错误处理统一(E)
将 6 个错误域(Connect / Hmi / PlcGen / Compile / Import / AddDevice)的失败信号从 return false/null + 可变 LastXxxError 侧信道,统一为 throw PortalException(code, msg),工具层统一 catch (PortalException) → McpException(结构化错误码进消息)。
- 删除 5 个侧信道字段(
LastHmiError/LastPlcGenError/LastCompileError/LastImportError/LastAddDeviceError);LastConnectError故意保留(喂 Bootstrap 诊断 + OpenProject/OpenSession 共用失败分支)。 throw PortalException19→90,catch (PortalException)1→28;仅改Portal.cs+McpServer.cs,净减 ~94 行。- 批量导入逐项
try/catch收集ImportFailure,并修正了块/类型导入原先"一条失败中断整批"的不一致。 - 重建 V20/V21 双版本 exe(0.0.37,0 错误)。
本版同时包含 0.0.36(A:移除 4 个纯别名工具,削减工具表面)—— 0.0.36 未单独发布。
详见 CHANGELOG.md。zip 为仓库 tracked 内容(含双版本预编译 exe)。