三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

4. HSMS通信標準

HSMS (High-Speed SECS Message Services)[8]定義了使用 TCP/IP 作為物理傳輸媒質時的通信接口。HSMS 可以作為 SECS-I 以及其他一些高級通信環境的替代。HSMS 又包括了兩個子標準,分別是 HSMS-SS (High-Speed SECS Message Service Single Selected Mode)和 HSMS-GS (High-Speed SECS Message Service General Session)。HSMS-SS 對母標準中的操作進行了簡化,以便於實際應用。HSMS-GS 定義了使用 HSMS 訪問多個子實體的操作。

4.1 TCP/IP 的使用

HSMS可以使用任何標準 TCP/IP API 進行開發,比如 BSD socket、TLI等。使用標準的 TCP/IP 尋址,默認的端口號為 5000。建立連接的過程如下圖所示:

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

HSMS 把通信實體分為被動模式和主動模式兩種:

  • 被動模式:處於被動模式的實體偵聽線路,接收主動模式的實體的連接請求
  • 主動模式:處於主動模式的實體發起連接請求

被動模式下建立連接的步驟包括:

(1) 獲得一個連接端點,在指定的端口進行偵聽

(2) 偵聽到遠程端點發送的連接請求

(3) 接收連接請求,發送確認

主動模式下建立連接的步驟包括:

(1) 獲得一個連接端點

(2) 向指定端口號的遠程端點發起連接

(3) 等待遠程端點接收連接並返回確認

4.2 HSMS的控制消息

¨ Select.req/Select.rsp

¤ Not Selected 狀態轉化為 Selected 狀態所使用的消息 (Active Entity 發送Select.req)

¨ Deselect.req/Deselect.rsp

¤ 在雙方協議終止通信時使用. 由想要通信終止的一端發送Deselect.req.

¨ Linktest.req/Linktest.rsp

¤ 連接狀態的確認和維護確認, 如果沒有應答則轉換為Not Connected 狀態.

¨ Separate.req

¤ 單方面通知通信終止時使用.

¨ Reject.req

¤ 收到無效消息時發送

4.3 HSMS的狀態轉換

4.3.1 狀態圖

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

HSMS State Diagram

圖中各狀態說明如下:

  • Not Connected 狀態:實體開始偵聽,但是未建立任何 TCP/IP 連接或者之前建立的 TCP/IP 連接已經斷開;
  • Connected 狀態:已經建立一個 TCP/IP 連接,包括 Not Selected 和 Selected兩個子狀態;
  • Not Selected 狀態:Connected 的子狀態,表示沒有創建 HSMS 會話或之前的會話已經結束;
  • Selected 狀態:Connected 的子狀態,表示至少創建了一個 HSMS 會話。

4.3.2 被動模式連接的狀態轉換

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

4.3.3 主動模式連接的狀態轉換

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

4.4 HSMS的消息格式

4.4.1 一般消息格式

HSMS 消息以字節的方式作為單個的流進行傳輸,其格式如圖所示:

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

HSMS Message Format

  • Message Length:一個 4 字節無符號整數,表示其後 Message Header 加上 Message Text 總的字節數,其最小值為十字節。
  • Message Header:消息頭長度為十字節,格式如下圖所示:
三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

HSMS Message Header Structure

其中各項說明如下:

1) Session ID:十六比特無符號整數,最高位必須為零,剩下十五比特用於唯一標識一臺設備。

2) Header Byte 2:對於不同類型的消息取值不同。

3) Header Byte 3:對於不同類型的消息取值不同。

4) PType:表示類型(Presentation Type)為八比特無符號整數,用於枚舉表示層消息類型,即消息頭和消息內容是以何種方式編碼的,PType 取值如下表所示:

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

PType Values

5) SType:會話類型(Session Type)為八比特無符號整數,其取值類型如下表所示:

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

SType Values

6) System Bytes:四字節無符號整數,用於唯一標識一次消息交互。

4.4.2 控制消息格式

HSMS 中的控制消息包括:

(1) Select.req:SType=1,PType=0

(2) Select.rsp:SType=2,PType=0,Header Byte 3 為 SelectStatus 項

(3) Linktest.req:SType=5,Ptype=0,Session ID=0xFFFF

(4) Linktest.rsp:SType=6,Ptype=0,Session ID=0xFFFF

(5) Separate.req:SType=9,PType=0

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

4.5 計時器

4.5.1 回覆超時 T3

回覆超時 T3 (T3 reply timeout)表示一個實體等待回覆消息的最長時間,如果T3 計時器超時則取消這次會話但不斷開 TCP/IP 連接,如果這個實體是設備,則向主機發送 SECS-II S9F9 消息。

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

4.5.2 連接間隔時間 T5

連接間隔時間 T5 (T5 connect separate timeout)表示兩個連接請求之間的時間間隔。過於頻繁的向一個未準備好連接的實體發起連接請求,會加重 TCP/IP 的負荷。因此,當一個主動模式實體發起的連接操作終止後(不論是成功結束還是被遠端實體拒絕),該實體必須等待 T5 計時器超時後發起下一次連接請求。

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

4.5.3 控制會話超時 T6

控制會話超時 T6 (T6 control transaction timeout)表示一個控制會話所能開啟的最長時間,超過該時間就認為這次通信失敗。當發送.req 控制消失時 T6計時器開啟,若在 T6 超時之前收到相應的.rsp 消息則計時器關閉,否則控制消息的發起者將關閉這次會話,並認為出現一個通信故障。

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

4.5.4 Not Select 狀態超時 T7

Not Select 狀態超時 T7 (T7 NOT SELECT timeout)表示當建立了 TCP/IP 連接之後通信處於 Not Select 狀態的最長時間,通信必須在該時間完成 select 操作,否則將會斷開 TCP/IP 連接。

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2

4.5.5 網絡字符超時 T8

網絡字符超時 T8 (T8 network intercharacter timeout)表示成功接收到單個HSMS 消息的字符之間的最大時間間隔。鑑於 TCP/IP 是面向流的通信協議,因此一個 HSMS 通信消息可能被分為若干個 TCP/IP 消息進行傳輸,若 T8 計時器超時則認為這次傳輸失敗。

三. SECS/GEM封裝庫RapidSecs開發手記-SECS/GEM基礎知識-2


分享到:


相關文章: