一 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的通常操作状态:数据消息可以在此状态下进行交换。

状态的转换:

二 使用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。

2.2 建立TCP/IP连接

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

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

被动模式建立连接过程:

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

主动模式建立连接过程:

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

2.3 终止TCP\IP连接

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

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

三 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:

3.6 Linktest Procedure

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

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要求使用该Procedure时连接处于Selected状态。

Separate.req:单方面通知通信终止时发送;

3.8 Reject Procedure

Reject Procedure用于响应在不适当的上下文中收到的其他有效的HSMS消息,即接收到消息的接收方不支持该消息或认为无效的消息。

四 HSMS消息格式

4.1 General Message Format 一般消息格式

4.1.1 Byte Structrue:

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

4.1.2 Message Format:

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

4.1.3 Message Length:

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

4.1.4 Message Header:

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

其中:

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

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

Header Byte3:对于不同的HSMS消息,有不同的取值;

PType:8位无符号整型,PType旨在作为一种枚举类型,定义表示层消息类型:MessageHeader和MessageText是如何编码的。

PType = 0,被HSMS定义为表示SECS-II消息编码。

SType:8位无符号整数,是一种枚举类型,标识此消息是HSMS数据消息(值=0)还是HSMS控制消息。

SystemBytes:四字节无符号整数,用于在一组开放的事务中唯一地标识一个事务,即唯一地标识一次消息交互。

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

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 的组成如下图,它标识消息是否需要应答。
W-Bit 指示Primary Message是否需要Reply Message,期望应答则设置为1,不期望应答则设置为0。
Reply Message应该始终将W位设置为0。Header Byte 2的低阶7位(第6-0位)包含该消息的SECS流。流是一个7位无符号整数值,它标识消息的一个主要话题,它的使用在SEMIE5(SECS-II)中定义。
 
其 Byte 3 包含该消息的SECS功能。功能是一个8位的无符号整数值,用于标识消息的一个次要话题(在流中),它的使用在SEMIE5(SECS-II)中定义。
Byte3的位0定义数据消息是“Primary”还是“Reply”;值1表示“Primary”,值0表示“Reply”。
 
其P Type 为0 表示 SECS-II编码格式。
其System Bytes:唯一地标识此消息事物,ReplyMessage 的 SystemBytes 应与其对应回复的PrymaryMessage的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,表示拒绝的原因。

4.2.8 SType=9 Separate.req

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

五 特别说明

如果检测到通信故障,实体应终止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 超时则认为这次传输失败。

六 HSMS的实现要求

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

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

七 附录

7.1 SelectStatus

7.2 DeselectStatus

7.3 Reject Reason Code

说明:

以上为SECS通信基础知识的整理-2。

