浏览示例
把语法放回完整程序里看:边沿、定时器、状态机、缓冲站、阀门控制。
打开示例库 →不装博途也能验证 SCL:配置 sim MCP,用 scl_validate / scl_run_scenario 逐扫描跑场景,返回 PASS/FAIL。
一句话:PLC 云仿真通过 MCP 接收 SCL 源码,用 scl_validate 校验、scl_simulate 逐扫描执行、scl_run_scenario 做场景验收,不需要安装博途。
PLC 云仿真是一个 MCP 服务:AI 助手(Claude Code、Cursor、VS Code 等)把 SCL 源码提交给它,它在云端逐扫描执行,返回变量值、诊断和 PASS/FAIL 场景报告。新用户有 100 次免费调用。
| 工具 | 作用 |
|---|---|
scl_validate |
解析 + 结构校验 SCL 源码,返回 parse/validation issue |
scl_simulate |
种子变量 → 分步写入 → 跑 N 个扫描周期 → 回读变量/完整状态 + 诊断 |
scl_run_scenario |
声明式场景:cases / sweep / fuzz / always,返回 PASS/FAIL 报告 |
它不是 TIA 编译器:不检查硬件、不生成块、不替代 TIA 编译。它验证的是 SCL 的语法、结构和逐扫描行为。
在支持 MCP 的客户端里加入:
{
"mcpServers": {
"sim-cloud": {
"url": "https://tia.hubwiz.com/sim/mcp",
"headers": { "Authorization": "Bearer <你的 API Key>" }
}
}
}API Key 在 PLC 云仿真 微信扫码登录后获得。每次被接受的 tools/call 扣 1 次额度;initialize / tools/list / resources/read 免费。
下面的 JSON 是一个回归基线,用来展示 MCP 调用形状;实际使用时推荐让 Agent 自己写 scenario,不必手抄。
{
"sources": [
{
"name": "FB_EdgeDetection.scl",
"source": "FUNCTION_BLOCK \"FB_EdgeDetection\"\n...\nEND_FUNCTION_BLOCK"
}
],
"scenario": {
"docs": ["FB_EdgeDetection.scl"],
"block": "FB_EdgeDetection",
"tickMs": 10,
"scenarios": [
{
"name": "上升沿只出现一个扫描周期",
"steps": [
{ "set": { "Signal": false }, "expect": { "Rising": false } },
{ "set": { "Signal": true }, "expect": { "Rising": true } },
{ "set": { "Signal": true }, "expect": { "Rising": false } }
]
}
]
}
}调用 scl_run_scenario,返回类似:
PASS 上升沿只出现一个扫描周期 (3 step(s), 3 scan(s))
RESULT: ALL PASS (3 scan(s))Learn-SCL 每个可仿真示例的「仿真验证」区块都提供两样东西:
scl_run_scenario 请求和预期输出,只在需要精确复现或对比结果时使用。不要一开始就手写 scenario:把设计场景的工作交给 Agent,你只需要检查它给出的输入、期望、实际和 PASS/FAIL 是否合理。
| 键 | 必填 | 含义 |
|---|---|---|
docs |
是 | SCL 文件路径;在 MCP 请求里可以随便写,因为 sources 已经内联 |
block |
是 | 要扫描的目标块名 |
tickMs |
否 | 注入的扫描周期,默认 10ms |
seed |
否 | 每个新状态都先写入的变量 |
scenarios |
三选一 | 脚本化用例:每个 case 全新状态 |
sweep |
三选一 | 笛卡尔积组合 |
fuzz |
三选一 | 种子随机测试 |
always |
否 | 每次扫描后都检查的不变式 |
步骤键是 ticks(不是 scans),set 是增量写入,expect 是精确断言。
Start、Timer.ET)解析为目标块的局部变量;G: 是全局变量/DB 变量,例如 G:DB_Tags.Start;C:G: / C:L: 是常量;Timer.Q、Counter.CV)可以直接写。docs 路径不存在:MCP 请求里 sources 已经内联,docs 只是场景 schema 的一部分;本地 CLI 运行时才按路径解析。parse 只解析第一个块;多块程序请拆成多个 sources,或每个块一个文件。TYPE/UDT 声明:教学版示例用内联 STRUCT;如果你从 TIA 导出的源码带 UDT,需要先展开或改成接口变量。Time + Time 不支持:用 T_ADD。DataLog*、Recipe*、WRIT_DBL、READ_DBL 等不在仿真范围,只能 TIA 编译验证。tools/call 扣 1 次(charge-on-attempt,先扣后执行);QUOTA_EXHAUSTED,不会执行;| 场景 | 用哪个 |
|---|---|
| 只验证 SCL 逻辑/状态机/定时器 | 云仿真 scl_* |
| 需要生成 TIA 块、编译、下载到 PLCSIM | TiaLink |
| 需要真实 CPU/硬件反馈 | TIA + PLCSIM/真实 CPU |
| 需要读回工程、导出、比较 | TiaLink |
两者可以组合:先在云仿真里把场景跑通,再用 TiaLink 导入 TIA 编译,最后在 PLCSIM 里跑同样的场景。
不能。云仿真验证 SCL 的语法、结构和逐扫描行为,不检查硬件、不生成块、不替代 TIA Portal 编译;导入工程前仍要在 TIA 里编译一次。
本地 SCL 仿真引擎的 parse 只解析一个块;多个块请拆成多个 sources,每个 source 一个 FB/FC/OB/DB。
把语法放回完整程序里看:边沿、定时器、状态机、缓冲站、阀门控制。
打开示例库 →把示例导入你的 TIA Portal 工程,生成块、编译并读回核对。
了解 TiaLink →不装博途,用 MCP 逐扫描运行 SCL,做场景验收。
打开云仿真 →