SECS半导体设备通讯-2 HSMS通信标准
一 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。
2.2 建立TCP/IP连接
HSMS将通信实体分为两种,Passive Mode(被动模式)和 Active Mode(主动模式)。
- PassiveMode:处于被动模式的本地实体侦听并接受由处于主动模式的远程实体发起的连接。
- ActiveMode:由处于主动模式的本地实体发起连接。
被动模式建立连接过程:
- 获取一个连接端点,并将其绑定到指定的的端口。
- 从端口侦听从远程实体发送的连接请求。
- 在收到连接请求后,确认它并表示接受该连接。
主动模式建立连接过程:
- 获取一个连接端点。
- 向远程实体(被动模式)所指定的端口发起连接。
- 等待远程实体确认收到并接受连接请求。
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的发起过程:
- Initiator将Select.req消息发送给Responding Entity;
- 如果Initiator接收到一个Select Status为0的Select.rsp,则Select Procedure过程成功完成,实体由 Not Selected 状态转化为 Selected 状态;
- 如果Initiator接收到Select Status不为0的Select.rsp,则Select Procedure失败,实体没有状态转换。
Responding Entity的响应过程:
- 响应实体会收到Select.req;
- 如果响应实体能够转换为Selected ,它将发送一个Select Status为0的Select.rsp;
- 如果响应实体不能够转换为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的发起过程:
- Initiator将Deselect.req消息发送给Responding Entity;
- 如果Initiator接收到一个Deselect Status为0的Delect.rsp,则Deselect Procedure过程成功完成,实体由 Selected 状态转化为 Not Selected 状态;
- 如果Initiator接收到Deselect Status不为0的Deselect.rsp,则Deselect Procedure失败,实体没有状态转换。
- 如果在收到Deselect .rsp之前T6超时了,则认为发生了通信故障。
Responding Entity的响应过程:
- 响应实体会收到Deselect.req;
- 如果响应实体处于Selected状态且允许Deselect ,它将发送一个Deselect Status为0的Deselect.rsp,Delesect Procedure成功,发生状态更改;
- 如果响应实体不允许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的发起过程:
- Initiator将Linktest.req消息发送给Responding Entity;
- 如果Initiator在T6超时时间内接收到一个Linktest.rsp,Linktest Procedure成功完成;
- 如果在T6超时时间内未收到Linktest.rsp,则视为通信故障。
Responding Entity的响应过程:
- 响应实体接收到Linktest.req;
- 响应实体发送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
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
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通信标准的更多相关文章
- SECS半导体设备通讯-4 GEM通信标准
一 概述 GEM标准定义了通信链路上的半导体设备的行为. SECS-II标准定义了在主机和设备之间交换的消息和相关数据项.GEM标准则定义了在哪种情况下应该使用哪些SECS-II消息以及由此产生的结果 ...
- SECS半导体设备通讯-3 SECS-II通信标准
一 SECS-II 概述 SECS-II 标准定义了使用如SECS-I.HSMS等传输协议在设备和主机之间交换的消息的形式和含义. 定义了以消息的形式在设备和主机之间传递信息,消息按其行为分类,称为S ...
- SECS半导体设备通讯-1 SECS的基本概念
一 什么是SECS SECS(SEMI Equipment Communication Standard),半导体设备通讯标准. 此标准由SEMI (Semiconductor Equipment a ...
- C# 两个进程之间通讯(管道通信 )
#region 客户端 NamedPipeClientStream pipeClient = new NamedPipeClientStream("localh ...
- TD-SCDMA风雨20年:中国3G标准的由来以及国家通信战略
.国际电信标准是咋回事? 当年作为通信专业的学生,我曾长期困惑一个问题,为什么同一项通信技术总会有美国和欧洲两种国际标准?比如电话语音的数字化就有欧洲A律和美国u(谬)律两种. 学习后发现,两种标准的 ...
- 【开源】C#跨平台物联网通讯框架ServerSuperIO(SSIO)
[连载]<C#通讯(串口和网络)框架的设计与实现>-1.通讯框架介绍 [连载]<C#通讯(串口和网络)框架的设计与实现>-2.框架的总体设计 目 录 C#跨平台物联 ...
- [更新]跨平台物联网通讯框架 ServerSuperIO v1.2(SSIO),增加数据分发控制模式
1.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO) 2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案 3.C#工业 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
[连载]<C#通讯(串口和网络)框架的设计与实现>- 0.前言 目 录 第一章 通讯框架介绍... 2 1.1 通讯的本质... 2 1 ...
- openfire+asmack搭建的安卓即时通讯(一) 15.4.7
最进开始做一些android的项目,除了一个新闻客户端的搭建,还需要一个实现一个即时通讯的功能,参考了很多大神成型的实例,了解到operfire+asmack是搭建简易即时通讯比较方便,所以就写了这篇 ...
随机推荐
- C# 实例解释面向对象编程中的依赖反转原则
在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...
- mysql5.7通过文件zip方式安装-九五小庞
为什么通过zip的方式进行安装 电脑上已安装过mysql数据库,想要再安装一个. 1.下载mysql安装包 直接找到mysql官网,在官网上下载zip安装包. https://downloads.my ...
- qbxt五一数学Day1
目录 I. 基础知识 1. 带余除法(小学) 1. 定义 2. 性质 2. 最大公约数(gcd)/ 最小公倍数(lcm) 1. 定义 2. 性质 3. 高精度 II. 矩阵及其应用 1. 定义 2. ...
- Golang 汇编asm语言基础学习
Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...
- 只要9.9元!零基础学习MySQL
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 经过一段时间的筹备和整理,万里数据库<零基础学习MySQL>课程正式在腾讯课堂上线了. 课程地址:htt ...
- 从函数计算到 Serverless 架构
前言 随着 Serverless 架构的不断发展,各云厂商和开源社区都已经在布局 Serverless 领域,一方面表现在云厂商推出传统服务/业务的 Serverless 化版本,或者 Serverl ...
- 个人开源项目如何上传maven中央仓库
最近在写一些开源项目,想把自己写的东西放到maven中央仓库,提供给更多的人使用.所以写这一篇文章,记录一下自研开源项目jar包上传同步maven中央仓库成功的整个过程,这其中还是有不少的坑的. 目录 ...
- 数据结构与算法【Java】03---栈
前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...
- Redis 08 地理位置
参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 Redis 的 ...
- C++11实现的数据库连接池
它什么是? 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:类似的还有线程池. 为什么要用? 一个数据库连接对象均对应一个物理数据库连接, ...