SECS半导体设备通讯-2 HSMS通信标准的更多相关文章

  1. SECS半导体设备通讯-4 GEM通信标准

    一 概述 GEM标准定义了通信链路上的半导体设备的行为. SECS-II标准定义了在主机和设备之间交换的消息和相关数据项.GEM标准则定义了在哪种情况下应该使用哪些SECS-II消息以及由此产生的结果 ...

  2. SECS半导体设备通讯-3 SECS-II通信标准

    一 SECS-II 概述 SECS-II 标准定义了使用如SECS-I.HSMS等传输协议在设备和主机之间交换的消息的形式和含义. 定义了以消息的形式在设备和主机之间传递信息,消息按其行为分类,称为S ...

  3. SECS半导体设备通讯-1 SECS的基本概念

    一 什么是SECS SECS(SEMI Equipment Communication Standard),半导体设备通讯标准. 此标准由SEMI (Semiconductor Equipment a ...

  4. C# 两个进程之间通讯(管道通信 )

    #region  客户端        NamedPipeClientStream pipeClient =        new NamedPipeClientStream("localh ...

  5. TD-SCDMA风雨20年:中国3G标准的由来以及国家通信战略

    .国际电信标准是咋回事? 当年作为通信专业的学生,我曾长期困惑一个问题,为什么同一项通信技术总会有美国和欧洲两种国际标准?比如电话语音的数字化就有欧洲A律和美国u(谬)律两种. 学习后发现,两种标准的 ...

  6. 【开源】C#跨平台物联网通讯框架ServerSuperIO(SSIO)

    [连载]<C#通讯(串口和网络)框架的设计与实现>-1.通讯框架介绍 [连载]<C#通讯(串口和网络)框架的设计与实现>-2.框架的总体设计 目       录 C#跨平台物联 ...

  7. [更新]跨平台物联网通讯框架 ServerSuperIO v1.2(SSIO),增加数据分发控制模式

    1.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO) 2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案 3.C#工业 ...

  8. [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍

    [连载]<C#通讯(串口和网络)框架的设计与实现>- 0.前言 目       录 第一章           通讯框架介绍... 2 1.1           通讯的本质... 2 1 ...

  9. openfire+asmack搭建的安卓即时通讯(一) 15.4.7

    最进开始做一些android的项目,除了一个新闻客户端的搭建,还需要一个实现一个即时通讯的功能,参考了很多大神成型的实例,了解到operfire+asmack是搭建简易即时通讯比较方便,所以就写了这篇 ...

随机推荐

  1. Java-类与对象-多态

    Java类与对象-多态 多态:类与对象三大特征之一 什么是多态? 同类型的对象,执行同一个行为,会表现出不同的行为特征. 多态的形式 1.父类类型 对象名称 = new 子类构造器(); 2.接口 对 ...

  2. SkyWalking分布式系统应用程序性能监控工具-上

    概述 微服务系统监控三要素 现在系统基本都是微服务架构,对于复杂微服务链路调用如下问题如何解决? 一个请求经过了这些服务后其中出现了一个调用失败的问题,如何定位问题发生的地方? 如何计算每个节点访问流 ...

  3. Vxe-table 高亮当前行

    需求 1 :设置初始高亮 子组件: 父组件 需求 2 :高亮行的变化,需要把数据传递到兄弟组件中 解决办法:EventBus 参考链接: http://t.csdn.cn/iwOJc main.js ...

  4. canal-1.1.5实时同步MySQL数据到Elasticsearch

    一.环境准备 1.jkd 8+ 2.mysql 5.7+ 3.Elasticsearch 7+ 4.kibana 7+ 5.canal.adapter 1.1.5 二.部署 一.创建数据库CanalD ...

  5. Odoo14 收发邮件服务器设置

    # 维护邮箱的七个地方 # 1.settings中Discuss栏将External Email Servers勾选(启用外部邮件服务),然后维护Alias Domain(域名) # 2.Techni ...

  6. Python 爬取途虎养车 全系车型 轮胎 保养 数据

    Python 爬取途虎养车 全系车型 轮胎 保养 数据 2021.7.27 更新 增加标题.发布时间参数 demo文末自行下载,需要完整数据私聊我 2021.2.19 更新 增加大保养数据 2020. ...

  7. Postman如何通过xmysql工具的Restful API 接口访问MySQL

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 有时候用 Postman 接口测试需要获取MySQL的查询结果做接口输出的校验,这里介绍下 Postman 通过 R ...

  8. 技术分享 | ARM下中标麒麟系统ky10使用Xtrabackup-8.0.25

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 一.需求背景 查询Percona官方手册,Xtrabackup 8.0可以备份M ...

  9. Rust 从入门到精通05-数据类型

    Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型. 在 Rust 中,每一个值都属于某一个 数据类型(data type),分为两大类: ①.标 ...

  10. java-servlet过滤器和监听

    1 过滤器 过滤器是什么?servlet规范当中定义的一种特殊的组件,用于拦截容器的调用.注:容器收到请求之后,如果有过滤器,会先调用过滤器,然后在调用servlet. 如何写一个过滤器? 写一个ja ...