06、HSMS协议介绍

本章的内容主要参考了 SECS半导体设备通讯-2 HSMS通信标准 ,外加上自己看的一些其他的文档。也加上了一些自己的理解,特此记录。若有侵权,请联系删除,谢谢。

再次特别感谢 SECS半导体设备通讯-2 HSMS通信标准 的作者。

1、HSMS通信标准概述

HSMS 定义了使用 TCP/IP 作为物理传输媒质时的通信接口。

HSMS 使用TCP/IP流支持,提供了可靠的双向同步传输,可以用来作为SECS-I通信以及其他更高级的通信环境的替代。

1.1 HSMS连接状态图

HSMS状态机如下图所示,此图中描述的行为定义了HSMS的基本要求。

状态图说明:

  • NOT CONNECTED:该实体已准备好侦听或启动TCP/IP连接,但尚未建立任何连接,或所有以前建立的TCP/IP连接都已终止;
  • CONNECTED:已建立了一个TCP/IP连接。此状态有两个子状态,NOT SELECTED 和 SELECTED;
  • NOT SELECTED:未建立HSMS会话或任何先前建立的HSMS会话已结束;
  • SELECTED:至少建立了一个HSMS会话,这是HSMS的通常操作状态:数据消息可以在此状态下进行交换。

状态的转换:

2、使用TCP/IP

TCP应用程序接口(API)的规范不在HSMS的范围之内。

HSMS可以使用任何标准 TCP/IP API 进行开发,比如 BSD Socket、TLI 等。使用标准的 TCP/IP 寻址,默认的端口号为 5000

2.1 TCP/IP网络寻址约定

IP Address:连接到局域网(LAN)的每个物理TCP/IP连接都必须具有唯一的IP地址。IP地址必须在安装时进行可分配,并且HSMS的实现不能选择一个固定的IP地址。一个典型的IP地址是192.9.200.1。

TCP Port Numbers:HSMS的实现应该允许将TCP端口配置为所使用的TCP/IP 实现的全部范围。一个典型的TCP端口号为5000。

上面这段话的意思是 HSMS 可以使用的端口号并没有什么特别的要求,TCP/IP 可以使用的都可以。

2.2 建立TCP/IP连接

HSMS将通信实体分为两种,Passive Mode(被动模式)和 Active Mode(主动模式)

  • PassiveMode :处于被动模式的本地实体侦听并接受由处于主动模式的远程实体发起的连接。
  • ActiveMode :由处于主动模式的本地实体发起连接

上面这两句话是不是有点绕,简单理解就是 Passive Mode 是服务端,Active Mode 是客户端。服务端监听端口并接受请求,客户端主动发送请i去。

被动模式建立连接过程:

  1. 获取一个连接端点,并将其绑定到指定的的端口。
  2. 从端口监听从远程实体发送的连接请求。
  3. 在收到连接请求后,确认它并表示接受该连接。

其实上面就是使用 TCP 协议,编写服务端那一套,依次执行bind(), listen(), accept()方法,然后坐等客户端的连接请求。

主动模式建立连接过程:

  1. 获取一个连接端点。
  2. 向远程实体(被动模式)所指定的端口发起连接。
  3. 等待远程实体确认收到并接受连接请求。

2.3 终止TCP/IP连接

连接终止是连接建立的逻辑反转。从本地实体的角度来看,TCP/IP连接可能随时断开。但是,HSMS只允许在连接处于连接状态的未选择子状态时终止连接。

最后一句话怎么理解?还记得上面说的HSMS连接状态图吗,这句话的意思是只有处于 NOT SELECTED 这个状态时才可以终止连接。那处于 SLECTED 的状态不可以终止连接吗,我的意思是可以,但是需要先进入到 NOT SELECTED 状态,再终止连接。

任何一个实体都可以启动终止连接。实体进入Not Connected状态,表示HSMS通信结束。

3、HSMS消息交换过程

HSMS定义了跨TCP/IP连接的实体之间的所有消息交换过程。

一旦连接建立,这两个实体间就建立起HSMS通信。然后,数据消息可以在任何时候以任意一个方向进行交换。

当实体希望结束HSMS通信时,将使用 Deselcet 或 Separate procedure 来结束HSMS通信。

3.1 发送和接收HSMS消息

所有的HSMS过程都涉及到HSMS消息的交换。这些消息以 TCP/IP 流的形式使用先前建立的TCP/IP连接进行发送和接收。

