用 Openness 跨机器复制 PLC 程序
本教程介绍如何使用 TIA Openness 从一台机器复制 PLC 程序块、修改标签并部署到不同项目中的多台机器——这对于标准化从主程序派生的机器程序至关重要。
AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | PLC在线仿真器 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
Siemens TIA Openness 是一个编程接口,可以通过 .NET 应用程序和 XML 文件处理实现 TIA Portal 内任务的自动化。本教程介绍如何使用 TIA Openness 从一台机器复制 PLC 程序块、修改标签并部署到不同项目中的多台机器——这对于标准化从主程序派生的机器程序至关重要。
前提条件:
TIA Openness 需要 TIA Portal Professional(或用于 S7-1200/S7-1500 的 Basic 版)以及带有 .NET 框架的 Visual Studio。TIA Openness DLL(Siemens.Engineering.dll、 Siemens.Engineering.HW.dll 等)随 TIA Portal 安装,通常位于C:\Program Files\Siemens\Automation\TIA Portal\Openness\Inc\Programming\API。
1、什么是 TIA Openness?
TIA Openness 提供对 TIA Portal 项目的编程访问,实现以下自动化:
- 读取和写入 PLC 标签、数据块和函数
- 创建和修改硬件配置
- 编译和归档项目
- 在 XML 和 TIA 格式之间导出/导入
2、用例:主程序到派生机器程序
您的场景:一个主 PLC 包含机器 1 的优化代码。您需要创建机器 2、3 和 4 的程序,这些程序具有相同的逻辑但不同的标签值(I/O 映射、设备名称、IP 地址)。TIA Openness 可以通过以下方式实现自动化:
- 打开主项目
- 将选定的块导出为 XML
- 以编程方式修改标签
- 导入到目标项目
- 编译并验证
3、分步指南:基本 TIA Openness 设置
3.1 创建 .NET 应用程序
- 打开 Visual Studio(建议使用 2017 或更高版本)
- 创建新的 C# 控制台应用程序(.NET Framework 4.7+ 或 .NET 6)
- 添加对 TIA Portal 安装中 Siemens Engineering API DLL 的引用
3.2 连接到 TIA Portal
using Siemens.Engineering;
using Siemens.Engineering.HW;
using Siemens.Engineering.SW;
class Program
{
static void Main(string[] args)
{
// 连接到正在运行的 TIA Portal 实例或创建新实例
TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface);
// 或连接到现有实例
// TiaPortal tiaPortal = TiaPortal.GetProcess();
Console.WriteLine("Connected to TIA Portal");
}
}
3.3 打开项目
// 打开现有项目
Project project = tiaPortal.Projects.Open(
new FileInfo(@"C:\Projects\MasterProject\MasterProject.ap17"));
// 访问 PLC
PlcSoftware masterPLC = project.GetItem<PlcSoftware>("PLC_1 [CPU 1516-3 PN/DP]");
// 获取所有程序块
PlcBlockFolder blockFolder = masterPLC.BlockGroup;
3.4 将块导出为 XML
// 导出特定块
foreach (PlcBlock block in blockFolder.PlcBlocks)
{
if (block.Name.StartsWith("Machine_"))
{
string exportPath = @"C:\Exports\" + block.Name + ".xml";
block.Export(new FileInfo(exportPath),
ExportOptions.WithDBReuse | ExportOptions.WithSourceComment);
Console.WriteLine($"Exported: {block.Name}");
}
}
3.5 修改 XML 中的标签
using System.Xml.Linq;
void ModifyXmlTags(string xmlFilePath, string oldTag, string newTag)
{
XDocument doc = XDocument.Load(xmlFilePath);
// 在 XML 结构中替换标签名称
foreach (var element in doc.Descendants())
{
if (element.Value == oldTag)
element.Value = newTag;
// 同时更新属性引用
if (element.Attribute("Name")?.Value == oldTag)
element.Attribute("Name").SetValue(newTag);
}
doc.Save(xmlFilePath);
}
3.6 导入到目标项目
// 打开目标项目
Project targetProject = tiaPortal.Projects.Open(
new FileInfo(@"C:\Projects\Machine2\Machine2.ap17"));
PlcSoftware targetPLC = targetProject.GetItem<PlcSoftware>("PLC_1 [CPU 1516-3 PN/DP]");
// 导入修改后的块
string importPath = @"C:\Exports\Machine_Block_Modified.xml";
targetPLC.BlockGroup.ImportFrom(new FileInfo(importPath),
ImportOptions.Override);
Console.WriteLine("Blocks imported to Machine 2 project");
3.7 编译并验证
// 编译目标 PLC
targetPLC.Compile();
// 检查错误
if (targetPLC.Messages.Count > 0)
{
foreach (var msg in targetProject.Messages)
{
Console.WriteLine($"Error: {msg.Description}");
}
}
else
{
Console.WriteLine("Compilation successful");
}
// 保存并关闭
targetProject.Save();
tiaPortal.Dispose();
4、手动方法
对于不需要自动化要求的简单场景,TIA Portal 支持直接块复制:
- 打开源 TIA Portal 项目
- 导航到 PLC 程序块
- 选择所有块 → 复制(Ctrl+C)
- 打开目标项目
- 粘贴到 PLC 块文件夹中
- 更新所有块调用参数和 I/O 引用
- 编译并解决冲突
限制: 手动复制需要重命名所有块(包括 DB)以避免冲突,并手动更新每个实例调用——这对于大型程序容易出错。
5、Siemens 演示应用程序
Siemens 在安装目录中提供官方 TIA Openness 示例:
C:\Program Files\Siemens\Automation\TIA Portal\Openness\Examples
主要演示包括:
- AutoSave: 自动项目归档
- ProjectComparison: 比较两个项目
- StationConfigurator: 硬件配置自动化
- VBScript 示例: TIA Portal 脚本(较旧的方法)
6、版本兼容性
| TIA Portal 版本 | API DLL 版本 | 所需 .NET |
|---|---|---|
| V16 | Siemens.Engineering.dll (16.0) | .NET 4.7+ |
| V17 | Siemens.Engineering.dll (17.0) | .NET 4.8 |
| V18 | Siemens.Engineering.dll (18.0) | .NET 4.8 |
| V19 | Siemens.Engineering.dll (19.0) | .NET 4.8 / .NET 8 |
原文链接:Siemens TIA Openness: Copying PLC Programs Between Machines
汇智网翻译整理,转载请标明出处