跳轉到

Spooling 狀態模型

1. 概述

Spooling 功能允許設備儲存因通訊失敗而無法傳送給主機的訊息。當通訊恢復時,已暫存的訊息會按順序傳送給主機。

2. Spooling 狀態圖

stateDiagram-v2 [*] --> SPOOL_INACTIVE SPOOL_INACTIVE --> SPOOL_ACTIVE: Communication Lost & Spooling Enabled SPOOL_ACTIVE --> SPOOL_TRANSMITTING: Communication Restored SPOOL_TRANSMITTING --> SPOOL_INACTIVE: All Messages Transmitted SPOOL_TRANSMITTING --> SPOOL_ACTIVE: Communication Lost Again SPOOL_ACTIVE --> SPOOL_INACTIVE: Spool Purged / Disabled SPOOL_ACTIVE --> SPOOL_FULL: Spool Capacity Reached SPOOL_FULL --> SPOOL_TRANSMITTING: Communication Restored SPOOL_FULL --> SPOOL_INACTIVE: Spool Purged

3. 狀態定義

狀態 說明
SPOOL INACTIVE 正常操作。訊息直接傳送給主機。
SPOOL ACTIVE 通訊中斷。訊息正在儲存到暫存區。
SPOOL FULL 暫存區已達容量上限。最舊的訊息可能會被覆寫。
SPOOL TRANSMITTING 暫存的訊息正在傳送給主機。

4. 轉換表

# 目前狀態 觸發條件 下一狀態 動作
1 SPOOL INACTIVE 通訊失敗 SPOOL ACTIVE 開始暫存訊息
2 SPOOL INACTIVE 主機請求 spool (S2F43) SPOOL INACTIVE 設定 spool streams
3 SPOOL ACTIVE 通訊恢復 SPOOL TRANSMITTING 開始傳送暫存資料
4 SPOOL ACTIVE 達到容量上限 SPOOL FULL 處理溢位
5 SPOOL ACTIVE Spool 停用/清除 SPOOL INACTIVE 清除暫存區
6 SPOOL FULL 通訊恢復 SPOOL TRANSMITTING 開始傳送暫存資料
7 SPOOL FULL Spool 清除 SPOOL INACTIVE 清除暫存區
8 SPOOL TRANSMITTING 所有訊息已傳送 SPOOL INACTIVE 恢復正常操作
9 SPOOL TRANSMITTING 通訊中斷 SPOOL ACTIVE 繼續暫存

5. Spooling 設定

5.1 可暫存的 Streams

Stream 功能 Spool 備註
S5 警報訊息 所有警報事件都會暫存
S6 收集事件 事件報告會暫存
S6 追蹤資料 [是/否] 追蹤報告(可設定)

5.2 Spool 參數

參數 說明
最大 Spool 大小 [10000] 筆訊息 暫存區中的最大訊息數
溢位動作 [覆寫最舊 / 拒絕新訊息] 暫存區滿時的動作
Spool Streams S5, S6 要暫存的 Streams

6. 相關訊息

訊息 方向 說明
S2F43 H→E 定義 Spool Streams
S2F44 E→H 定義 Spool 確認
S6F23 E→H 請求暫存資料
S6F24 H→E 暫存資料請求授權

6.1 S2F43 - 定義 Spool Streams

結構:

S2F43 W
<L[n]
  <L[2]
    <STRID>           // Stream ID
    <STSPM>           // Spool 旗標 (0=關閉, 1=開啟, 2=清除)
  >
  ...
>

6.2 S2F44 - 定義 Spool 確認

結構:

S2F44
<L[n]
  <L[2]
    <STRID>           // Stream ID
    <STSPACK>         // 確認碼
  >
  ...
>

STSPACK 值:

說明
0 OK,spool 已定義
1 Stream 無效
2 Stream 不支援 spooling

6.3 S6F23 - 請求暫存資料

當通訊恢復時,設備可請求權限傳送暫存資料:

結構:

S6F23 W
<RSDC>                // 請求 spool 資料筆數

6.4 S6F24 - 暫存資料請求授權

結構:

S6F24
<RSDA>                // 0=傳送, 1=不傳送, 2=清除

7. Spool 傳送時序

sequenceDiagram participant Host participant Equipment Note over Equipment: Communication Restored Equipment->>Host: S6F23 (RSDC=150) Host-->>Equipment: S6F24 (RSDA=0, Transmit) Note over Equipment: Begin Spool Transmission loop For each spooled message Equipment->>Host: Spooled Message (S5F1, S6F11, etc.) Host-->>Equipment: Acknowledge end Equipment->>Host: S6F11 (SpoolTransmitComplete) Host-->>Equipment: S6F12 Note over Equipment: State: SPOOL INACTIVE

8. 相關狀態變數

SVID 名稱 類型 說明
[4001] SpoolState U1 目前 spooling 狀態
[4002] SpoolCount U4 暫存區中的訊息數
[4003] SpoolCapacity U4 最大暫存容量
[4004] SpoolOverflowCount U4 因溢位而遺失的訊息數

SpoolState 值:

狀態
0 SPOOL INACTIVE
1 SPOOL ACTIVE
2 SPOOL FULL
3 SPOOL TRANSMITTING

9. 相關收集事件

CEID 名稱 說明
[4001] SpoolActivated 因通訊中斷而開始 Spooling
[4002] SpoolFull 暫存區達到容量上限
[4003] SpoolTransmitStart 開始傳送暫存資料
[4004] SpoolTransmitComplete 所有暫存訊息已傳送完成
[4005] SpoolPurged 暫存區已清除

10. 相關警報

ALID ALTX 類別 說明
[4001] Spool Overflow 警告 暫存區達到容量上限,訊息可能遺失

11. 實作備註

11.1 Spool 儲存

  • 暫存訊息儲存在非揮發性記憶體中
  • 訊息在設備重新啟動後仍會保留
  • 維持 FIFO 順序

11.2 傳送順序

傳送暫存訊息時: 1. 訊息按時間順序傳送(最舊的優先) 2. 設備等待確認後再傳送下一筆訊息 3. 如果傳送失敗,訊息會保留在暫存區

11.3 Spool 清除

Spool 可透過以下方式清除: - 主機命令(S2F43 搭配 STSPM=2) - 操作員動作(如果允許) - 溢位時自動清除(如果已設定)