3.2 消息交换过程

消息交换过程分为:

  • Select Procedure
  • Data Procedure
  • Deselect Procedure
  • Linktest Procedure
  • Separate Procedure
  • Reject Procedure

3.3 建立 Select Procedure

Select Procedure 用于使用Select.req和Select.rsp消息在TCP/IP连接上建立HSMS通信

Select.req和Select.rsp消息

实体由 Not Selected 状态转换为 Selected 状态所使用的消息 (Active Entity 发送Select.req);

Initiator的发起过程:

1. Initiator将Select.req消息发送给Responding Entity;
2. 如果Initiator接收到一个Select Status为0的 Select.rsp,则Select Procedure过程成功完成,实体由 Not Selected 状态转化为 Selected 状态;
3. 如果Initiator接收到Select Status不为0的Select.rsp,则Select Procedure失败,实体没有状态转换。

Responding Entity的响应过程:

1. 响应实体会收到Select.req;
2. 如果响应实体能够转换为Selected ,它将发送一个Select Status为0的Select.rsp;
3. 如果响应实体不能够转换为Selected,它将发送一个Select Status不为0的Select.rsp;

同时进行的Select Procedure:

如果附加标准没有限制选择使用哪种方式,则有可能两个实体同时启动具有相同控制标识的Select Procedure。在这种情况下,每个实体将通过使用Select.rsp响应来接受其他实体的选择请求。

一次建立连接的通信交互流程:

3.4 Data Procedure

只要连接处于 Selected 状态,任何一个实体都可以发起HSMS数据消息。当不处于 Selected 状态时,接收数据消息将导致拒绝 Reject Procedure

数据消息可以进一步定义为消息事务的一部分,即Primary Message 或 Reply Message。

在消息事务中,事务的发起者向响应实体发送一条Primary Message。如果Primary Message指示需要响应,则响应实体将发送 Reply Message 响应。

下图为两种类型的消息事务:需要回复的消息事务 和 不需要回复的消息事务

这些事务的具体过程由应用层确定,并服从其他标准(例如,使用SECS-II编码消息的GEM设备的E5和E30)。

适用的上层标准由消息类型来标识。该类型由HSMS定义的特定格式确定。HSMS消息的正常类型是SECS-II文本。

3.5 Deselect Procedure

Delesect Procedure 用于在断开TCP/IP连接之前,为一个实体提供一个优雅的HSMS通信终止

HSMS要求使用该Procedure时连接处于Selected状态

Deselect.req/Deselect.rsp:

在双方协议终止通信时使用,发起通信终止的一端发送Deselect.req

Initiator的发起过程:

1. Initiator将Deselect.req消息发送给Responding Entity;
2. 如果Initiator接收到一个Deselect Status为0的Delect.rsp,则Deselect Procedure过程成功完成,实体由 Selected 状态转化为 Not Selected 状态;
3. 如果Initiator接收到Deselect Status不为0的Deselect.rsp,则Deselect Procedure失败,实体没有状态转换。
4. 如果在收到Deselect .rsp之前T6超时了,则认为发生了通信故障。

Responding Entity的响应过程:

1. 响应实体会收到Deselect.req;
2. 如果响应实体处于Selected状态且允许Deselect ,它将发送一个Deselect Status为0的Deselect.rsp,Delesect Procedure成功,发生状态更改;
3. 如果响应实体不允许Deselect,或者因为它没有处于Selected状态,或者因为本地条件不允许Deselect,它将发送一个Deselect Status不为0的Deselect.rsp进行响应。Delesect Procedure失败,不发生状态更改。

同时进行的Deselect Procedure:

如果附加标准不限制选择使用的 Deselect,则有可能两个实体同时使用相同的控制Id启动 Deselect Procedures。在这种情况下,每个实体将通过使用despelect.rsp响应来接受另一个实体的取消选择请求。

3.6 Linktest Procedure

Linktest Procedure 用于确定TCP/IP和HSMS通信的操作完整性。它的使用在CONNECTED状态下随时有效。

Linktest.req/Linktest.rsp:

用于通信状态的确认, 如果没有应答则转换为Not Connected 状态;

Initiator的发起过程:

1. Initiator将Linktest.req消息发送给Responding Entity;
2. 如果Initiator在T6超时时间内接收到一个Linktest.rsp,Linktest Procedure成功完成;
3. 如果在T6超时时间内未收到Linktest.rsp,则视为通信故障。

