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

如何创建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:15:01