Skip to content

v0.1.0 — S7-200 SMART MCP 首个发布

Latest

Choose a tag to compare

@bulaofen0036-coder bulaofen0036-coder released this 25 Aug 07:24

用 MCP 驱动 S7-200 SMART(STEP 7-Micro/WIN SMART V3):从 AWL 源文件到"工程里可用且验证过"的一条龙。

这软件没有 Openness——没有 COM、没有命令行,内置 JSON-RPC 只管 PROFINET,内置 AI 只连云端。所以本项目走的是进程注入:启一个独立的 MicroWIN 实例,注入自研 DLL,在主线程里直接调用软件自己的内部 C++ 导出函数(PRJ_ImportPouFile、POU_ExportPOU、POU_IsValidNet、GLBVAR_GetRow 等)。这些函数的签名是逆向出来的。

主要能力

  • smart_deploy —— 90% 的活一个工具搞定:设符号 → 导程序 → 编译 → 五关验证 → 保存,一次注入干完
  • smart_overview —— 一屏看清工程结构:有哪些块、各干什么、谁调用谁、死代码、悬空引用
  • smart_export_all —— 整个工程连同符号表导出,目录自包含,可当备份/迁移/进 git
  • smart_validate_project —— 问引擎要真值(POU_IsValidNet),权威判据
  • smart_check_stl —— 离线秒级预检,不启动软件
  • 另有离线工程解析(V2 .smart)、在线通讯、UI 自动化等,共 25 个工具

为什么是"五关验证"

软件的 COMPILE ret=0 不能当通过判据。 无效程序段会被标红并排除在编译之外,其余照常编译 → 返回成功。据此报"已验证"会骗人(真踩过,交付过一份满屏标红的程序)。

关 干什么
1 静态预检 离线秒级,挡明显问题
2 导入+编译 抓语法与交叉引用错误
3 引擎真值 POU_IsValidNet 逐网络问软件本人 ← 权威
4 往返导出 逐条核对指令流与网络数,抓静默丢弃
5 落盘校验 比对文件指纹,证明真写进磁盘了

第 5 关补的是另一个洞:前四关全在同一个内存实例里问软件自己,软件说"存好了"不等于文件变了。实测过 SAVE 返回 ret=0、却把内容写进同名的 .smart(V2)、原 .smartV3 字节不变——四关全绿但工程是空的。

示例工程

examples/demo_station/:双工位自动上料·加工·出料站,从空白模板从零生成、五关验证过。

18 块 / 231 网络 / 635 条指令 / 158 种指令助记符 / 30 个 I/O 符号,SCR 顺序控制 7 步做骨架,可直接抄改。

examples/instruction_probe/:问软件"这条指令你到底认不认"的可复跑探针。

几条实测踩出来的坑(详见 README)

  • S7-200 SMART 只有 LAD/FBD/STL,没有 SCL;而且语言是整个工程的一个设置,不是每个块各自的属性(PRJ_ 前缀不是 POU_)——所以 AWL 导入后显示成梯形图很正常
  • 没有 NETR/NETW(那是 S7-200 的 PPI 指令),以太网 S7 通信用 GET/PUT
  • 落盘一律 SAVEAS,别用 SAVE
  • 导入 OB1 会替换整个程序集,主程序必须排最前
  • 未定义的符号名不报编译错,而是让整个网络变成无效程序段
  • 从工程导出的 AWL 用符号名不是绝对地址,导出件依赖那份符号表

安装

pip install -r requirements.txt
python native/bootstrap/build.py          # 编译注入 DLL(需 VS Build Tools)
claude mcp add smart200 -s user -- python <仓库路径>/run.py

挂好之后先跑 smart_doctor,它会一次说清缺什么、怎么补。仓库放哪个盘都行,MicroWIN 位置自动探测。

测试

6 套测试合计 113 项,离线部分 clone 下来就能跑。每套都含反向哨兵(哨兵若 PASS 就说明测试本身坏了),关键修复还做过故障注入验证。

已知边界

  • 下载到 PLC 未打通;在线通讯(snap7)代码就绪但未经真机验证
  • 切换编程语言没打通(PRJ_SetLang 返回 0 但不生效)——在软件界面上切是一秒钟的事
  • 不还原逐网络 LAD/STL 图形布局
  • V3 .smartV3 离线不可读(加密),但引擎注入可处理 V3 工程
  • UI 层依赖简体中文界面 + V3.2

环境

Windows + STEP 7-Micro/WIN SMART V3.2 + Python 3.9+ + VS Build Tools(编译注入 DLL 用)