Responding Entity的响应过程:

1. 响应实体接收到Linktest.req;
2. 响应实体发送Linktest.rsp。

3.7 Separate Procedure

Separate Producure 用于在断开TCP/IP连接之前突然终止实体的HSMS通信。

HSMS要求在使用分离时连接处于SELECTED状态。响应实体不发送响应,无论其本地状态如何,都需要终止通信。该过程如下:

Initiator Procedure:

发起者处于 selected 状态才可以发起 Separate.req 消息请求 响应实体。当发起者发送了 Separate.req 后,就意味着发起者的 Separate Procedure 已经完成,发起者进入 NOT SELECTED 状态。

Responding Entity Procedure:

1.响应实体接收到 Separate.req。
2.如果响应实体处于 SELECTED 状态,则 Separate Procedure 可以成功的处理。
3.如果响应实体不处于 SELECTED 状态,则  Separate.req 请求被忽略。

3.8 Reject Procedure

Reject Procedure 用于响应在不适当的上下文中收到的其他有效的HSMS消息。当使用 HSMS 通行时,支持 Reject Procedure 提供了有用的诊断信息在分布式应用程序的生产环境中

Initiator (Sender of Inappropriate Message) Procedure:

发起者发送了一个不恰当的消息给到响应实体,响应实体会 回复一个 Reject.req,当发起者收到 Reject.req 后,需要采取恰当的措施

Responding Entity Procedure:

响应实体收到了一个不恰当的消息,会回复一个  Reject.req消息给 发起者。

HSMS 要求,当响应实体处于 NOT SELECTED状态或者接收到未为该实体定义的 SType or PType 类型的消息时,需要当作 reject procedure 处理。附加标准可定义需要当作 reject procedure 的其他条件。一般来说,接收拒绝消息是配置不当的系统或软件编程错误的指示。

4、 HSMS消息格式

4.1 General Message Format 一般消息格式

4.1.1 Byte Structrue:

在HSMS中一个字节包含8位。字节中的位从第7位(MSB)编号到第0位(LSB)。

4.1.2 Message Format:

HSMS消息以单个连续字节流传输。

HSMS Message Format

Number of Bytes Description
4 Bytes Message Length. MSB First. Specifies the number of bytes in the Message Header plus the Message Text.
10 Bytes Message Header.
0--n Bytes Message Text. Format is further specified by PType field of message header.
大端模式和小端模式是指在多字节数据存储时,字节的顺序不同。在大端模式中,高位字节存储在低地址,低位字节存储在高地址;而在小端模式中,低位字节存储在低地址,高位字节存储在高地址。

MSB(Most Significant Bit)是指最高位的比特位,它与大、小端模式的关系是:在大端模式中,MSB位于第一个字节的最高位;而在小端模式中,MSB位于最后一个字节的最高位。

所以 HSMS 采用的是大端模式
4.1.3 Message Length:

Message Length是一个四字节的无符号整数值,它指定Message Header加上Message Text的字节长度。消息长度首先传输最高有效位(MSB),最后传输最低有效位(LSB)。

最小可能的消息长度为10(当只有Header时)。最大可能的消息长度跟具体实现有关。

4.1.4 Message Header:

MessageHeader是一个10字节的字段。头中的字节从第0字节(传输的第一个字节)编号到第9字节(传输的最后一个字节)。

HSMS Message Header

Bytes Description
0-1 Session ID (Device ID)
2 Header Byte 2
3 Header Byte 3
4 PType
5 SType
6-9 System Bytes

其中:

  • Session ID16位无符号整数,它占据了字节0和字节1(字节0是MSB,1是LSB)。用于标识通信实体的连接;

  • Header Byte 2:对于不同的HSMS消息,有不同的取值;

  • Header Byte 3:对于不同的HSMS消息,有不同的取值;

  • PType8位无符号整型,PType旨在作为一种枚举类型,定义表示层消息类型:MessageHeader和MessageText是如何编码的。只有 PType = 0,被HSMS定义为表示SECS-II消息编码。

PType:

Value Description
0 SECS-II Encoding
1-127 Reserved for subsidiary standards
128-255 Reserved, not used
  • SType8位无符号整数,是一种枚举类型,标识此消息是HSMS数据消息(值=0)还是HSMS控制消息。

SType:

