一文搞懂SECS/GEM(二)

news2025/4/11 3:18:11

继《一文搞懂SECS/GEM(一)》继续补充

这里写目录标题

  • HSMS
    • 2种连接模式(Connect Mode)
    • 6类消息
      • 消息交换过程
        • Select Procedure
        • Data Procedure
        • Deselect Procedure
        • Linktest Procedure
        • Separate Procedure
        • Reject Procedure
    • 4种状态
      • 状态转换
        • Passive Mode(被动模式)连接的状态转换
        • Active Mode(主动模式)连接的状态转换
    • HSMS消息格式
      • 消息格式
      • Message Header一览表
    • 5个计时器

HSMS

HSMS (High-Speed SECS Message Services)属于传输协议标准,描述数据是如何通过物理层在设备与主机之间进行传输的。HSMS定义了使用 TCP/IP 为物理传输媒质时的通信接口。HSMS 可以作为 SECS-I以及其他一些高级通信环境的替代,HSMS 又包括了两个子标准,分别是:

  • HSMS-SS (High-Speed SECS Message Service Single Selected Mode)
  • HSMS-GS (Hiah-Speed SECS Message Service General Session)

HSMS-SS 对母标准中的操进行了简化,以便于实际应用。HSMS-GS 定义了使用 HSMS 访问多个子实体的操作。

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

*好,总结一下,其实它就是个TCP通信,只不过它规定了1种消息格式、2种连接模式、4种状态、5个计时器和6种消息类型,通过这些东西完成状态的转化和消息的通信,下文对这些内容做依次讲解

2种连接模式(Connect Mode)

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

  • PassiveMode:处于被动模式的本地实体侦听并接受主动模式的远程实体发起的连接。通常设备在此模式下运行。
  • ActiveMode:主动模式的本地实体发起连接。通常主机(Host)在此模式下运行。

建立连接的过程如下图所示:
在这里插入图片描述
Passive Mode(被动模式)建立连接过程:

  1. 获取一个连接端点,在指定的端口进行监听。
  2. 侦听远程实体发送的连接请求。
  3. 接收连接请求,发送确认。

Active Mode(主动模式)建立连接过程:

  1. 获取一个连接端点。
  2. 向远程实体(被动模式)的端口发起连接。
  3. 等待远程实体接收并返回确认。

6类消息

  • Linktest.req / Linktest.rsp:通信状态确认消息。 如果没有应答则转换为NOT CONNECTED 状态;
  • Select.req / Select.rsp:建立HSMS会话消息。是实体由 NOT SELECTED 状态转换为 SELECTED 状态所使用的消息 ;
  • Deselect.req / Deselect.rsp:”优雅“终止通信消息。在双方协议终止通信时使用,发起通信终止的一端发送Deselect.req,可以记作小情侣和平分手;
  • Separate.req:单方面通信终止消息,可以记作”渣男“终止通信消息。通信某一方单方面通知对方通信终止时发送,不需要对方回复;
  • Recject.req:拒绝消息。在收到无效消息时发送。
  • Data Message:数据消息。只要连接处于SELECTED状态,任何一个实体都可以发起Data Message。当不处于Selected状态时,接收数据消息将导致Reject Procedure。发起者向响应实体发送一条Primary Message。如果Primary Message指示需要响应,则响应实体将发送 Reply Message 响应。

这6类消息细分的话又分成两类,Data Message是数据消息,其他的都是HSMS的控制消息

消息交换过程

Select Procedure

Select Procedure用于在TCP/IP连接上建立HSMS通信。

Select.req和Select.rsp消息:是实体由 Not Selected 状态转换为 Selected 状态所使用的消息 。

在这里插入图片描述

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响应来接受其他实体的选择请求。

在这里插入图片描述

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文本。

Deselect Procedure

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

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

Deselect.req/Deselect.rsp在双方协议终止通信时使用,发起通信终止的一端发送Deselect.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响应来接受其他实体的选择请求。

在这里插入图片描述

Linktest Procedure

Linktest Procedure 用于确定TCP/IP和HSMS通信的完整性。只要连接处于Selected状态,可以随时使用。

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。
Separate Procedure

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

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

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

在这里插入图片描述

Reject Procedure

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

Recject.req:在收到无效消息时发送。

在这里插入图片描述

4种状态

在这里插入图片描述

