本章的內容主要參考了 SECS半導體裝置通訊-2 HSMS通訊標準 ,外加上自己看的一些其他的文件。也加上了一些自己的理解,特此記錄。若有侵權,請聯絡刪除,謝謝。
再次特別感謝 SECS半導體裝置通訊-2 HSMS通訊標準 的作者。
1、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的通常操作狀態:資料訊息可以在此狀態下進行交換。
狀態的轉換:
2、使用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。
上面這段話的意思是 HSMS 可以使用的埠號並沒有什麼特別的要求,TCP/IP 可以使用的都可以。
2.2 建立TCP/IP連線
HSMS將通訊實體分為兩種,Passive Mode(被動模式)和 Active Mode(主動模式)
。
- PassiveMode:處於
被動模式
的本地實體偵聽並接受由處於主動模式的遠端實體發起的連線。 - ActiveMode:由處於
主動模式的本地實體發起連線
。
上面這兩句話是不是有點繞,簡單理解就是 Passive Mode 是服務端,Active Mode 是客戶端。服務端監聽埠並接受請求,客戶端主動傳送請i去。
被動模式建立連線過程:
- 獲取一個連線端點,並將其繫結到指定的的埠。
- 從埠監聽從遠端實體傳送的連線請求。
- 在收到連線請求後,確認它並表示接受該連線。
其實上面就是使用 TCP 協議,編寫服務端那一套,依次執行
bind()
,listen()
,accept()
方法,然後坐等客戶端的連線請求。
主動模式建立連線過程:
- 獲取一個連線端點。
- 向遠端實體(被動模式)所指定的埠發起連線。
- 等待遠端實體確認收到並接受連線請求。
2.3 終止TCP/IP連線
連線終止是連線建立的邏輯反轉。從本地實體的角度來看,TCP/IP連線可能隨時斷開。但是,HSMS只允許在連線處於連線狀態的未選擇子狀態時終止連線。
最後一句話怎麼理解?還記得上面說的HSMS連線狀態圖嗎,這句話的意思是隻有處於
NOT SELECTED
這個狀態時才可以終止連線。那處於SLECTED
的狀態不可以終止連線嗎,我的意思是可以,但是需要先進入到NOT SELECTED
狀態,再終止連線。
任何一個實體都可以啟動終止連線。實體進入Not Connected狀態,表示HSMS通訊結束。
3、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:
如果附加標準不限制選擇使用的 Deselect,則有可能兩個實體同時使用相同的控制Id啟動 Deselect Procedures。在這種情況下,每個實體將透過使用despelect.rsp響應來接受另一個實體的取消選擇請求。
3.6 Linktest Procedure
Linktest Procedure
用於確定TCP/IP和HSMS通訊的操作完整性。它的使用在CONNECTED
狀態下隨時有效。
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要求在使用分離時連線處於SELECTED
狀態。響應實體不傳送響應,無論其本地狀態如何,都需要終止通訊。該過程如下:
Initiator Procedure:
發起者處於 selected 狀態才可以發起 Separate.req 訊息請求 響應實體。當發起者傳送了 Separate.req 後,就意味著發起者的 Separate Procedure 已經完成,發起者進入 NOT SELECTED 狀態。
Responding Entity Procedure:
1.響應實體接收到 Separate.req。
2.如果響應實體處於 SELECTED 狀態,則 Separate Procedure 可以成功的處理。
3.如果響應實體不處於 SELECTED 狀態,則 Separate.req 請求被忽略。
3.8 Reject Procedure
Reject Procedure
用於響應在不適當的上下文中收到的其他有效的HSMS訊息。當使用 HSMS 通行時,支援 Reject Procedure
提供了有用的診斷資訊在分散式應用程式的生產環境中
Initiator (Sender of Inappropriate Message) Procedure:
發起者傳送了一個不恰當的訊息給到響應實體,響應實體會 回覆一個 Reject.req,當發起者收到 Reject.req 後,需要採取恰當的措施
Responding Entity Procedure:
響應實體收到了一個不恰當的訊息,會回覆一個 Reject.req訊息給 發起者。
HSMS 要求,當響應實體處於 NOT SELECTED
狀態或者接收到未為該實體定義的 SType or PType
型別的訊息時,需要當作 reject procedure
處理。附加標準可定義需要當作 reject procedure
的其他條件。一般來說,接收拒絕訊息是配置不當的系統或軟體程式設計錯誤的指示。
4、 HSMS訊息格式
4.1 General Message Format 一般訊息格式
4.1.1 Byte Structrue:
在HSMS中一個位元組包含8位。位元組中的位從第7位(MSB)編號到第0位(LSB)。
4.1.2 Message Format:
HSMS訊息以單個連續位元組流傳輸。
HSMS Message Format :
Number of Bytes | Description |
---|---|
4 Bytes | Message Length. MSB First. Specifies the number of bytes in the Message Header plus the Message Text. |
10 Bytes | Message Header. |
0–n Bytes | Message Text. Format is further specified by PType field of message header. |
大端模式和小端模式是指在多位元組資料儲存時,位元組的順序不同。在大端模式中,高位位元組儲存在低地址,低位位元組儲存在高地址;而在小端模式中,低位位元組儲存在低地址,高位位元組儲存在高地址。
MSB(Most Significant Bit)是指最高位的位元位,它與大、小端模式的關係是:在大端模式中,MSB位於第一個位元組的最高位;而在小端模式中,MSB位於最後一個位元組的最高位。
所以 HSMS 採用的是大端模式
4.1.3 Message Length:
Message Length是一個四位元組的無符號整數值,它指定Message Header加上Message Text的位元組長度。訊息長度首先傳輸最高有效位(MSB),最後傳輸最低有效位(LSB)。
最小可能的訊息長度為10(當只有Header時)。最大可能的訊息長度跟具體實現有關。
4.1.4 Message Header:
MessageHeader是一個10位元組的欄位。頭中的位元組從第0位元組(傳輸的第一個位元組)編號到第9位元組(傳輸的最後一個位元組)。
HSMS Message Header :
Bytes | Description |
---|---|
0-1 | Session ID (Device ID) |
2 | Header Byte 2 |
3 | Header Byte 3 |
4 | PType |
5 | SType |
6-9 | System Bytes |
其中:
-
Session ID:
16位無符號整數
,它佔據了位元組0和位元組1(位元組0是MSB,1是LSB)。用於標識通訊實體的連線; -
Header Byte 2:對於不同的HSMS訊息,有不同的取值;
-
Header Byte 3:對於不同的HSMS訊息,有不同的取值;
-
PType:
8位無符號整型
,PType旨在作為一種列舉型別,定義表示層訊息型別:MessageHeader和MessageText是如何編碼的。只有 PType = 0,被HSMS定義為表示SECS-II訊息編碼。
PType:
Value | Description |
---|---|
0 | SECS-II Encoding |
1-127 | Reserved for subsidiary standards |
128-255 | Reserved, not used |
- SType:
8位無符號整數
,是一種列舉型別,標識此訊息是HSMS資料訊息(值=0)還是HSMS控制訊息。
SType:
Value | Description |
---|---|
0 | Data Message |
1 | Select.req |
2 | Select.rsp |
3 | Deselect.req |
4 | Deselect.rsp |
5 | Linktest.req |
6 | Linktest.rsp |
7 | Reject.req |
8 | (not used) |
9 | Separate.req |
10 | (not used) |
11–127 | Reserved for subsidiary standards |
- SystemBytes:四位元組無符號整數,用於在一組開放的事務中唯一地標識一個事務,即唯一地標識一次訊息互動。
4.2 HSMS Message Formats by Type 按型別劃分的HSMS訊息格式
這是一個HSMS訊息的格式。每條訊息都以一個 Message Length, 開始,然後是一個 Message Header,後面是 Message Text
。
Message Length : 是一個四位元組的值,它定義了整個HSMS訊息的長度 (Message Header + Message Text).
Message Header: 描述HSMS訊息或過程。
Message Text: 是HSMS訊息的資料部分。它只與資料程式相關。訊息文字中的資料是在SECS-II訊息協議部分中描述的已編碼的SECS-II。
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 的組成如下圖,它標識訊息是否需要應答。
-
Byte 2:
W-Bit
指示Primary Message是否需要Reply Message,期望應答則設定為1,不期望應答則設定為0
。Reply Message應該始終將W位設定為0
。Header Byte 2的低階7位(第6-0位)包含該訊息的SECS流。流是一個7位無符號整數值,它標識訊息的一個主要話題,它的使用在SEMI E5(SECS-II)中定義。 -
Byte 3: 包含該訊息的SECS功能。功能是一個8位的無符號整數值,用於標識訊息的一個次要話題(在流中),它的使用在SEMI E5(SECS-II)中定義。
Byte3 的 bit 0
定義資料訊息是“Primary”還是“Reply”;值1表示“Primary”,值0表示“Reply”。 -
PType: 為0 表示 SECS-II編碼格式。
-
System Bytes:唯一地標識此訊息事務,ReplyMessage 的 SystemBytes 應與其對應回覆的Prymary Message的 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,表示拒絕的原因。
ReasonCode :
Value | Description |
---|---|
1 | SType Not Supported. A message was received whose SType value not defined in the HSMS standard or the particular subsidiary standard(s) supported by the entity. (不支援SType。收到一條訊息,其SType值未在該實體支援的HSMS標準或特定附屬標準中定義)。 |
2 | PType Not Supported. As above, but for PType. (不支援PType。原因同上) |
3 | Transaction Not Open. A Response control message was received when there was no outstanding request message which corresponded to it. (事務未開啟。當沒有與之對應的未完成的請求訊息時,就會收到一條響應控制訊息。) |
4 | Entity Not Selected. A data message was received when not in the SELECTED state. (實體 處於 Not Selected。當未處於 SELECTED state 時,接收到一條資料訊息。) |
5-127 | Reserved for subsidiary standard-specific reasons for reject. (保留為附屬標準特定的拒絕原因。) |
128-255 | Reserved for local entity-specific reasons for reject. |
4.2.8 SType=9 Separate.req
使用SType為9的HSMS訊息用於立即終止HSMS通訊。除了SType值外,它與Deselect.req訊息相同。其目的是立即終止HSMS通訊。
5、 特別說明
如果檢測到通訊故障,實體應終止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 超時則認為這次傳輸失敗。
6、 HSMS的實現要求
HSMS的實現必須提供以下引數設定。
所有引數的範圍和解析度必須至少如表中所示。所有引數必須儲存方式為斷電保留,如果電源故障或重新載入系統軟體,應保留設定。
Parameter Name | Value Range | Resolution | Typical Value | Description |
---|---|---|---|---|
T3 Reply Timeou | 1-120 seconds | 1 second | 45 seconds | Reply timeout. Specifies maximum amount of time an entity expecting a reply message will wait for that reply. |
T5 Connect Separation Timeout | 1-120 seconds | 1 second | 10 seconds | Connection Separation Timeout. Specifies the amount of time which must elapse between successive attempts to connect to a given remote entity. |
T6 Control Transaction Timeout | 1-120 seconds | 1 second | 5 seconds | Control Transaction Timeout. Specifies the time which a control transaction may remain open before it is considered a communications failure. |
T7 NOT SELECTED Timeout | 1-120 seconds | 1 second | 10 seconds | Time which a TCP/IP connection can remain in NOT SELECTED state (i.e., no HSMS activity) before it is considered a communications failure. |
T8 Network Intercharacter Timeout | 1-120 seconds | 1 second | 5 seconds | Maximum time between successive bytes of a single HSMS message which may expire before it is considered a communications failure. |
Connect Mode | PASSIVE, ACTIVE | ----- | ----- | Connect Mode. Specifies the logic this local entity will use during HSMS connection establishment. |
Local Entity IP Address and Port number | determined by TCP/IP conventions | ----- | ----- | Required for any entity operating in PASSIVE mode. Determines the address on which the local entity will listen for incoming connection requests. |
Remote Entity IP Address and Port Number | determined by TCP/IP conventions | ----- | ----- | Required for any entity operating in ACTIVE mode. Determines the address of the remote entity to which the local entity will attempt to connect. |
注意:上面顯示的引數預設值為小型網路(10個或更少節點)。可能需要針對較大的網路配置來調整設定。