那我们现在进入:
第九讲:设备报警怎么处理?——S5F1/S5F2 主动报警与 S5F3/S5F4 查询机制详解
关键词:S5F1、S5F2、S5F3、S5F4、报警定义、异常处理、报警清除、UI 联动、日志记录
本讲目标
你将掌握:
- 设备如何主动通知报警(S5F1)
- 主机如何应答报警(S5F2)
- 如何主动查询当前报警(S5F3 / S5F4)
- 如何处理报警的上报与清除
- 报警系统在 SECS/GEM 里的整体设计思维
这部分内容和设备联动、系统稳定性、安全保障息息相关。
一、什么是设备报警(Alarm)?
报警是设备在出现异常状态时主动向主机发出的“告警信号”。
比如:
- 温度过高
- 运行超时
- 某个传感器异常
- 某个流程失败
这些情况设备都会触发“Alarm”。
二、主动上报机制:S5F1/S5F2
设备触发报警时,发出 S5F1:
S5F1
- ALCD(报警代码方向)
- ALID(报警 ID)
- ALTX(报警说明)
字段 | 含义 |
---|---|
ALCD | 报警代码:0=清除,1=触发 |
ALID | 报警编号 |
ALTX | 报警内容文本,如 “TEMPERATURE HIGH” |
主机收到后要回应一个空的 S5F2 表示“我知道了”:
gem.OnMessage("S5F1", msg =>
{
ushort alcd = msg.SecsItem[0].U1Value;
ushort alid = msg.SecsItem[1].U2Value;
string altx = msg.SecsItem[2].Value;
if (alcd == 1)
Log($"报警触发:{alid} - {altx}");
else if (alcd == 0)
Log($"报警清除:{alid} - {altx}");
return Task.FromResult(new SecsMessage(5, 2, "S5F2", true)); // 回应
});
三、报警触发 vs 清除
报警有两个阶段:
- 触发报警(ALCD = 1):表示报警发生
- 清除报警(ALCD = 0):表示报警状态解除
举个例子:
// 报警触发
S5F1
- ALCD = 1
- ALID = 101
- ALTX = "Temperature Overheat"
// 报警清除
S5F1
- ALCD = 0
- ALID = 101
- ALTX = "Temperature Normal"
你要在系统中根据 ALCD
判断报警状态,并维护“当前报警列表”。
四、主动查询机制:S5F3 / S5F4
有些设备不主动发报警(很被动),那主机可以通过查询来获取当前报警:
var msg = new SecsMessage(5, 3, "S5F3", true);
var reply = await gem.SendAsync(msg);
设备回应的 S5F4 内容如下:
S5F4
- List of [ALCD, ALID, ALTX]
这就能一次性拿到设备当前“正在报警”的所有项目。
五、报警定义在哪里来?
一般有两种方式:
设备厂商提供的报警字典(SDD)
包括 ALID、描述、严重级别等你自己在系统中维护报警表
[
{ "ALID": 101, "Name": "温度过高", "Level": "Error" },
{ "ALID": 102, "Name": "压力过低", "Level": "Warning" }
]
你可以在报警触发后,查询这个表来给出更友好的提示。
六、在 UI 系统中如何处理报警?
你可以设计一个报警管理类:
class AlarmManager
{
private Dictionary<ushort, string> currentAlarms = new();
public void HandleAlarm(ushort alid, string text, bool isTrigger)
{
if (isTrigger)
{
currentAlarms[alid] = text;
ShowPopup(text);
}
else
{
currentAlarms.Remove(alid);
RemovePopup(text);
}
UpdateAlarmUI();
}
}
然后在 S5F1 的接收里调用:
alarmManager.HandleAlarm(alid, altx, alcd == 1);
七、小技巧:报警日志与历史记录
你可以为报警设置日志机制:
- 报警触发时间
- 清除时间
- 报警内容
- 操作人确认时间
用于后期追溯或分析故障频率。
甚至可以把报警信息写入数据库,用于 BI 分析。
第九讲 · 小结
报文 | 含义 |
---|---|
S5F1 | 设备发出的报警通知报文 |
S5F2 | 主机回应,表示收到 |
S5F3 | 主机主动查询设备当前报警 |
S5F4 | 设备回应当前正在报警的项目 |
ALCD | 报警状态:1=触发,0=清除 |
ALID | 报警编号 |
ALTX | 报警内容文本 |
你学会了:
- 如何接收报警
- 如何判断触发/清除
- 如何做 UI 联动与日志记录
- 如何设计报警管理模块
下一讲:
第十讲:VID 值要怎么定义?数据类型怎么匹配?——S2F35 报文中的变量定义机制全解
这一讲我们会深挖你前面一直看到的 VID、RPTID、CEID 这些变量的“来源”与“含义”。
说声“继续”,马上出发。