状态说明:

  • NOT CONNECTED:开始监听,但尚未建立任何连接或以前建立的TCP/IP连接都已终止;

  • CONNECTED:已建立了一个TCP/IP连接。此状态有两个子状态——NOT SELECTED 和 SELECTED;

    • NOT SELECTED:没有建立HSMS会话或先前建立的HSMS会话已结束;

    • SELECTED:至少建立了一个HSMS会话,这是HSMS的通常状态,数据消息可以在此状态下进行交换。

状态转换

在这里插入图片描述

Passive Mode(被动模式)连接的状态转换

在这里插入图片描述

Active Mode(主动模式)连接的状态转换

在这里插入图片描述

HSMS消息格式

消息格式

在这里插入图片描述

  • Message Length:一个4字节的无符号整数,表示其后Message Header加上Message Text的总字节数,其最小值为10字节。

  • Message Header:消息头的长度固定为10字节,格式如下图所示:

    0upper Session ID
    1lower Session ID
    2Header Byte 2
    3Header Byte 3
    4PType
    5SType
    6~9System Bytes
    • Session ID:又叫Device ID,是16位无符号整数。用于标识通信实体的连接;此外,对于有回复的消息,ReplyMessage 的 Session ID 应与其对应回复的PrymaryMessage的Session ID相同。

    • Header Byte 2:对于不同的HSMS消息,有不同的取值,参考如下表格:

      消息类型Header Byte 2说明
      Data MessageW-bit and
      SECS Stream
      DataMeaages的Head Byte2由高1位的W-bit和低7位的SECS Stream组成。
      W-Bit:指示Primary Message是否需要Reply Message,期望应答则设置为1,不期望应答则设置为0。Reply Message应该始终将W-bit设置为0。
      SECS Stream:是一个7位无符号整数值,位于低阶7位(第6-0位)。SECS Stream表示消息的一个主题,它的使用在SEMIE5(SECS-II)中定义。
      Select.req0
      Select.rsp0
      Deselect.req0
      Deselect.rsp0
      Linktest.req0
      Linktest.rsp0
      Reject.reqPType or SType如果不支持PType,该位设置成被拒绝的消息的PType。否则,设置成被拒绝的消息中的SType的值
      Separate.req0
    • Header Byte 3:对于不同的HSMS消息,有不同的取值,参考如下表格:

      消息类型Header Byte 3说明
      Data MessageSECS FunctionSECS Function:功能是一个8位的无符号整数值,用于标识消息的一个次要话题,偶数是Primary消息,奇数是Replay消息。它的使用以及和Stream的关系在SEMIE5(SECS-II)中定义。
      Select.req0
      Select.rspSeclect Status0 - Select操作成功;
      1 - 通信已激活。之前的Select已经操作成功过了
      2 - 连接未就绪。连接尚未准备好接受Select请求。
      3 - 连接已用光。该连接已被接受,但该实体已在为一个单独的TCP/IP连接提供服务,并且无法在任何给定时间为多个连接提供服务。
      4~127 - 子标准保留
      128~255 - 保留,未使用
      Deselect.req0
      Deselect.rspDeseclect Status0 - 通信结束,Deselect操作成功
      1 - 通信未建立。HSMS通信尚未通过选择建立,或先前Deselect已经操作成功过了。
      2 - 通信繁忙。会话仍在由响应实体使用,因此它还不能优雅地放弃会话。在这种情况下,如果请求者一定要终止通信的话,则应使用Separate.req。
      3~127 - 子标准保留
      128~255 - 保留,未使用
      Linktest.req0
      Linktest.rsp0
      Reject.reqReason Code1 - 收到的SType不支持
      2 - 收到的PType不支持
      3 - 交易未打开。当没有对应的未处理的请求消息时,收到响应控制消息。例如:发送方发送了Select.req后,收到了两条Select.rsp,对于第一条Select.rsp正常处理,对于第二条Select.rsp就回应Reject.req,Reason Code为3
      4 - 未处于SELECTED状态时收到一条数据消息
      5~127 - 子标准保留
      128~255 - 保留,未使用
      Separate.req0
    • PType:表示类型(Presentation Type),8位无符号整型,使用枚举表示层消息类型,即MessageHeader和MessageText是如何编码的,取值如下:

      取值描述
      0SECS-II 编码
      1~127子标准保留
      128~255保留,未使用
    • SType:会话类型(Session Type),8位无符号整数,表示此消息是何类消息,取值类型如下表:

      取值描述
      0Data Message
      1Select.req
      2Select.rsp
      3Deselect.req
      4Deselect.rsp
      5Linktest.req
      6Linktest.rsp
      7Reject.req
      8未使用
      9Separate.req
      10未使用
      11~127子标准保留
      128~255保留,未使用
    • System Bytes:四字节无符号整数,用于唯一标识一次消息交互,一定要具备唯一性。此外,ReplyMessage 的 SystemBytes 应与其对应回复的PrymaryMessage的SystemBytes相同。

  • Message Test:消息文本。格式由Message Header的PType字段决定。

