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¶
結構:
6.2 S2F44 - 定義 Spool 確認¶
結構:
STSPACK 值:
| 值 | 說明 |
|---|---|
| 0 | OK,spool 已定義 |
| 1 | Stream 無效 |
| 2 | Stream 不支援 spooling |
6.3 S6F23 - 請求暫存資料¶
當通訊恢復時,設備可請求權限傳送暫存資料:
結構:
6.4 S6F24 - 暫存資料請求授權¶
結構:
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) - 操作員動作(如果允許) - 溢位時自動清除(如果已設定)