用 Openness 跨机器复制 PLC 程序

本教程介绍如何使用 TIA Openness 从一台机器复制 PLC 程序块、修改标签并部署到不同项目中的多台机器——这对于标准化从主程序派生的机器程序至关重要。

用 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 可以通过以下方式实现自动化:

  1. 打开主项目
  2. 将选定的块导出为 XML
  3. 以编程方式修改标签
  4. 导入到目标项目
  5. 编译并验证

3、分步指南:基本 TIA Openness 设置

3.1 创建 .NET 应用程序

  1. 打开 Visual Studio(建议使用 2017 或更高版本)
  2. 创建新的 C# 控制台应用程序(.NET Framework 4.7+ 或 .NET 6)
  3. 添加对 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 支持直接块复制:

  1. 打开源 TIA Portal 项目
  2. 导航到 PLC 程序块
  3. 选择所有块 → 复制(Ctrl+C)
  4. 打开目标项目
  5. 粘贴到 PLC 块文件夹中
  6. 更新所有块调用参数和 I/O 引用
  7. 编译并解决冲突

限制: 手动复制需要重命名所有块(包括 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

汇智网翻译整理,转载请标明出处