如何创建C#密封类PlcSystemBlockGroup实例及调试类型含义说明
问题解答
调试模式显示含义
你看到的调试显示规则如下:
object {Siemens.Engineering.SW.Blocks.PlcBlockSystemGroup}中,前半部分object是变量的声明类型,因为ProjectTree.SelectedItem.Tag的原生类型就是object,所以用var声明的current变量声明类型默认为object;大括号包裹的内容是变量的运行时实际类型,是调试器为了方便开发者识别object实际承载的实例类型额外标注的。- 值栏显示的
{Siemens.Engineering.SW.Blocks.PlcBlockSystemGroup}是该类的ToString()方法返回结果,因为这个类没有自定义调试显示特性,调试器默认调用ToString()作为值的展示内容。
无法直接new实例的原因
你贴的PlcSystemBlockGroup类定义里没有公开的构造函数,加上是密封类,说明这是西门子TIA Openness API的设计限制:所有工程相关的实例都不允许开发者凭空创建,必须从已有的工程对象层级中获取或者通过API提供的创建方法生成,避免出现脱离工程上下文的无效对象。
正确获取/创建实例的方式
你可以通过TIA Openness API的层级访问获取实例,或者调用官方提供的创建方法生成新的子系统块组:
1. 获取已有系统块根组实例
示例代码如下(需提前匹配版本引用Siemens.Engineering相关程序集):
using Siemens.Engineering; using Siemens.Engineering.SW; using Siemens.Engineering.SW.Blocks; // 连接TIA Portal实例并打开目标项目 using TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithoutUserInterface); using Project project = tiaPortal.Projects.Open(@"C:\你的项目路径\项目名.ap17"); // 遍历获取目标PLC的软件对象 PlcSoftware targetPlc = project.Devices .SelectMany(device => device.DeviceItems) .OfType<PlcSoftware>() .First(plc => plc.Name == "你的PLC名称"); // 获取系统块根组实例 PlcSystemBlockGroup rootSystemGroup = targetPlc.BlockGroup.SystemBlockGroup; // 赋值给object类型变量即可得到你截图中的调试显示效果 object current = rootSystemGroup;
2. 创建新的子系统块组
如果需要生成新的自定义系统块组,调用父组的创建方法即可:
// 在根系统块组下新建名为"CustomGroup"的子系统块组 PlcSystemBlockGroup newGroup = rootSystemGroup.Groups.Create("CustomGroup");
生成的newGroup完全符合你要求的调试显示规则。
内容的提问来源于stack exchange,提问作者james_66
相关产品推荐
相关产品推荐

