跳到主要内容

参考案例

Darra Profinet Slave 是 PROFINET IO Device。接到西门子等 IO 控制器之后,应用侧要做的是:

  1. 把现场故障做成通道诊断,出现在控制器诊断缓冲 / 诊断 OB
  2. 把需要立刻处理的事件做成过程报警
  3. 把现场量报告给控制器,并消费控制器下发的输出

C# 为基准,6 语言语义一致。本机观测与排障走 Web API。过程数据的地址与结构体细节见 C# SDK,这里不把它当主叙事。

控制器还在周期交换时不要停止从站。

设备诊断上控制器

通道诊断是西门子工程师在 TIA 里看设备的方式。应用在现场检出故障后添加一条标准诊断;恢复后再移除。控制器侧会收到诊断报警,并在诊断视图里看到槽位 / 通道 / 严重度。

using System;
using Darra.PnS;

using (DarraPnS device = DarraPnS.Connect())
{
if (device.Start() != PnSErrorCode.Success)
{
Console.WriteLine(device.LastServiceError);
return;
}

if (!device.Connected)
{
Console.WriteLine("尚未与控制器建立周期交换: " + device.ErrorMessage);
return;
}

// 添加通道诊断 → 控制器诊断缓冲
device.DiagStdAdd(
slot: 1,
subslot: 1,
ch: 0,
chBits: 8,
severity: 0, // 0 故障 / 1 需要维护 / 2 要求维护 / 3 合格化
chErrorType: 0x0001); // 通道错误类型,与 GSDML 声明一致

// 读本机活动报警(与 GUI / Web API 同源)
Console.WriteLine("活动报警: " + device.AlarmCount);
foreach (PnSAlarmItem item in device.Alarms)
Console.WriteLine(item.Id + " " + item.Severity);

// 故障消失:清除诊断 → 控制器侧对应条目消失
device.DiagStdRemove(slot: 1, subslot: 1, ch: 0, chErrorType: 0x0001);
}
步骤说明
启动Start() 后读 Connected,确认已与 IO 控制器建立周期交换
上送诊断DiagStdAdd:槽位 / 子槽 / 通道 / 严重度 / 通道错误类型
观测Alarms / AlarmCount;也可用 Web API GET /api/alarmsGET /api/diag
恢复DiagStdRemove,同一组定位参数必须与添加时一致

诊断更新不要快过 1 HzDiagStdUpdate)。模块插拔时会自动发插拔报警,应用不用自己造。

过程报警

过程报警是设备主动通知控制器的高优先级消息,适合超限、急停、工艺步失败这类「现在就要处理」的事件。上一帧尚未被控制器确认时不要连发。

using Darra.PnS;

using (DarraPnS device = DarraPnS.Connect())
{
if (device.Start() != PnSErrorCode.Success)
return;

// usi = 0:无负载信号报警
device.SendProcessAlarm(slot: 1, subslot: 1, usi: 0);

// 确认本机活动报警(ID 来自 Alarms)
foreach (PnSAlarmItem item in device.Alarms)
device.AcknowledgeAlarm(item.Id);
}

同一套能力也可走 Web API:POST /api/alarmPOST /api/alarms/ack。完整端点见 Web API

过程数据

设备把现场量报告给控制器(输入面),并读取控制器下发的命令(输出面)。输出面只读,不要在从站里改控制器输出。

using Darra.PnS;

using (DarraPnS device = DarraPnS.Connect())
{
if (device.Start() != PnSErrorCode.Success)
return;

short measured = 1234;
// 报告现场量(设备 → 控制器)
device.WriteInt16("IW2", measured);

// 读取控制器下发的命令(控制器 → 设备)
short command;
device.ReadInt16("QW0", out command);
}

地址与结构体映射见 C# SDK。其它语言同一组能力见 SDK 文档下拉。

应用场景

场景控制器侧看到什么应用侧做什么
检测工位 / 包装机通道诊断出现在 TIA 诊断视图,对应诊断 OB 被调用传感器故障、气缸不到位 → DiagStdAdd;恢复 → DiagStdRemove
料仓 / 液位过程报警进控制器报警队列超限、泄漏 → SendProcessAlarm
称重 / 计数 / 状态字过程映像里的输入字随周期更新WriteInt16 等报告现场量;ReadInt16 消费控制器命令
现场维护I&M 标识与 TIA 设备信息一致ImData,或 GET /api/im

硬件侧:一台跑 Darra Profinet Slave 的 Windows 工控机,一块有线网卡作设备口,对端是西门子 IO 控制器。站名、IP、槽位在 GUI 里配好,导出 GSDML 给 TIA,导出运行配置给服务。步骤见 快速开始TIA Portal 导入指南

起步入口

资料说明
快速开始安装 → 启服务 → 导出 GSDML → TIA 导入 → 跑通
TIA Portal 导入指南GSD 安装、站名、常见警告
C# SDK连接、运行态、过程数据、诊断与报警
Web API本机状态 / 诊断 / 报警 / I&M
常见问题联机、配置、诊断不上控制器
下载安装包与 SDK