PCIe Bus 偏移導致通訊斷線

當 SuperCAT 報 Open() Failed to open link layer!,別急著試錯。故障排查不是盲目 Trial and Error,而是用邏輯不斷縮小範圍的過程。這篇帶你走一遍系統化診斷:從鎖定環境、驗證服務、監聽日誌,到揪出 PCIe Bus 偏移這個根因。

排查邏輯地圖

整個排查是一個漏斗式篩選:每一階段排除一層可能,最後只剩唯一真相。先在腦中建立這張地圖。

1 環境鎖定 關更新/省電/插槽 2 服務自檢 -startlog / -stop 3 日誌監聽 Log Level 2 + Putty 4 數值比對 Monitor vs 裝置管理員 5 根因修復 重新設定/還原插槽

第一階段 · 穩定基礎盤點

分析程式碼或通訊協定之前,第一步永遠是鎖定環境。如果作業系統本身處於變動狀態,任何診斷結果都失去可信度。確保 RTOS 穩定運作的核心,在於維持環境的「絕對靜態」。

盤查項目 標準設定值 忽略此項的風險
Windows 自動更新 徹底關閉 背景無預警變更底層元件或設定,系統重啟後設定失效
系統電源模式 設定為「高效能」 省電機制會使網卡/PCIe 裝置降速或暫停供電,引發嚴重通訊延遲
休眠機制 徹底關閉 喚醒後 RTOS 往往無法正確重新接管硬體,導致通訊中斷
驅動程式狀態 安裝後保持固定版本 隨意更新驅動可能與原本相容的底層介面衝突,破壞穩定性
PCIe 插槽變動 設定後嚴禁變更 即使微小插拔都會觸發系統重新分配 PCIe Bus 編號,使軟體找不到網卡

核心風險就在最後一列。 即便系統報 RTOS has been closed, license not found,只要先確認環境靜態,就能排除外部干擾,把焦點轉到軟體服務與硬體配對的驗證。

第二階段 · 診斷啟動與初步測試

此階段的邏輯是排除核心異常 — 確認 SuperCAT 的核心服務與授權機制能不能運作。如果核心能啟動但功能失效,代表問題不在軟體本身,而是指向外部連接(如網卡通訊層)。

:: 1. 進入工具程式所在路徑
cd C:\Users\ADLINK\AppData\Roaming\ADLINK\runbat

:: 2. 啟動診斷監聽工具以檢查核心狀態
RTOS_service_tool.exe -startlog

觀察視窗最下方,若出現 RTOS started successfully. Ok,代表軟體核心與授權都正常,問題就鎖定在「軟體找不到硬體網卡」。

RTOS_service_tool -startlog 顯示 RTOS started successfully

進行下一步日誌分析前,必須先停止服務,避免系統掛在錯誤狀態:

RTOS_service_tool.exe -stop

第三階段 · 日誌監聽與工具比對

這是診斷思維中最關鍵的證據驅動環節。我們不再猜測,而是透過提高日誌精細度,強制系統暴露硬體溝通的斷點。

  1. 調整日誌層級 — 開啟 RTOS configurator,把 Log Level 設為 2。只有 Level 2 才能完整擷取 Link Layer 初始化(Handshake)的詳細過程。
  2. 啟動監聽器 — 開啟 Putty 連到系統輸出(通常是 Serial 或專屬監聽埠),隨後再次執行 RTOS。
  3. 識別致命錯誤 — 若 Putty 終端出現紅字 Open() Failed to open link layer!,這就是硬體連結層失效的鐵證:系統明確表示,它在指定的門牌號碼找不到網卡。

Putty 顯示 Open() Failed to open link layer 與 Error opening EtherCAT device

揪出「失蹤」的網卡

證據指向網卡位址偏移。接著做「現況」與「設定」的數值並排比對:

  • 設定值(記憶中的位址) — 查 RTOS System Monitor,Assign NIC 記錄的是當初寫入參數的位址。
  • 現況值(真實的位址) — 開 Windows 裝置管理員,看該網卡內容的「位置(Location)」。
NIC bus 5 與 Location bus 5 一致

✔ 正常:Assign NIC = bus 5Location = PCI bus 5 一致 → 通訊正常

NIC bus 5 但 Location 變成 bus 6

✘ 故障:Assign NIC = bus 5Location = PCI bus 6 → Bus 偏移,系統必敗

證據比對清單:

  • Bus Number — 是否依然為 Bus 5?(若變成 Bus 6,系統必敗)
  • Device / Function — 數值是否與設定檔中的 EC_T_LINK_PARMS 完全吻合?

第四階段 · 根因修復與原廠鐵則

一旦確認是 PCIe Bus 偏移導致通訊斷裂,依標準作業程序還原,並建立長期預防機制。

修復執行清單

  • 軟體重置(推薦) — 在 RTOS 設定介面把 NIC Assignment 退回給 Windows 系統,再重新做一次網卡分配與設定,讓系統重新寫入正確的 Bus ID。
  • 硬體還原 — 若問題是新加裝卡片引起,可把卡片移除或退回原本的槽位,試圖恢復原始的匯流排分配。

原廠鐵則:靜態環境宣告 — 要達到工業級穩定,遵守三條:

  1. 環境靜態化 — 保持 OS 靜態,關閉所有會觸發重新掃描硬體匯流排的機制(自動更新、休眠)。
  2. 設定鎖定 — 「設定好所有硬體卡片與 Windows 更新後,再安裝 SuperCAT,之後就不再更動。」這是避免 Bus ID 偏移的唯一真理。
  3. 架構固定化 — 即使不相關的 PCIe 卡片,位置變動也可能觸發主機板重新分配 NIC 位址。嚴禁系統上線後隨意更動任何硬體插槽。

透過這套邏輯,你不再只是在「嘗試修復」,而是在證明真相