一 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:由處于主動模式的本地物體發起連接,

被動模式建立連接程序:
- 獲取一個連接端點,并將其系結到指定的的埠,
- 從埠偵聽從遠程物體發送的連接請求,
- 在收到連接請求后,確認它并表示接受該連接,
主動模式建立連接程序:
- 獲取一個連接端點,
- 向遠程物體(被動模式)所指定的埠發起連接,
- 等待遠程物體確認收到并接受連接請求,
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
使用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,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449004.html
標籤:C#