Message Header一览表

下表总结了6种消息的Message Header(清晰明了,重点看一下!)如下:

在这里插入图片描述

5个计时器

计时器名字范围建议值描述
T3回复超时(Reply Timeout)1~120s45s一个实体等待回复消息的最长时间,如果T3超时则取消这次会话事务但不断开 TCP/IP 连接
T5连接间隔时间(Connect SeparationTimeout)1~240s10s定义两个连接请求之间的时间间隔。
频繁的向一个未准备好连接的实体发起连接请求,会加重 TCP/IP 的操作负荷。因此,当一个主动模式实体发起的连接操作终止后(不论是成功结束还是被远端实体拒绝),该实体必须等待 T5 时间再后发起下一次连接请求。
T6控制会话超时(Transaction Timeout)1~240s5s定义了一个控制事务所能保持开启的最长时间,超过该时间就认为这次通信失败。
当发送.req控制信息时T6计时器开启,若在T6超时之前收到了响应的.rsp消息则计时器关闭,否则控制消息的发起者将关闭这次会话,并认为出现一个通信故障
T7Not Select状态超时(Not Select Timeout)1~240s10s表示当建立了 TCP/IP 连接之后通信处于 Not Selected 状态的最长时间,通信必须在该时间完成 Selecte操作,否则将会断开 TCP/IP 连接
T8网络字符超时(Network Intercharacter Timeout)1~120s5s表示成功接收到单个HSMS消息的字符之间的最大时间间隔。由于TCP/IP时面向流的通信协议,因此一个HSMS通信消息可能被分为若干个TCP/IP消息进行传送,若T8计时器超时则认为这次传输失败。

注:计时器数值的最小分辨率是1秒,不能使用小数




以上这些,基于工作经验和SECS标准手册整理而来,由问题和纰漏请多多指正,感谢~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【系统调用IO】open、close、read、write、lseek

目录 3 系统调用IO3.1 文件描述符3.1.1 FILE结构体3.2.2 文件描述符 3.3 open、close、read、write、lseek3.3.1 文件权限3.3.2 open3.3.3 close3.3.4 read3.3.5 write3.3.6 lseek3.3.7 代码示例 文件io和标准io的区别 橙色 3 系统调用IO 3.1 文件描述符 3.1.1 FILE结构体 …

Python 自动化测试:数据驱动

软件质量。这种测试,在功能测试中非常耗费人力物力,但是在自动化中,却比较好实现,只要实现了测试操作步骤,然后将多组测试数据以数据驱动的形式注入,就可以实现了。 前面文章学习了参数化,当数…

5G_射频测试_基础概念(二)