Value Description
0 Data Message
1 Select.req
2 Select.rsp
3 Deselect.req
4 Deselect.rsp
5 Linktest.req
6 Linktest.rsp
7 Reject.req
8 (not used)
9 Separate.req
10 (not used)
11--127 Reserved for subsidiary standards
  • SystemBytes:四字节无符号整数,用于在一组开放的事务中唯一地标识一个事务,即唯一地标识一次消息交互。

4.2 HSMS Message Formats by Type 按类型划分的HSMS消息格式

这是一个HSMS消息的格式。每条消息都以一个 Message Length, 开始,然后是一个 Message Header,后面是 Message Text

Message Length : 是一个四字节的值,它定义了整个HSMS消息的长度 (Message Header + Message Text).

Message Header: 描述HSMS消息或过程。

Message Text: 是HSMS消息的数据部分。它只与数据程序相关。消息文本中的数据是在SECS-II消息协议部分中描述的已编码的SECS-II。

HSMS消息中的Header的解释取决于由SType字段的值定义的特定HSMS消息类型。

下表总结了定义的完整消息集,PType = 0(SECS-II消息格式)。

4.2.1 SType=0 DataMessage

使用SType=0来标识HSMS消息以发送DataMessage。

HSMS Message Length 最少为10(Message Header的长度)。

其 Byte 2 的组成如下图,它标识消息是否需要应答。

  • Byte 2W-Bit 指示Primary Message是否需要Reply Message,期望应答则设置为1,不期望应答则设置为0Reply Message应该始终将W位设置为0。Header Byte 2的低阶7位(第6-0位)包含该消息的SECS流。流是一个7位无符号整数值,它标识消息的一个主要话题,它的使用在SEMI E5(SECS-II)中定义。

  • Byte 3 : 包含该消息的SECS功能。功能是一个8位的无符号整数值,用于标识消息的一个次要话题(在流中),它的使用在SEMI E5(SECS-II)中定义。Byte3 的 bit 0 定义数据消息是"Primary"还是"Reply";值1表示"Primary",值0表示"Reply"。

  • PType: 为0 表示 SECS-II编码格式。

  • System Bytes :唯一地标识此消息事务,ReplyMessage 的 SystemBytes 应与其对应回复的Prymary Message的 SystemBytes 相同

4.2.2 SType=1 Select.req

Message Length为10,因为该消息仅有Header。

直接看图就知道各个字节应该怎么写。

4.2.2 SType=2 Select.rsp

Message Length为10,因为该消息仅有Header。

  • **其SessionID:**必须等于相应的Select.req中的SessionID。

  • **其Byte3:**表示SelectStatus。为0表示操作成功,非0表示失败。

4.2.3 SType=3 Deselect.req

Message Length为10,因为该消息仅有Header。

4.2.4 SType=4 Deselect.rsp

Message Length为10,因为该消息仅有Header。

  • **其Byte3:**表示DeselectStatus。为0表示操作成功,非0表示失败。
4.2.5 SType=5 Linktest.req

Message Length为10,因为该消息仅有Header。

  • **其SessionID:**为0xFFFF。
4.2.6 SType=6 Linktest.rsp

Message Length为10,因为该消息仅有Header。

  • **其SessionID:**为0xFFFF。

  • **其System Bytes:**与其对应回复的Linktest.req相同。

4.2.7 SType=7 Reject.req

用于响应接收到消息的接收方不支持或当时无效的任何有效的HSMS消息。

  • **其SessionID:**等于被拒绝的消息中的SessionID的值。

  • **其Byte2:**如果PType不受支持,它等于被拒绝的消息中的PType。否则,它将等于被拒绝的消息中的SType的值。

  • **其Bytes3:**其值为reason code,表示拒绝的原因。

ReasonCode

Value Description
1 SType Not Supported. A message was received whose SType value not defined in the HSMS standard or the particular subsidiary standard(s) supported by the entity. (不支持SType。收到一条消息,其SType值未在该实体支持的HSMS标准或特定附属标准中定义)。
2 PType Not Supported. As above, but for PType. (不支持PType。原因同上)
3 Transaction Not Open. A Response control message was received when there was no outstanding request message which corresponded to it. (事务未打开。当没有与之对应的未完成的请求消息时,就会收到一条响应控制消息。)
4 Entity Not Selected. A data message was received when not in the SELECTED state. (实体 处于 Not Selected。当未处于 SELECTED state 时,接收到一条数据消息。)
5-127 Reserved for subsidiary standard-specific reasons for reject. (保留为附属标准特定的拒绝原因。)
128-255 Reserved for local entity-specific reasons for reject.
4.2.8 SType=9 Separate.req

