You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TIA Portal Openness:WinCC Unified HMI画面导出方法问询

问题描述

我正在使用TIA Portal Openness,尝试从WinCC Unified设备导出HMI画面。

对于“经典”HMI面板,我可通过Siemens.Engineering.Hmi.Screen.Screen类及其Export(FileInfo, ExportOptions)方法顺利导出画面,示例代码如下:

// Works for classic HMI screens
Screen screen = ...; // Siemens.Engineering.Hmi.Screen.Screen
var file = new FileInfo(exportPath + "\\" + screen.Name + ".xml");
screen.Export(file, ExportOptions.WithDefaults);

在我的WPF工具中,针对WinCC Unified使用了如下属性:

private Siemens.Engineering.HmiUnified.UI.Screens.HmiScreen _projectSelectedHmiUnifScreen;

public Siemens.Engineering.HmiUnified.UI.Screens.HmiScreen ProjectSelectedHmiUnifScreen
{
    get => _projectSelectedHmiUnifScreen;
    set
    {
        if (value != _projectSelectedHmiUnifScreen)
        {
            _projectSelectedHmiUnifScreen = value;
            NotifyPropertyChanged(nameof(ProjectSelectedHmiUnifScreen));
        }
    }
}

后续执行逻辑如下:

if (_apiWrapper.ProjectSelectedHmiUnifScreen != null)
{
    string exportScreenName = _apiWrapper.ProjectSelectedHmiUnifScreen.Name;

    try
    {
        var newFile = new FileInfo(_apiWrapper.ExportFolder + "\\" + exportScreenName + ".xml");

        // This works for classic HMI Screen,
        // but for Unified HmiScreen there is no Export method:
        // _apiWrapper.ProjectSelectedHmiUnifScreen.Export(newFile, ExportOptions.None);

        Console.WriteLine($"Exported HMI Screen: {exportScreenName}");
    }
    catch (NullReferenceException ex)
    {
        MessageBox.Show(ex.Message, "Missing selected HMI screen for export",
            MessageBoxButton.OK, MessageBoxImage.Error);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "HMI screen export error",
            MessageBoxButton.OK, MessageBoxImage.Error);
    }
}

现提出以下技术问题:

  1. 在Openness API中,Siemens.Engineering.HmiUnified.UI.Screens.HmiScreen是否能正确表示WinCC Unified HMI画面?
  2. 是否存在官方支持的方法,可通过Openness将单个WinCC Unified画面(或Unified HMI设备的全部画面)导出为XML,类似经典HMI的Screen.Export(...)方法?

环境信息:

  • TIA Portal + Openness v17
  • WinCC Unified设备类型:Unified Comfort

我已知晓经典HMI画面导出的官方示例及Unified的Excel导入导出工具,但未找到针对Siemens.Engineering.HmiUnified.UI.Screens.HmiScreen的直接HmiScreen.Export(...)调用示例,希望获取具体代码示例或当前功能限制的确认。

解决方案

问题1:关于HmiScreen类的正确性

Siemens.Engineering.HmiUnified.UI.Screens.HmiScreen确实是Openness API中用于表示WinCC Unified单个画面的正确类型,它对应Unified项目里的可视化画面对象,能正确获取画面的名称、属性等基础信息。

问题2:Unified画面的XML导出方法

在TIA Portal Openness V17中,Unified HMI的单个画面并没有像经典HMI那样直接提供Export方法。官方支持的替代方案有两种:

方案1:导出整个Unified HMI设备的画面集合

可以通过Unified HMI设备的Export方法导出包含所有画面的XML包,后续可从中提取单个画面的内容。示例代码:

// 获取Unified HMI设备对象(假设已通过项目树定位到)
Siemens.Engineering.HmiUnified.HmiUnifiedDevice unifiedDevice = ...;

var exportFile = new FileInfo(@"C:\Export\UnifiedHmiScreens.xml");
unifiedDevice.Export(exportFile, ExportOptions.WithDefaults);

导出的XML文件会包含设备下所有画面的完整配置,你可以解析该XML来提取目标画面的节点内容。

方案2:使用画面的序列化接口

Unified的HmiScreen实现了ISerializable接口,可通过序列化方式将画面对象转换为XML格式。示例代码:

using System.Xml.Serialization;

// 假设已获取目标HmiScreen对象
Siemens.Engineering.HmiUnified.UI.Screens.HmiScreen targetScreen = ...;
var exportPath = @"C:\Export\" + targetScreen.Name + ".xml";

using (var writer = new StreamWriter(exportPath))
{
    var serializer = new XmlSerializer(typeof(Siemens.Engineering.HmiUnified.UI.Screens.HmiScreen));
    serializer.Serialize(writer, targetScreen);
}

注意:这种方式导出的XML结构和经典HMI的导出格式有所不同,且部分内部属性可能会被序列化,需自行验证内容的可用性。

功能限制说明

在Openness V17版本中,官方并未提供与经典HMI完全一致的单个画面XML导出方法。如果需要更贴合经典HMI导出格式的结果,建议优先使用方案1导出整个设备的画面集合后再做解析。


内容的提问来源于stack exchange,提问作者starkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:24:54