定义了测试参考点,不同的RRU类型 C类型传统RRU Conducted and radiated requirement reference points 4.3.1 BS type 1-C(传统RRU一般测试点就是连接天线的射频接头) 4.3.2 BS type 1-H(宏站MassiveMIMO 矩阵天线&#xff…

自然语言处理研究的内容

一.基础技术 1.1 词法分析 词法分析(Lexical Analysis),也称为词法扫描或扫描器,是自然语言处理(NLP)中的基础步骤之一,用于将输入的文本分割成词法单元(Token)。词法单…

每天都美好的一天

每天我们都会遇到不同的事情,开心的、愤怒的、悲伤的等等,今天过完明天我们还得继续,所以一切又显得不那么重要。一天中如果有不开心的事情发生会影响我们当天很长一段时间,甚至未来几天。 今天所做之事都是自己明天的基础&#…

JDK环境变量配置成功,命令提示符(CMD)中,输入java、javac、java -version等没有反应

双击环境变量里的path,然后把画圈的那两行移到最上边即可解决问题。 但是这样的话,当年再次双击path时就会呈现如下界面, 看起来很不方便,原来若Path变量值是%开头的,它就会显示一个字符串(相当于每一行之…

机试指南:Ch1:绪论 Ch2:枚举和模拟

文章目录 第1章 绪论(1)如何准备机试(2)OJ和开发环境简介(3)OJ的原理、OJ的几种情况(4)学习建议(5)23版内容(6)常犯的编程小错误(7)其他小问题一览①int取值范围②return 0 缺省问题③万能头文件 #include <bits/stdc.h>④scanf、printf 比 cin、cout 更节约时间⑤不确定…

[java基础揉碎]算术运算符

算数运算符一览: *如果减号运算符加在变量前面, 这个变量会直接变成负数(加号不会): *取模(取余)11%9为什么等于2, 怎么计算的: 如果取模设计负数怎么运算的: 公式 a % b a - a / b * b *除法在java中会根据类型的不同而不同: 10/4是整数除以整数, 本来数学中应该得到2.5, …

热血江湖服务端服务器架设教程

热血江湖服务端服务器架设教程 大家好&#xff0c;我是艾西今天简单的说下热血江湖架设需要哪些东西然后怎么操作&#xff0c;不管你是自己玩还是对外开放&#xff0c;这对于有兴趣的小伙伴总的都是一件好事。技多不压身就是这么个道理&#xff0c;当你需要用上时还希望能记起…

SpringBoot(三层框架Controller,Mapper,Service)中遇到的一些注解整理

本文主要从Controller层,Service层,Mapper层这三层架构中记录用到的各种注解 还有一些MyBatis用到的注解 持续更新到本人的毕设做完为止,太多了太多了根本学不完哈哈哈 1.Controller层 1.1GetMapping/PostMapping/DeleteMapping/PutMapping 用于建立HTTP请求与处理方法之间的…

BUUCTF 从娃娃抓起 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 伟人的一句话&#xff0c;标志着一个时代的开始。那句熟悉的话&#xff0c;改变了许多人的一生&#xff0c;为中国三十年来计算机产业发展铺垫了道路。两种不同的汉字编码分别代表了汉字信息化道路上的两座伟大里程…

图片轮播大全

案例1&#xff1a;上下轮播切割重组 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" conten…

[陇剑杯 2021]webshell

[陇剑杯 2021]webshell 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;单位网站被黑客挂马&#xff0c;请您从流量中分析出webshell&#xff0c;进行回答&#xff1a; 黑客登录系统使用的密码是_____________。 题目思路&#xff1a; 分析题目&…

幻兽帕鲁开服教程——游戏

幻兽帕鲁开服教程——游戏 1. 安装服务器2. 服务器配置调整3. 运行环境Microsoft Visual C Runtime4. 加入服务器 这是研究开服时顺手写的笔记&#xff0c;也方便后来者。 如果你熟悉你所使用的操作系统的话&#xff0c;windows和linux应该区别不大。 1. 安装服务器 1.安装ste…

什么是小程序?特点和技术架构详解

小程序是一种新的移动应用程序格式&#xff0c;一种结合了 Web 技术以及客户端技术的混合解决方案。 传统的原生应用运行起来比较流畅&#xff0c;但是也有天然的基因缺陷&#xff1a; 不支持动态化&#xff0c;发布周期长需要开发Android和iOS两套代码&#xff0c;开发成本高…

Ubuntu系统安装(如何在虚拟机下安装Ubuntu系统)

前言 Linux 的开发需要在 Linux 系统下进行&#xff0c;这就要求我们的 PC 主机安装 Linux 系统。我会在这篇文章中分享我如何安装虚拟机&#xff0c;以及我在虚拟机下安装Ubuntu系统。相信我的分享一定会给你带来帮助。 目录 前言 一、安装虚拟机软件 二、创建虚拟机 三、…

Kafka(八)使用Kafka构建数据管道

目录 1 使用场景2 构建数据管道时需要考虑的问题2.1 及时性2.2 可靠性高可用可靠性数据传递 2.3 高吞吐量2.4 数据格式2.5 转换ETLELT 2.6 安全性2.7 故障处理2.8 耦合性和灵活性临时数据管道元数据丢失末端处理 3 使用Connect API3.1 Connect的数据处理流程sourcesinkconnecto…

【C++】List模拟实现过程中值得注意的点

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.List迭代器 2.适…

0004.电脑开机提示按F1

常用的电脑主板不知道什么原因&#xff0c;莫名其妙的启动不了了。尝试了很多方法&#xff0c;没有奏效。没有办法我就只能把硬盘拆了下来&#xff0c;装到了另一台电脑上面。但是开机以后却提示F1&#xff0c;如下图&#xff1a; 根据上面的提示&#xff0c;应该是驱动有问题…

力扣645.错误的集合

一点一点地刷&#xff0c;慢慢攻克力扣&#xff01;&#xff01; 王子公主请看题 集合 s 包含从 1 到 n 的整数。不幸的是&#xff0c;因为数据错误&#xff0c;导致集合里面某一个数字复制了成了集合里面的另外一个数字的值&#xff0c;导致集合 丢失了一个数字 并且 有一个数…