跳到正文
Learn-SCL
SCL 示例库/SCL 指南/用 TiaLink 把 SCL 导入 TIA Portal

用 TiaLink 把 SCL 导入 TIA Portal

从外部源到生成块、编译、保存:TiaLink 的 import-batch / import-scl 流程、常见编译错误和检查清单。

TiaLink

一句话:TiaLink 把 SCL 当作“外部源”导入正在打开的 TIA Portal:提交 .scl 文件后生成块、编译并清理外部源,最后显式保存项目。

本页说明 Learn-SCL 示例页上的「导入到我的 TIA 项目」按钮背后发生了什么,以及导入失败时怎么排查。

前置条件

TiaLink 是怎么导入 SCL 的

TiaLink 提供两个与 SCL 有关的入口:

入口 用途
POST /api/v1/import-scl 把请求体当作一个 SCL/STL/DB/UDT 外部源创建;可选 generate=true 从源生成块
POST /api/v1/import-batch 一次提交多个文件(SimaticML 或 .scl),按顺序导入,最后统一编译

Learn-SCL 的示例页使用 import-batch,每个块一个 .scl 文件 part,并带上:

compile=true
cleanupSources=true
stopOnError=true
device=<你选择的 PLC>

含义:

页面上会发生什么

  1. 页面探测 GET /api/v1/health,确认 TiaLink 在运行、已连接项目;
  2. 读取 GET /api/v1/devices,填充「目标 PLC」下拉框;
  3. 点击导入后,弹出确认框,列出将要提交的块;
  4. 浏览器把每个块拼成 multipart/form-data,POST 到 /api/v1/import-batch;
  5. 页面展示每个块的结果,以及编译状态/错误/警告;
  6. 如果项目变脏(health.dirty=true),页面出现「保存项目」按钮,调用 POST /api/v1/save。

TiaLink 对 SCL 外部源没有 dryRun 预检(dryRun 只对 SimaticML 生效)。所以页面用确认框代替预检,并明确提示“同名块可能被覆盖”。

为什么不用 SimaticML

SimaticML 是 TIA 导出的 XML 格式,适合精确还原块界面和网络;但 SCL 的 SimaticML 是 token 级的 XML,手写/生成都很脆弱。SCL 外部源是 TIA 原生支持的文本入口:源码 → TIA 解析 → 生成块,链路更短,也更容易在页面上展示和复制。

代价是:SCL 外部源导入时,TIA 会按自己的规则解析源码;语法错误会以 TIA 编译错误的形式返回,而不是页面预检。所以示例都在本地 SCL 仿真引擎里先验证过,再在 TIA 里编译验证。

常见编译错误

错误 原因 处理
Unknown type / 类型未知 引用了未导入的 UDT/DB/FB 确认示例的块都按顺序导入;本库示例尽量不用 UDT
Identifier not defined 标签/块名拼写不一致 检查大小写和引号;TIA 标签名区分大小写
Cannot convert 类型不匹配 用 INT_TO_REAL / REAL_TO_INT 等显式转换
The block is not consistent 块内有未解析引用 先编译被调用块,或检查接口
Instance DB missing FB 调用没有背景 DB 单实例调用要生成实例 DB;本库示例多用 FB 静态变量,不需要外部实例 DB
Hardware I/O not found 示例用了 CPU 上不存在的 I/O 换 CPU 或改地址;这是警告,不一定是错误

导入后检查清单

没有 TIA 怎么办

先用页面上的「仿真验证」:复制 scl_run_scenario 请求到 PLC 云仿真,不需要博途就能逐扫描运行 SCL。等逻辑确认后,再找一台装有 TIA 的 Windows 电脑做导入。

安全与数据

TiaLink 在本地运行,工程数据不经过 Learn-SCL 服务器;页面只把源码 POST 到你自己填写的 TiaLink 地址(默认 http://localhost:8080)。如果 TiaLink 启用了 --api-token,在「TiaLink 设置」里填入同一个值即可。

常见问题

SCL 导入用 import-scl 还是 import-batch?

一个文件用 import-scl;多个块用 import-batch,每个块一个 .scl 文件 part,并设置 compile=true、cleanupSources=true。

导入后为什么还要手动保存?

TiaLink 的导入只写入当前打开的项目,不会自动持久化;必须调用 POST /api/v1/save(页面上的“保存项目”按钮)才会写回 .ap19 文件。

下一步

浏览示例

把语法放回完整程序里看:边沿、定时器、状态机、缓冲站、阀门控制。

打开示例库 →

TiaLink

把示例导入你的 TIA Portal 工程,生成块、编译并读回核对。

了解 TiaLink →

PLC 云仿真

不装博途,用 MCP 逐扫描运行 SCL,做场景验收。

打开云仿真 →