使用SType为9的HSMS消息用于立即终止HSMS通信。除了SType值外,它与Deselect.req消息相同。其目的是立即终止HSMS通信。

5、 特别说明

如果检测到通信故障,实体应终止TCP/IP连接。在连接终止时,可以尝试重新建立通信。

5.1 回复超时 T3

Reply Timeout:定义一个实体等待回复消息的最长时间,如果T3超时则取消这次会话事务但不断开 TCP/IP 连接。

5.2 连接间隔时间 T5

Connect Separation Time:定义两个连接请求之间的时间间隔。

频繁的向一个未准备好连接的实体发起连接请求,会加重 TCP/IP 的操作负荷。

因此,当一个主动模式实体发起的连接操作终止后(不论是成功结束还是被远端实体拒绝),该实体必须等待 T5 时间再后发起下一次连接请求。

5.3 控制事务超时 T6

Control Transactions Control Timeout:定义了一个控制事务所能保持开启的最长时间,超过该时间就认为这次通信失败。

许多控制消息是消息交换或事务过程的一部分:发送者发送<xx>.req,接收方接收<xx>.req并以<xx>.rsp作为响应。

从发送所需的请求消息到收到响应消息,事务一直被认为是打开的。

控制事务可能保持打开的时间取决于T6。

在发起控制事务时,本地实体应启动一个持续时间等于T6的计时器。如果事务在计时器到时之前被正确关闭,则应该取消计时器。

如果定时器在事务未结束之前就到时了,则该事务应被发起者视为已结束,并被视为HSMS通信失败。

5.4 未选择状态超时 T7

**Not Selected Timeout :**定义当建立了 TCP/IP 连接之后通信处于 Not Selected 状态的最长时间,通信必须在该时间完成 Selected Procedure,否则将会断开 TCP/IP 连接。

5.5 网络字符超时 T8

**Network Intercharacter Timeout:**定义成功接收到单个HSMS 消息的字符之间的最大时间间隔。

因为TCP/IP是面向流的通信,所以所有作为单个HSMS消息的一部分的字节可能在单独的TCP/IP消息中传输,一个 HSMS 通信消息可能被分为若干个 TCP/IP 消息进行传输。

若 T8 超时则认为这次传输失败。

6、 HSMS的实现要求

HSMS的实现必须提供以下参数设置。

所有参数的范围和分辨率必须至少如表中所示。所有参数必须存储方式为断电保留,如果电源故障或重新加载系统软件,应保留设置。

Parameter Name Value Range Resolution Typical Value Description
T3 Reply Timeou 1-120 seconds 1 second 45 seconds Reply timeout. Specifies maximum amount of time an entity expecting a reply message will wait for that reply.
T5 Connect Separation Timeout 1-120 seconds 1 second 10 seconds Connection Separation Timeout. Specifies the amount of time which must elapse between successive attempts to connect to a given remote entity.
T6 Control Transaction Timeout 1-120 seconds 1 second 5 seconds Control Transaction Timeout. Specifies the time which a control transaction may remain open before it is considered a communications failure.
T7 NOT SELECTED Timeout 1-120 seconds 1 second 10 seconds Time which a TCP/IP connection can remain in NOT SELECTED state (i.e., no HSMS activity) before it is considered a communications failure.
T8 Network Intercharacter Timeout 1-120 seconds 1 second 5 seconds Maximum time between successive bytes of a single HSMS message which may expire before it is considered a communications failure.
Connect Mode PASSIVE, ACTIVE ----- ----- Connect Mode. Specifies the logic this local entity will use during HSMS connection establishment.
Local Entity IP Address and Port number determined by TCP/IP conventions ----- ----- Required for any entity operating in PASSIVE mode. Determines the address on which the local entity will listen for incoming connection requests.
Remote Entity IP Address and Port Number determined by TCP/IP conventions ----- ----- Required for any entity operating in ACTIVE mode. Determines the address of the remote entity to which the local entity will attempt to connect.

**注意:**上面显示的参数默认值为小型网络(10个或更少节点)。可能需要针对较大的网络配置来调整设置。

相关推荐
半导体老油条1 年前
金南瓜SECS/GEM C# SDK 快速使用指南
开发语言·c#·secs·secs/gem·gem300