跳到内容
PLCWare

用 TIA Portal Openness 将 PLC 块导出为 SimaticML XML

简体中文译文。英文原文:export-plc-block-simaticml.md。

SimaticML 是 TIA Portal Openness 用来把 PLC 块导入、导出项目的 XML 格式。本指南把一个块(或全部块)导出为 XML:先用 C# 编写的原生 Openness,再用 PLCWare 的 HTTP API 和 MCP 工具。适用于 TIA Portal V21。

开始之前

  • 一个已连接到 TIA Portal V21、并且已打开项目的 Openness 应用。如果还没有配置,请参阅 在 Windows 上配置 TIA Portal Openness。
  • PLC 不能处于在线状态。
  • 只有一致的块才能导出。如果块在上次编译之后有改动,请先编译 (用代码编译 PLC)。
  • 支持的块类型:FB、FC、OB 和全局 DB。支持的语言:STL、FBD、LAD、GRAPH 和 SCL。

用 Openness(C#)导出一个块

using System.IO;
using Siemens.Engineering;
using Siemens.Engineering.SW;
using Siemens.Engineering.SW.Blocks;

static void ExportBlock(PlcSoftware plcSoftware)
{
    PlcBlock block = plcSoftware.BlockGroup.Blocks.Find("FB_Motor");
    block.Export(new FileInfo(@"D:\Export\FB_Motor.xml"), ExportOptions.WithDefaults);
}

ExportOptions 决定文件里包含多少内容:

选项文件包含的内容
ExportOptions.None只含被修改过或与默认值不同的数据,以及导入所必需的内容
ExportOptions.WithDefaults同时包含默认值
ExportOptions.WithReadOnly同时包含写保护的值

后两个选项可以组合:ExportOptions.WithDefaults | ExportOptions.WithReadOnly。文件内容为英文,项目中的文本会按项目已有的 全部语言导出。

TIA Portal V21 的 Openness 库写出的是工程版本 V21 的 SimaticML,并且可以读取 V18 到 V21 的文件。

导出全部块(包括用户组)

static void ExportAll(PlcSoftware plc, string folder)
{
    Directory.CreateDirectory(folder);
    ExportBlocks(plc.BlockGroup.Blocks, folder);
    foreach (PlcBlockUserGroup group in plc.BlockGroup.Groups)
        ExportGroup(group, Path.Combine(folder, group.Name));
}

static void ExportGroup(PlcBlockUserGroup group, string folder)
{
    Directory.CreateDirectory(folder);
    ExportBlocks(group.Blocks, folder);
    foreach (PlcBlockUserGroup sub in group.Groups)
        ExportGroup(sub, Path.Combine(folder, sub.Name));
}

static void ExportBlocks(PlcBlockComposition blocks, string folder)
{
    foreach (PlcBlock block in blocks)
        block.Export(new FileInfo(Path.Combine(folder, block.Name + ".xml")), ExportOptions.WithDefaults);
}

带有专有技术保护(know-how protection)的块只会导出其公共接口,除非你先用 PlcBlockProtectionProvider 解除保护。

用 PLCWare 导出

PLCWare 的 serve 应用把同样的 Openness 调用封装成本地 HTTP/JSON API(默认 http://localhost:5000),tia MCP 服务器再把 它们作为工具提供给 AI 助手。导出只读取项目,因此所有套餐(包括 Basic)都可以使用。

一个块,直接在响应中返回

$r = Invoke-RestMethod "http://localhost:5000/plcs/PLC_1/blocks/FB_Motor/xml"
$r.xml | Out-File FB_Motor.xml -Encoding utf8
$r.contentHash

响应为 { name, options, contentHash, contentHashError, xml }。加上 ?options=WithDefaults(或 None、WithReadOnly, 多个值用 , 连接)即可选择导出选项。对应的 MCP 工具是 tia_export_block,参数为 { "plc": "PLC_1", "block": "FB_Motor" }。

全部块和类型,导出到一个文件夹

Invoke-RestMethod -Method Post "http://localhost:5000/plcs/PLC_1/export" `
  -ContentType "application/json" -Body '{"directory":"C:\\export"}'

块会写入该目录下的 Blocks\,类型写入 Types\,路径位于运行 serve 的那台机器上,响应会列出每个文件及其 SHA-256 和大小。 对应的 MCP 工具是 tia_export_xml;当项目太大、无法在一次工具结果中返回时,请使用它。

证明项目仍与 git 中的 XML 一致

不要比较两次原始导出的哈希:同一个块的两次导出在 <Created> 和 UId 上就会不同。应当把已提交的 XML 交给 tia_block_compare。 它会先对项目中的块和你的文件做规范化(忽略格式、BOM、<Created> 和 UId),再比较,并返回 verdict: "equal" 或 "different"。

其他值得了解的细节:

  • 导出不一致的块时会先编译它,这可能会重新生成其背景 DB(instance DB)。请一并导出并提交背景 DB。
  • contentHash 是“防止覆盖过期内容”的保护在导入覆盖块之前检查的哈希(参见 导入 LAD、FBD 和 SCL 块)。该保护需要 PLCWare 应用 1.7.0 或更高版本。
  • tia_block_render 可以把 SimaticML 导出文件逐网络渲染成可读的伪 SCL,不需要运行 TIA Portal。用它在 pull request 中审阅 LAD 和 FBD 块很方便。
  • 一致的 F 块可以导出并重新导入,但安全系统自带的 F 系统块无法导出。

相关指南

开始 30 天免费试用

PLCWare 会针对 TIA Portal V21,替你或你的 AI 助手完成这些步骤。试用期为 30 天,包含 Pro 权限范围,无需信用卡,且不会续期。你需要自行向西门子 另购带 STEP 7 Professional 许可证的 TIA Portal V21。

开始 30 天免费试用 · 下载应用

TIA Portal、SIMATIC 和 Siemens 是西门子公司(Siemens AG)的商标。PLCWare 是面向 TIA Portal 的独立产品,与西门子无关联,也未获 其认可。