TIA Openness 15.1无法获取项目HMI屏幕列表技术求助
使用TIA Openness 15.1 Python API获取HMI屏幕列表失败的解决方案
问题背景
尝试通过TIA Openness 15.1的Python代码获取项目中指定HMI设备的所有屏幕列表(后续需提取屏幕关联标签),但多次尝试均未成功获取到屏幕数据。
常见错误原因及解决代码
错误核心
多数失败案例是因为未正确定位到HMI设备的Runtime对象,错误访问DeviceSoftware属性导致无法获取屏幕集合。
正确实现代码
import clr # 添加TIA Openness必要程序集引用 clr.AddReference('Siemens.Engineering') clr.AddReference('Siemens.Engineering.Hmi') clr.AddReference('Siemens.Engineering.Hmi.Runtime') from Siemens.Engineering import TiaPortal, TiaPortalMode from Siemens.Engineering.Hmi import HmiDevice # 初始化TIA Portal实例 tia = TiaPortal(TiaPortalMode.WithUserInterface) # 打开目标项目 project = tia.OpenProject(r"C:\Path\To\Your\Project.ap15") # 定位目标HMI设备 target_hmi_name = "你的HMI设备名称" # 替换为截图中的设备名称 hmi_runtime = None for device in project.Devices: # 判断设备类型为HMI设备且名称匹配 if isinstance(device, HmiDevice) and device.Name == target_hmi_name: hmi_runtime = device.Runtime break if hmi_runtime: # 获取所有屏幕列表 screens = hmi_runtime.Screens print(f"已找到 {len(screens)} 个HMI屏幕:") for idx, screen in enumerate(screens, 1): print(f"{idx}. 屏幕名称:{screen.Name}") # 额外:获取当前屏幕关联的标签(示例) for item in screen.ScreenItems: # 判断元素是否包含Tag属性且关联标签不为空 if hasattr(item, 'Tag') and item.Tag is not None: print(f" 关联标签:{item.Tag.Name}") else: print(f"未找到名称为「{target_hmi_name}」的HMI设备,请检查设备名称是否正确")
关键注意点
- 必须引用
Siemens.Engineering.Hmi.Runtime程序集,屏幕集合属于HmiRuntime对象的属性 - 需通过
isinstance(device, HmiDevice)过滤出HMI设备,避免误处理PLC设备 - 运行代码前确保TIA Portal 15.1已正常授权,且目标项目未被其他进程锁定
- 若HMI设备存在多个版本的设备软件,
Runtime属性会自动关联到当前激活的配置
内容的提问来源于stack exchange,提问作者Elijah Prisyazhnyuk
相关产品推荐
相关产品推荐

