TIA Portal Openness(V16-V18)能否编辑库中PLC UDT并发布新版本?
在TIA Portal Openness 16/17/18中编辑库UDT并发布新版本的可行方案
可以实现编辑库中的用户自定义类型(UDT)并发布带版本控制的新版本,且保持PLC实例与库类型的关联。你之前的操作导致UDT脱离库关联,是因为导出的XML不包含库类型的元数据,导入后会转为本地自定义类型。以下是具体操作流程:
一、直接操作库项目中的UDT(而非从PLC实例导出)
通过Openness API直接加载库项目,而非从PLC的实例化UDT导出XML,这样能保留库类型的关联信息:
- 加载库项目:
using Siemens.Engineering; using Siemens.Engineering.Library; using Siemens.Engineering.SW.Tags; // 初始化TIA Portal实例 var tiaPortal = new Portal(); // 打开目标库项目(替换为你的库文件路径) var libraryProject = tiaPortal.Projects.Open(@"C:\Path\To\Your\Library.ap17");
- 定位到要修改的UDT:
// 通过名称查找库中的UDT var targetUdt = libraryProject.Find<PlcUserDefinedType>("YourUDTName");
二、修改库UDT的定义
直接对库中的UDT对象进行编辑,比如添加成员、修改数据类型或注释:
// 示例:给UDT添加一个新的Int类型成员 var newMember = new PlcMember(targetUdt) { Name = "NewStatus", DataType = "Int", Comment = "新增状态标识" }; targetUdt.Members.Add(newMember); // 示例:修改现有成员的数据类型 var existingMember = targetUdt.Members.First(m => m.Name == "OldField"); existingMember.DataType = "DInt";
三、发布库的新版本
使用Openness的库发布功能,生成带版本号的新版本库:
// 定义新版本号(比如从1.0升级到1.1) var newVersion = new Version(1, 1); // 发布新版本 libraryProject.LibraryManager.PublishNewVersion(newVersion); // 保存并关闭库项目 libraryProject.Save(); libraryProject.Close();
四、更新PLC项目中的库引用
打开目标PLC项目,更新库引用到新版本,确保UDT实例仍与库关联:
// 打开PLC项目 var plcProject = tiaPortal.Projects.Open(@"C:\Path\To\Your\PLCProject.ap17"); // 查找对应的库引用 var libraryRef = plcProject.LibraryReferences.First(r => r.Name == "YourLibraryName"); // 更新到新版本 libraryRef.UpdateToVersion(newVersion); // 保存PLC项目,使更新生效 plcProject.Save();
关键注意事项
- 库项目权限:确保库文件不是只读状态,且未被其他TIA Portal实例锁定,否则无法编辑和发布。
- UDT兼容性:修改UDT时尽量避免删除已有成员(会导致PLC实例报错),优先采用添加成员、修改注释或调整可选属性的方式,保证向下兼容。
- 版本号规则:TIA Portal支持主版本号和次版本号的升级,建议遵循语义化版本规则,便于识别版本差异。
内容的提问来源于stack exchange,提问作者Cliff Pennalligen
相关产品推荐
相关产品推荐

