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); } }
现提出以下技术问题:
- 在Openness API中,
Siemens.Engineering.HmiUnified.UI.Screens.HmiScreen是否能正确表示WinCC Unified HMI画面? - 是否存在官方支持的方法,可通过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

