好的,那我们现在进入:
第七讲:掉电重连后,为什么设备不再上报事件?——持久化与自动恢复的系统设计
关键词:掉电恢复、状态重建、初始化流程、SecsMessage 缓存机制、自动重连、事件再注册
本讲目标
你将理解:
- 主机掉电或软件重启后,设备为啥变得“沉默”了
- 为什么每次都要重新发 S2F33/S2F35/S2F37?
- 如何设计一个“具备恢复能力”的主机系统?
- 在 SECS4NET 中如何优雅处理设备重连与再注册流程?
这将是你迈向“系统级开发”的关键一步。
一、掉电后的“设备失忆”
很多设备的行为非常现实:
“我不认识你了,你要重新告诉我一切。”
所以你之前设置的:
- CEID ↔ RPTID 映射(S2F33)
- RPTID ↔ VID 映射(S2F35)
- 启用了哪些事件(S2F37)
通通 不保留,除非设备支持“非易失性内存存储”(NVM),而这在中低端设备里并不常见。
所以:
主机必须在每次上线时重新建立这些状态。
这一步通常叫做:
“Initialization Sequence”(初始化序列)
二、一个标准的初始化流程(EAP Init Sequence)
下面是你上线后需要干的事情:
-
建立连接(S1F13 / S1F14)
-
判断通信状态(S1F1 / S1F2)
-
注册事件与变量
- S2F33 定义 Report
- S2F35 绑定事件
- S2F37 启用事件
-
设置设备时间(S2F31)
-
请求设备状态(S1F3 / S1F5)
-
注册在线状态(S1F17)
-
订阅 Alarm(S5F3 / S5F5)
-
触发设备上报初始状态(S6F11 或 S1F1响应)
这个流程要么你在启动时自动做一遍,要么写在“设备上线事件”的回调里。
三、SECS4NET 中的自动重连机制
SECS4NET 默认有自动重连机制,如果设备断线后重新上线,你可以注册 ConnectionChanged 事件来监听:
gem.ConnectionChanged += (s, e) =>
{
if (e.IsConnected

最低0.47元/天 解锁文章
1052

被折叠的 条评论
为什么被折叠?



