← 所有文章

FIELD NOTES / 維護與故障排查

端到端命令追蹤如何串起請求 執行與回覆

維護與故障排查作者:站長預估 5 分鐘閱讀

以穩定命令識別串接請求、接受、執行與回覆,分清重試、未知結果及實際完成證據。

本文目錄

先把按下按鈕拆成幾個可觀察階段

操作員按下設定,畫面顯示逾時,設備卻可能已經接受。要判斷能否重試,先把使用者請求、服務接收、閘道轉送、控制器接受、執行完成與結果回覆串起來。只有一筆「傳送失敗」日誌,無法說明命令停在哪裡,也不能證明設備沒有動作。

為每個業務命令建立穩定命令識別,保存目標、命令種類、參數摘要、提出者與有效期限。一次傳輸嘗試另有嘗試識別,網路追蹤也可有自己的trace識別。重試同一命令時保留業務身分,不能每次換成新命令後期待下游自動去重。

本文適用於HMI、服務、閘道與PLC之間的追蹤設計,W3C Trace Context只作服務間傳遞追蹤資訊的參考。它不替PLC實作命令握手,也不保證設備只執行一次;實際控制器狀態與冪等能力仍須按專案設計與驗證。

先訂清楚每個完成用語。通訊已送出、暫存器寫入成功、控制器已接受與機械動作完成是不同事實。畫面若要顯示「設定生效」,就需要對應有效設定的回讀或確認,不能只用網路傳送成功的回覆。

用一筆設定命令畫出完整生命週期

教學命令C001要求測試設備把目標溫度設為二十五點三。零毫秒畫面送出,二十毫秒服務接收,四十毫秒閘道轉送,六十毫秒控制器接受,一百二十毫秒有效設定回讀符合,一百五十毫秒畫面收到完成。這些時間是離線示例,不是設備性能保證。

每階段紀錄都帶C001,並保存本層嘗試識別、狀態、時間與結果。參數可保存受控的必要欄位或摘要,足以區分同一命令是否被改內容;不要把密碼、完整憑證或無關個人資料寫進追蹤欄位。

若控制器只支援短序號,可由閘道保存C001與來源會話或啟動世代、控制器序號的映射。短序號回繞或設備重啟後不能直接重用成相同身分,否則舊完成回覆可能被配到新命令。映射保存期限需涵蓋可能遲到的回覆。

完成後用C001可以查到所有階段與最終結果,並辨識在哪一層等待最久。跨主機時間未同步時,不直接相減算精確延遲;先用本層單調時間量耗時,跨層時間線標示時鐘限制,避免出現負延遲還被當成正常。

如果某層無法傳遞命令識別,明確記錄映射方法及可能歧義。僅靠相近時間與相同參數配對,在多個命令同時送出時可能配錯;不能把推測關聯畫成已證實的完整鏈路。

處理逾時 重複與內容衝突

假設C001已在控制器生效,但最後回覆遺失。上位應標結果未確認,依契約查詢命令狀態或有效設定,而不是立即宣告未執行再送一個新命令。設定同值可能可重寫,啟動、累加與脈衝命令則未必,必須按命令語意分別設計。

同一命令識別再次到達時,比對目標與有效參數。相同內容可回覆既有狀態或按設計續處理;相同識別但參數改變應拒絕或列衝突,不默默覆蓋。追蹤識別只是關聯工具,真正防重複仍需接受記錄與執行狀態設計。

命令有效期限到期,不代表已接受的動作會自動撤銷。期限用於是否仍可接受新執行的判斷,取消需要另有協定與確認;若設備已開始,可能只能回報執行中或已完成。畫面不能把本地倒數結束直接顯示為設備取消成功。

收到遲到完成時,依命令身分更新原命令,不去結束目前正在等待的另一筆。驗收準備C001慢回覆、C002較快完成的情境,確認兩筆結果不互換。只用單一完成位元而沒有對應握手,容易受到舊狀態影響。

控制器重啟後若無法確認先前命令結果,應保留未知並依工程流程核查,不能自動清成未執行。是否持久保存命令紀錄、如何恢復與何時可以重送,都需要依硬體及應用限制設計,追蹤日誌本身不會補足設備狀態。

把追蹤鏈轉成可用的診斷畫面

列表顯示命令識別、目標、提出時間、目前階段、最後回應與待查原因。展開後看到各階段證據及嘗試,區分業務命令數與傳送次數。C001傳三次仍是一個命令,不能在統計中當成三次已執行操作。

W3C Trace Context定義服務間傳遞追蹤上下文的格式,可用來串接支援的網頁與後端服務。業務命令識別另行保存,不把trace-id當授權或去重保證。若追蹤採樣可能漏掉部分紀錄,重要命令稽核需另有完整性要求。

失敗時從最後一個有可靠證據的階段往後查。服務已接收但閘道未看到,查佇列與轉送;控制器已接受但未完成,查執行條件與診斷;設備完成而畫面逾時,查回覆路徑與匹配。不要所有逾時都歸因於RS485接線。

驗收包含正常完成、參數拒絕、忙碌、提交後回覆遺失、重送、遲到回覆與重啟未知。所有動作案例在隔離測試對象上做,保存來源狀態與回讀證據;僅有服務日誌不等於真實設備狀態已驗證。

練習與常見問題

練習:C010送出兩次,第一個嘗試回覆遺失,第二次查到已完成;C011參數非法被拒絕。應統計兩個業務命令,其中一個完成、一個拒絕,C010有兩次嘗試;不能把第二次完成再算一次設備動作。

另將C010的完成回覆延遲到C011之後,檢查畫面仍把它歸回C010。若只能依目前等待中的命令推定歸屬,應列出介面限制並補強握手,不以操作員通常不會連按作為驗收通過理由。

問:有trace-id就不會重複執行嗎?答:它用於關聯,防重複還需要業務與設備狀態設計。

問:逾時就代表設備沒收到嗎?答:可能已接受甚至完成,只是回覆未確認。

問:取消按鈕按下就算取消成功嗎?答:需要下游接受與結果證據,不能只看本地介面。

問:完成位元為一就能配給新命令嗎?答:要核對命令身分與握手,避免沿用上一筆完成狀態。

參考:W3C Trace Context:跨服務追蹤上下文;本文命令狀態與PLC映射是另行設計的應用契約。

延伸閱讀