SECS半導體設備通訊-2 HSMS通信標準

来源:https://www.cnblogs.com/wwwen/archive/2022/03/24/16048873.html
-Advertisement-
Play Games

一 HSMS通信標準概述 HSMS定義了使用 TCP/IP 作為物理傳輸媒質時的通信介面。 HSMS使用TCP/IP流支持,提供了可靠的雙向同步傳輸,可以用來作為SECS-I通信以及其他更高級的通信環境的替代。 1.1 HSMS連接狀態圖 HSMS狀態機如下圖所示,此圖中描述的行為定義了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。

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

许多控制消息是消息交换或会话过程的一部分:发送者发送<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。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 又到了分享Python小技能的時間了,今天教大家如何爬自己的微信好友。等會就可以拿自己微信好友練練手,這波操作聽起來就不錯的樣子,準備好了嗎?開始了..... 今天這篇文章會基於Python對微信好友進行數據分析,這裡選擇的維度主要有:性別、頭像、簽名、位置,主要採用圖表和詞雲兩種形式來呈現結果,其 ...
  • 阿珍探出頭看了看老徐的屏幕,全部都是綠色的曲線圖,好奇地問:“老徐,你看的這是什麼?”老徐看的太入神,轉過頭才發現阿珍,尬尷地笑了笑說:“我就是看看最近的行情。”老徐立馬切換了視窗。 ...
  • oop面向對象的程式開發 用幾大特征表達這一類事務稱為一個類,類更像是一張圖紙,表達的是一個抽象概念 對象是類的具體實現,更像是由這種圖紙產出的具體物品,類只有一個,但對象可以通過這個類實例化出多個 對象是類的實例,類是對象的模板 *類中的成員只有方法和屬性,不要裸露的把判斷和迴圈直接寫在類中,而是 ...
  • 集合嵌套和遍歷元素 package Day16; import java.util.ArrayList; public class LX15 { public static void main(String[] args) { //創建集合1 規定其類型為學生類型 ArrayList<Student ...
  • 作者:三分惡 原文:cnblogs.com/three-fighter/p/14054749.html 博主負責的項目報了一個問題,用戶操作回退失效。我們的設計里,操作回退是回到操作前的狀態。經過查看日誌發現,用戶之前的操作做了兩次,也就是說提交操作的介面被調用了兩次,導致之用戶上一次的狀態和這一次 ...
  • 可能平常會遇到一些需求,比如構建菜單,構建樹形結構,資料庫一般就使用父id來表示,為了降低資料庫的查詢壓力,我們可以使用Java8中的Stream流一次性把數據查出來,然後通過流式處理。 我們一起來看看,代碼實現為了實現簡單,就模擬查看資料庫所有數據到List裡面。 實體類:Menu.java /* ...
  • 常用反編譯工具 1.JetBrains Peek 2..Net Reflector 3.ILspy 4.dnSpy下載 這篇筆記主要記錄如何使用dnSpy進行反編譯調試,dnSpy除了web程式,也可以調試Windows服務,Winform桌面程式,使用方法都是一致的,主要用來解決線上在測試環境中無 ...
  • [翻譯] WPF 中用戶控制項 DataContext/Binding 和依賴屬性的問題 目錄 提問 回答 User Control DataContext/Binding Issue with Dependency Property WPF [譯者] 獨立觀察員 2022 年 3 月 24 日 提問 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...