OCPP 錯誤碼
OCPP 1.6 為 StatusNotification 的 errorCode 欄位定義了 16 個取值。其中十五個描述故障,一個表示一切正常。
OCPP 錯誤碼出現在 StatusNotification 的 errorCode 欄位中。它是一個封閉列舉——充電樁不得自行發明取值——正是這一點才讓全網範圍的故障統計成為可能。
這個集合刻意做得很小,這也是它最大的侷限。十六個碼無法描述充電樁出問題的所有方式,因此廠商把真正的細節放進旁邊的自由文字欄位 vendorErrorCode。兩個都要讀。標準碼告訴你類別,廠商碼告訴你實際發生了什麼。
| 錯誤碼 | 意義 | 常見成因 | 通常處理方式 |
|---|---|---|---|
NoError | 無故障。隨正常狀態變化一起回報。 | 正常運作。隨一般狀態變更一併送出。 | 無需處理 |
ConnectorLockFailure | 接口上鎖或解鎖失敗。 | 機械鎖扣卡住、插座內有異物,或鎖定致動器失效。 | 現場處理 |
EVCommunicationError | 與車輛的通訊失敗。多半是 Control Pilot 的問題。 | Control Pilot 訊號通訊失敗。多半是車輛或線材的問題,而非充電樁。 | 重試,仍失敗則現場處理 |
GroundFailure | 漏電保護器動作。 | 漏電保護裝置跳脫。視為安全類故障。 | 現場處理 |
HighTemperature | 內部溫度過高。 | 環境溫度過高、散熱口被遮蔽,或長時間大電流輸出。 | 通常會自行恢復 |
InternalError | 某個內部硬體或軟體元件出現故障。 | 某個硬體或軟體元件失效。細節要看廠商錯誤碼。 | 先遠端重置,仍失敗則現場處理 |
LocalListConflict | 更新過程中本機授權名單版本衝突。 | SendLocalList 更新與充電樁持有的版本衝突。 | 遠端修復 |
OverCurrentFailure | 過電流保護動作。 | 過電流保護跳脫,通常是車輛或線材故障。 | 通常會自行恢復 |
OverVoltage | 供電電壓高於允許範圍。 | 供電電壓高於允許範圍。屬於電網側問題。 | 聯絡供電方 |
PowerMeterFailure | 電錶故障。 | 電能表停止回應。此後的計費資料都不可信。 | 現場處理 |
PowerSwitchFailure | 功率開關或接觸器故障。 | 接觸器未能正常分閘或合閘。 | 現場處理 |
ReaderFailure | RFID 讀卡機故障。 | RFID 讀卡機故障。充電樁可能仍可透過遠端啟動使用。 | 現場處理 |
ResetFailure | 請求的重啟失敗。 | 一次請求的重置未能完成。 | 先遠端重置,仍失敗則現場處理 |
UnderVoltage | 供電電壓低於允許範圍。 | 供電電壓低於允許範圍。屬於電網側問題。 | 聯絡供電方 |
WeakSignal | 無線通訊訊號過弱。 | 行動網路或 Wi-Fi 訊號太弱,無法穩定維持連線。 | 現場處理 |
OtherError | 其餘各碼都描述不了的故障。 | 其他錯誤碼都無法描述的故障。請查看 vendorErrorCode。 | 取決於廠商 |
NoError 並不等於「沒有訊息」
NoError 會被持續送出,因為每一次一般的狀態變更都帶有 errorCode,而正常的狀態轉換用的正是這個取值。如果監控管線統計「帶錯誤碼的 StatusNotification」卻不過濾 NoError,得出的故障率基本會是 100%。
影響整站的故障應回報在連接器 0 上
共用硬體的故障——電表、通訊模組、主接觸器——屬於 connectorId: 0,它指的是充電樁本身。某個特定插座的故障則屬於那個連接器。凡是把所有故障都回報在連接器 1 上的充電樁,都會讓人無法分辨「一個插座壞了」和「整站壞了」。
錯誤碼不會自己清除
協定中沒有「故障已解除」這樣的訊息。故障要靠之後一則攜帶 NoError 的 StatusNotification 來清除;如果充電樁始終不送,你的儀表板就會永遠顯示這個故障。重連之後對齊狀態時,用 TriggerMessage 請求 StatusNotification,就是詢問當前真實狀態的方式。
OCPP 2.0.1 沒有錯誤碼
這張表是 OCPP 1.6 的表,2.0.1 沒有對應物。2.0.1 的 StatusNotification 根本沒有 errorCode 欄位——故障改為透過 NotifyEvent 回報,針對裝置模型中的某個元件與變數觸發,並帶有 0 到 9 的嚴重等級。
結果是表達力更強,卻遠沒那麼方便:不再有十六個固定取值可供 switch,因為一個站點會回報什麼,取決於它自己的裝置模型。任何要從 1.6 遷移到 2.0.1 的故障處理邏輯,都必須重建,而不是單純對映。
廠商錯誤碼
vendorErrorCode 是自由文字,與 vendorId 搭配以說明它屬於誰的命名空間。它沒有標準化,OCPP 中也沒有文件,卻往往是唯一能指出真實故障的東西。從第一天起就把它收集起來——事後為整個車隊的歷史資料補上這一項是做不到的。