程式已啟動不等於可以接受工作
PLC、閘道、資料庫與HMI一起上電時,各自完成初始化的時間不同。HMI已開啟、網路埠也可連,仍可能沒有有效資料或可用的寫入流程。先把啟動、存活、就緒與業務可用分開,後續工作等待真正需要的條件,而不是固定延遲幾秒就開始。
畫出依賴關係:採集服務需要設備連線與正確映射,寫入服務需要資料庫結構與權限,畫面需要可判讀的資料品質。不是所有依賴都必須阻止所有功能;報表可暫時離線,控制命令是否可用則依工程需求另外判定。
本文適用於工控周邊服務與整合啟動測試,不提供PLC安全啟動或設備自動復歸邏輯。Docker Compose作服務依賴概念例子,只有實際使用該平台時才適用其設定;不能把容器就緒機制當成Q系列CPU或通訊模組的內建功能。
先列每項服務的就緒證據、等待上限、失敗提示與恢復方式。只寫「等資料庫」太模糊,要說明是能建立連線、完成必要結構、取得指定權限,還是完成特定讀取驗證。檢查應低負擔且不產生正式業務副作用。
用時間線找出過早送出的請求
教學時間線為零秒各程式啟動,三秒網路可用,五秒資料庫可連,八秒結構檢查完成,十二秒閘道取得第一組有效來源資料。若HMI四秒就送需要資料庫與來源都就緒的請求,失敗是可預期的,不應只用增加一次重試掩蓋依賴設計。
把畫面顯示分成啟動中、等待哪個依賴、可用與降級。五秒資料庫可連時仍顯示等待結構檢查;十二秒來源確認後才開放相應功能。使用者應看到等待原因與已經經過多久,不能只看到沒有說明的轉圈圖示。
若某個唯讀歷史頁只依賴資料庫,八秒後可先使用,不必等即時閘道。反之,需要當前設備狀態的命令頁不能因歷史資料可讀就開放。依賴要按功能拆分,避免一個非必要服務延遲就把整個系統全部鎖死。
完成後記錄每個就緒條件實際成立時間,以及第一個業務請求送出時間。請求應在其所需條件確認後才開始;若等待時間超過約定,明確進入失敗或受限狀態,不能永遠重試卻沒有可操作的診斷。
上述秒數只作離線案例。現場時間受設備初始化、網路協商、資料量與版本影響,先量測正常與較慢情境,再制定合理等待上限。把某次剛好成功的五秒延遲當成所有開機都足夠,通常經不起冷啟動或更新後的差異。
用就緒條件取代脆弱的啟動順序
先啟動資料庫再啟動應用,只保證啟動動作順序,不保證資料庫已能完成應用所需操作。Docker Compose官方文件也區分容器運行與就緒,可用健康檢查及相應依賴條件表達等待;實際設定仍要核對使用版本與檢查內容。
健康檢查必須對應能力。只檢查程序存在,無法發現資料庫權限錯誤;只檢查通訊連線,無法發現映射錯或來源品質不良。但也不要每次檢查都執行昂貴完整報表,應挑能代表必要能力的輕量、可重複且無破壞操作。
等待策略包含逾時、退避與可觀察的嘗試次數。多個客戶同時開機若以極短固定間隔密集重試,可能拖慢正在初始化的服務。依需求設有限重試或持續低頻等待,對無法自行恢復的設定錯誤則明確回報,不反覆撞同一個錯誤。
循環依賴要先拆清。例如閘道等報表服務確認、報表服務又等閘道有資料,兩邊可能永遠不就緒。分開基本服務啟動與資料可用狀態,或重新設計握手責任,不能靠隨機先開哪個程式解決。
初始化必須可重做而不重複建立業務資料。服務重啟時建立連線、載入設定與恢復佇列可以重試,但不能每次就緒都新增一次開工事件或重送舊啟動命令。初始化紀錄與正式業務請求使用不同識別和完成條件。
啟動後依賴消失也要測
就緒不是永久保證。資料庫稍後中斷、閘道失去設備或設定版本改變時,相關功能應退回受限狀態並保留原因。只在啟動時檢查一次,之後永遠顯示正常,會讓恢復流程比第一次開機更不可靠。
恢復時重新核對版本與資料有效性,不只看連線重新建立。閘道可能先回傳舊快取,資料庫可能仍在恢復,服務也可能連到備援但結構版本不同。依賴恢復後如何補送、重查與開放功能,列為獨立的驗收案例。
失敗時先定位最後一個未滿足的條件,查其設定、權限、版本與實際回應。不要先把所有等待時間放大,因為錯帳號或不存在的資料表再等一小時也不會自行修好。保留首次錯誤與後續狀態,避免只看到最後一次逾時。
驗收包含正常順序、反向順序、全部同時啟動、某依賴延遲、永久不可用及運行中重啟。每次固定初始狀態,核對沒有過早請求、沒有重複業務動作、等待提示正確且恢復後資料可信。所有動作案例在隔離環境完成。
練習與常見問題
練習:服務A三秒存活、七秒資料可用,服務B依賴A的資料,五秒啟動。B應等待至資料條件成立再處理相應工作,不能只因A程序存在就開始。若約定等待上限十秒而A始終未就緒,B應顯示清楚受限原因及後續重試策略。
交付時附依賴圖、就緒檢查定義與各案例時間線。尚未測試的冷啟動、備援切換或設備恢復分開列出,不將一次正常開機推定成所有啟動組合都已驗證。
問:多等幾秒就能解決啟動競爭嗎?答:可能暫時改善,但應以實際就緒條件控制依賴。
問:連線成功等於資料有效嗎?答:還要檢查映射、品質、版本與所需能力。
問:健康檢查通過後就不必再監控嗎?答:依賴可能稍後失效,需要運行與恢復處理。
問:服務重啟可以自動再送一次命令嗎?答:先確認原命令狀態與重送語意,不能盲目重做業務動作。
參考:Docker Compose Control startup and shutdown order:啟動順序、健康檢查與就緒的區分;PLC行為另依專案核對。