热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SECS半导体设备通讯2HSMS通信标准

SECS半导体设备通讯-2HSMS通信标准-一HSMS通信标准概述HSMS定义了使用TCPIP作为物理传输媒质时的通信接口。HSMS使用TCPIP流支持,提供了可靠的双向同步


一 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 T6 Control Timeout:定义了一个控制会话所能保持开启的最长时间,超过该时间就认为这次通信失败。

许多控制消息是消息交换或会话过程的一部分:发送者发送.req,接收方接收.req并以.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。





推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
author-avatar
鸿纶静火7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有