三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

4. HSMS通信标准

HSMS (High-Speed SECS Message Services)[8]定义了使用 TCP/IP 作为物理传输媒质时的通信接口。HSMS 可以作为 SECS-I 以及其他一些高级通信环境的替代。HSMS 又包括了两个子标准,分别是 HSMS-SS (High-Speed SECS Message Service Single Selected Mode)和 HSMS-GS (High-Speed SECS Message Service General Session)。HSMS-SS 对母标准中的操作进行了简化,以便于实际应用。HSMS-GS 定义了使用 HSMS 访问多个子实体的操作。

4.1 TCP/IP 的使用

HSMS可以使用任何标准 TCP/IP API 进行开发,比如 BSD socket、TLI等。使用标准的 TCP/IP 寻址,默认的端口号为 5000。建立连接的过程如下图所示:

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

HSMS 把通信实体分为被动模式和主动模式两种:

  • 被动模式:处于被动模式的实体侦听线路,接收主动模式的实体的连接请求
  • 主动模式:处于主动模式的实体发起连接请求

被动模式下建立连接的步骤包括:

(1) 获得一个连接端点,在指定的端口进行侦听

(2) 侦听到远程端点发送的连接请求

(3) 接收连接请求,发送确认

主动模式下建立连接的步骤包括:

(1) 获得一个连接端点

(2) 向指定端口号的远程端点发起连接

(3) 等待远程端点接收连接并返回确认

4.2 HSMS的控制消息

¨ Select.req/Select.rsp

¤ Not Selected 状态转化为 Selected 状态所使用的消息 (Active Entity 发送Select.req)

¨ Deselect.req/Deselect.rsp

¤ 在双方协议终止通信时使用. 由想要通信终止的一端发送Deselect.req.

¨ Linktest.req/Linktest.rsp

¤ 连接状态的确认和维护确认, 如果没有应答则转换为Not Connected 状态.

¨ Separate.req

¤ 单方面通知通信终止时使用.

¨ Reject.req

¤ 收到无效消息时发送

4.3 HSMS的状态转换

4.3.1 状态图

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

HSMS State Diagram

图中各状态说明如下:

  • Not Connected 状态:实体开始侦听,但是未建立任何 TCP/IP 连接或者之前建立的 TCP/IP 连接已经断开;
  • Connected 状态:已经建立一个 TCP/IP 连接,包括 Not Selected 和 Selected两个子状态;
  • Not Selected 状态:Connected 的子状态,表示没有创建 HSMS 会话或之前的会话已经结束;
  • Selected 状态:Connected 的子状态,表示至少创建了一个 HSMS 会话。

4.3.2 被动模式连接的状态转换

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

4.3.3 主动模式连接的状态转换

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

4.4 HSMS的消息格式

4.4.1 一般消息格式

HSMS 消息以字节的方式作为单个的流进行传输,其格式如图所示:

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

HSMS Message Format

  • Message Length:一个 4 字节无符号整数,表示其后 Message Header 加上 Message Text 总的字节数,其最小值为十字节。
  • Message Header:消息头长度为十字节,格式如下图所示:
三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

HSMS Message Header Structure

其中各项说明如下:

1) Session ID:十六比特无符号整数,最高位必须为零,剩下十五比特用于唯一标识一台设备。

2) Header Byte 2:对于不同类型的消息取值不同。

3) Header Byte 3:对于不同类型的消息取值不同。

4) PType:表示类型(Presentation Type)为八比特无符号整数,用于枚举表示层消息类型,即消息头和消息内容是以何种方式编码的,PType 取值如下表所示:

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

PType Values

5) SType:会话类型(Session Type)为八比特无符号整数,其取值类型如下表所示:

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

SType Values

6) System Bytes:四字节无符号整数,用于唯一标识一次消息交互。

4.4.2 控制消息格式

HSMS 中的控制消息包括:

(1) Select.req:SType=1,PType=0

(2) Select.rsp:SType=2,PType=0,Header Byte 3 为 SelectStatus 项

(3) Linktest.req:SType=5,Ptype=0,Session ID=0xFFFF

(4) Linktest.rsp:SType=6,Ptype=0,Session ID=0xFFFF

(5) Separate.req:SType=9,PType=0

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

4.5 计时器

4.5.1 回复超时 T3

回复超时 T3 (T3 reply timeout)表示一个实体等待回复消息的最长时间,如果T3 计时器超时则取消这次会话但不断开 TCP/IP 连接,如果这个实体是设备,则向主机发送 SECS-II S9F9 消息。

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

4.5.2 连接间隔时间 T5

连接间隔时间 T5 (T5 connect separate timeout)表示两个连接请求之间的时间间隔。过于频繁的向一个未准备好连接的实体发起连接请求,会加重 TCP/IP 的负荷。因此,当一个主动模式实体发起的连接操作终止后(不论是成功结束还是被远端实体拒绝),该实体必须等待 T5 计时器超时后发起下一次连接请求。

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

4.5.3 控制会话超时 T6

控制会话超时 T6 (T6 control transaction timeout)表示一个控制会话所能开启的最长时间,超过该时间就认为这次通信失败。当发送.req 控制消失时 T6计时器开启,若在 T6 超时之前收到相应的.rsp 消息则计时器关闭,否则控制消息的发起者将关闭这次会话,并认为出现一个通信故障。

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

4.5.4 Not Select 状态超时 T7

Not Select 状态超时 T7 (T7 NOT SELECT timeout)表示当建立了 TCP/IP 连接之后通信处于 Not Select 状态的最长时间,通信必须在该时间完成 select 操作,否则将会断开 TCP/IP 连接。

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2

4.5.5 网络字符超时 T8

网络字符超时 T8 (T8 network intercharacter timeout)表示成功接收到单个HSMS 消息的字符之间的最大时间间隔。鉴于 TCP/IP 是面向流的通信协议,因此一个 HSMS 通信消息可能被分为若干个 TCP/IP 消息进行传输,若 T8 计时器超时则认为这次传输失败。

三. SECS/GEM封装库RapidSecs开发手记-SECS/GEM基础知识-2


分享到:


相關文章: