HSMS
1. 目的与背景
- 替代方案:作为SEMI E4(SECS-I)和E13(SECS消息服务)的替代协议,适用于需要更高通信速度或复杂拓扑的场景,且优先使用TCP/IP而非OSI协议。
- 互操作性:允许不同制造商的设备无需预先了解彼此即可互联。
2. 核心功能
- 通信流程:
- 建立TCP/IP连接(主动/被动模式)。
- HSMS会话初始化(通过Select/Select.rsp消息)。
- 数据交换(基于SECS-II编码的消息)。
- 会话终止(Deselect/Separate消息)。
- 断开TCP/IP连接。
- 附加诊断功能:Linktest(连接测试)和Reject(拒绝无效消息)。
3. 状态机模型
- NOT CONNECTED:未建立TCP连接。
- CONNECTED:
- NOT SELECTED:TCP已连接但未建立HSMS会话。
- SELECTED:HSMS会话激活,可交换数据。
4. 消息格式
- 消息结构:
- 消息长度(4字节):头部+文本的总字节数。
- 头部(10字节):包含会话ID、消息类型(SType)、协议类型(PType)等。
- 文本(可选):SECS-II格式数据(PType=0时)。
- 关键字段:
- SType:标识消息类型(如数据消息、Select请求/响应、Linktest等)。
- PType:定义消息编码方式(0为SECS-II,其他值保留给子标准)。
- System Bytes:唯一标识事务(用于匹配请求与响应)。
5. 定时器与参数
- T3(回复超时):等待回复的最长时间(默认45秒)。
- T5(连接间隔超时):重连前的最小间隔(默认10秒)。
- T6(控制事务超时):控制消息(如Select)的响应超时(默认5秒)。
- T7(未选择超时):TCP连接未进入SELECTED状态的最大时间(默认10秒)。
- T8(字符间超时):接收消息时字节间的最大间隔(默认5秒)。
6. 网络与连接管理
- TCP/IP模式:
- 主动模式:本地实体发起连接。
- 被动模式:监听并接受远程连接。
- 交替模式:动态切换主动/被动模式以增强灵活性。
- 多连接处理:支持同一端口的多连接,但需独立维护状态。
7. 兼容性与扩展
- 物理层:不限制物理介质(如以太网、令牌环)。
- 子标准扩展:允许通过子标准定义新的PType/SType值及消息格式。
- 用户扩展:仅限厂商内部使用,禁止跨厂商非标准扩展。
- 注意事项:避免快速重连冲突、版权与专利风险声明。
8. 实用扩展
Linktest Procedure(链路检测流程)
| 项目 | 内容 |
|---|---|
| 目的 | 在不发送用户数据的情况下,快速验证 TCP/IP 链路以及 HSMS 会话层 的完整性与双向可达性。 |
| 触发时机 | 只要本地实体处于 CONNECTED 状态(无论 NOT SELECTED 还是 SELECTED 子状态),即可随时发起;常被作为“心跳”机制周期性执行。 |
| 消息对 | Linktest.req(SType = 5)Linktest.rsp(SType = 6) |
| 事务类型 | 一问一答的 confirmed service;由 T6 定时器(控制事务超时) 监管。 |
| 报文格式 | • 消息长度固定 10 字节(仅 Header,无 Text)• Header 中 SessionID 固定填 0xFFFF(表示与具体会话无关) |
| 异常处理 | T6 超时未收到 rsp → 主动断开 TCP/IP 连接,回到 NOT CONNECTED 状态。 |
| 典型用法 | • 周期性心跳(如每 30 秒一次)。• 在长时间无数据交互时防止 NAT/防火墙会话老化。 |
Select Procedure(会话建立流程)
| 项目 | 内容 |
|---|---|
| 目的 | 将一条已建立的 TCP/IP 连接 从 NOT SELECTED 子状态推进到 SELECTED 子状态,从而允许后续的数据消息(SECS-II 或其他 PType)收发。 |
| 触发时机 | TCP/IP 连接建立后(CONNECTED-NOT SELECTED),任一端均可主动发起。 |
| 消息对 | Select.req(SType = 1)Select.rsp(SType = 2) |
| 事务类型 | 一问一答的 confirmed service;同样受 T6 定时器 监管。 |
| 报文格式 | • 消息长度固定 10 字节(仅 Header)• SessionID:由子标准或本地策略指定,用于把后续数据消息与本次会话绑定。• Select.rsp 的 Header Byte 3 为 SelectStatus 码:0 = 成功;非 0 = 失败原因(见下表) |
| SelectStatus 码 | 0:成功1:通信已激活(已处于 SELECTED)2:连接未就绪3:连接已耗尽(只能单连接的设备已占用)4–127:子标准保留128–255:本地自定义原因 |
| 并发场景 | 两端同时发起 Select 且 SessionID 相同 → 双方各自回 Select.rsp(Status = 0),逻辑上形成 双边会话,不会冲突。 |
| 与后续数据的关系 | SessionID 将出现在所有数据消息的 Header 中,用于路由与并发会话管理。 |
对比
| 维度 | Linktest Procedure | Select Procedure |
|---|---|---|
| 核心作用 | 检测链路/心跳 | 建立 HSMS 会话 |
| 触发状态 | CONNECTED(任意子状态) | CONNECTED-NOT SELECTED |
| 成功后状态变化 | 无状态迁移 | NOT SELECTED → SELECTED |
| 消息长度 | 10 字节 | 10 字节 |
| SessionID | 0xFFFF(全局) | 由子标准指定 |
| 失败处理 | 断开 TCP | 断开 TCP(或保持 NOT SELECTED) |
有任何问题或疑问,请发送邮件到--->admin@secs-ii.net
- 发现错误或表达不清希望修正
- 内容不健全需要扩展
- 有疑问希望解答