Secs/Gem第十一讲(基于secs4net项目的ChatGpt介绍)
那我们继续——
第十一讲:GEM 控制指令大揭秘——设备上线、下线、时间同步、状态请求等控制型报文详解
关键词:S1F13/S1F14、S1F1/S1F2、S2F17/S2F18、Remote Command、时间同步、状态检查、Online/Offline 切换
本讲目标
你将掌握:
- 如何让设备“上线”或“下线”?
- 如何请求设备当前状态?
- 如何同步设备时间?
- 所谓的“Remote Command”机制是啥?
- 设备在不同控制状态下有什么差异?
这些内容是你从“信息接收者”转向“控制中心”的关键节点。
一、主机对设备可以下发哪些“控制指令”?
GEM 的控制类指令大致可以分为三类:
类型 | 报文 | 功能 |
---|---|---|
状态指令 | S1F1/S1F2 | 请求设备当前控制状态 |
控制上线 | S1F13 | 请求设备 Online |
控制下线 | S1F15 | 请求设备 Offline |
时间同步 | S2F31 | 设置设备时间 |
时间获取 | S2F17/S2F18 | 获取设备时间 |
这些都属于标准的 SECS/GEM 报文。
二、S1F1 / S1F2:获取设备控制状态
最基础的问候:
S1F1 // Are You There?
S1F2 // I'm here!
设备上线后,主机通常会发一次 S1F1,设备回应 S1F2。
这既是连通性测试,也是第一次“握手”。
三、S1F13 / S1F14:设备上线(Online)
主机发送 S1F13,请求设备进入“Remote”模式(远程控制)。
var s1f13 = new SecsMessage(1, 13, "S1F13", true);
await gem.SendAsync(s1f13);
设备收到后会回应:
S1F14
- HCACK(回应码):0 = OK
1 = Equipment Busy
2 = Already On-Line
5 = Rejected你需要判断 HCACK 来确认设备是否接受上线指令。
四、S1F15 / S1F16:设备下线(Offline)
与上线对应,用于切换设备为“Local”模式。
S1F15 → 请求 Offline
S1F16 → 回应 HCACK
一般当你要做维护、校准、人工操作时,会让设备 Offline。
五、S2F17 / S2F18:读取设备时间
同步时间是很多系统的基础需求。
// 主机发 S2F17
var msg = new SecsMessage(2, 17, "S2F17", true);
var reply = await gem.SendAsync(msg);// 设备回 S2F18,返回当前时间字符串
string eqTime = reply.SecsItem.Value;
六、S2F31:设置设备时间
主机可以用这个指令,把自己的系统时间设置给设备:
string now = DateTime.Now.ToString("yyMMddHHmmss");
var msg = new SecsMessage(2, 31, "S2F31", true, ASCII(now));
await gem.SendAsync(msg);
设备会接受并同步。
这个功能在多设备协同时很重要。
七、Remote Command:GEM 的远程控制机制
除了上线/下线,GEM 允许主机对设备执行“命令”操作,比如:
- START LOT
- STOP LOT
- RESET ALARM
这些被称为 Remote Command,格式如下:
主机发送:S2F41
S2F41
- RCMD = 命令名(如 "START")
- Parameters = [ (名称, 值), ... ]
var s2f41 = new SecsMessage(2, 41, "S2F41", true,List(ASCII("START_LOT"),List(List(ASCII("LOT_ID"), ASCII("A001")),List(ASCII("PORT_ID"), U1(1))))
);
设备回应:S2F42
S2F42
- HCACK(处理结果)0 = OK
1 = Cannot Perform Now
2 = Parameter Error
3 = Unknown Command
你可以根据回应判断命令是否成功执行。
八、设备控制状态的含义(Online / Offline / Local / Remote)
状态 | 描述 |
---|---|
Online Remote | 主机控制状态,设备执行主机指令 |
Online Local | 操作员控制状态,设备只接受本地操作 |
Offline | 设备脱机,不接受任何控制指令 |
你的系统中要根据当前设备状态,决定是否允许下发命令。
第十一讲 · 小结
报文 | 功能 |
---|---|
S1F1/S1F2 | 设备握手 |
S1F13/S1F14 | 请求设备上线 |
S1F15/S1F16 | 请求设备下线 |
S2F17/S2F18 | 获取设备时间 |
S2F31 | 设置设备时间 |
S2F41/S2F42 | 远程命令调用 |
你已经掌握了如何:
- 控制设备上线/下线
- 与设备同步时间
- 向设备发送指令并处理回应
这些能力让你的 EAP 不再只是“被动听众”,而是具备“主控权”的核心角色。
下一讲预告:
第十二讲:完整事件通知流程详解——从 CEID 触发,到主机接收,再到业务处理的全链路剖析
设备发生一个事件,主机是怎么一步步收到数据的?下一讲将从时序角度剖析“事件通知全流程”。
说声“继续”,我们接着来。