OBD 車輛資料
通過兼容的藍牙適配器讀取車輛提供的轉速、水溫、油溫、燃油及其他參數。本文說明讀取條件、參數配置、資料更新,以及讀數在儀表和行程中的使用規則。
車輛參數與讀取結果
OBD 用於讀取車輛控制器提供的資料。車輛控制器也稱 ECU,負責發動機、變速箱等系統;CapDrive 通過適配器向這些控制器發送請求,再把收到的資料換算成讀數。
App 中的一個“參數”就是一項要讀取和顯示的資料,例如發動機轉速、冷卻液溫度或某個狀態。它儲存讀取請求、換算公式和單位。數值參數可用於數字、進度或曲線;狀態參數可以通過文本映射顯示為 D、P 等文字。
例如,冷卻液溫度參數可以使用請求 0105 取得一個資料位元組 A,按 A - 40 換算。若回傳位元組的十進制值為 123,結果就是 83 °C。連線方式、請求定義和換算規則都正確,才能得到可用讀數。
車輛支持哪些參數,取決於車型、年款、動力系統及控制器狀態。只有車輛實際提供的值才能被讀取,修改名稱或單位不會增加車輛本身的資料能力。
支持範圍與使用條件
車輛 OBD 連線需要 CapDrive Plus、支持 ELM327 指令的 藍牙低功耗(BLE)適配器,以及 iPhone 的藍牙權限。當前不支持經典藍牙和 Wi-Fi 適配器。
適配器插入車輛 OBD 接口並按車輛要求通電後,App 才能與車輛通信。某些參數要求車輛處於特定狀態,例如控制器已通電、發動機執行或相應系統處於工作狀態。適配器名稱中包含“藍牙”,並不能單獨證明它符合 BLE 與指令要求。
可以在參數列表或參數編輯器中查看、測試 OBD 讀數,不需要先開始一段行程。手機行程是否已開始,不決定車輛會不會回傳水溫、轉速等參數。
CapDrive 支持配置十六進制服務 01、21、22 的讀取請求。普通使用可採用與車輛匹配的預設;具體請求地址和公式以預設或車輛參數定義為準。
連線與設備管理
入口:更多(…)→ 車輛OBD連線。 設備頁顯示附近適配器與已儲存設備,設備設定中儲存該適配器的參數配置。
首次連線與重連
首次連線時,App 會建立藍牙通信、初始化適配器、識別車輛協議,並查詢車輛報告支持的標準參數。成功後將可初始化的標準參數加入該設備列表。標準參數是否在當前狀態有值,還需要看實際讀取結果。
已有設備重連時繼續使用原來的配置,包括修改過的參數和主動清空的列表。刪除參數後,重連不會把它重新加回來。需要補充讀數時,可導入預設或新增參數。
當前資料源
“當前設備”指正在向 CapDrive 提供車輛資料的那台適配器。同一時間只有一台設備作為當前資料源。各台設備的參數和設定獨立儲存;換到另一台設備時,不會自動沿用前一台設備的參數引用。
斷開連線會保留配置。忽略裝置會移除該設備的配置與緩存。需要遷移參數時可導出配置,再導入目標設備;自定義儀表應重新選擇目標設備下的參數。
參數預設與配置檔案
預設是一組已經寫好的參數讀取配置,省去逐項填寫請求與公式。標準 OBD-II 預設提供標準參數,車型預設提供相應車型的參數定義。選擇車型預設時應核對年款與動力版本。
導入到指定設備
從設備參數列表底部打開配置庫。App 內下載會進入該設備的導入介面;瀏覽器下載得到 JSON 檔案,可在設備設定菜單中選擇 匯入設定。
導入列表預設不勾選,只儲存明確選中的參數。可以先查看名稱與當前讀數,再通過右側齒輪查看該項配置。關閉導入介面不會儲存尚未確認的草稿。
重復項與配置更新
已有相同讀取方法、解碼規則與輸出單位的參數會標記為重復,並繼續使用原來的參數標識符。僅修改顯示名稱,不會讓同一個參數變成新的讀取項。
一個請求可以提供多個參數,例如同一響應中的兩個溫度;名稱相同也可能來自不同控制器或不同公式,因此不能只按名稱判斷重復。修改了請求或解碼規則的項目會作為新的參數導入,不會僅憑名稱覆蓋舊項。
導入到另一台適配器後,會建立目標設備自己的參數引用。自定義儀表應在輸入綁定中重新選擇目標設備的對應參數;保持輸入標識符不變,無需修改程式碼。
檔案約束
配置採用 JSON,格式標識為 capdrive.obd,appVersion 為所需的 App 版本;導出時寫入當前 App 版本號。版本不足時會提示升級。單個檔案最大 5 MiB,最多包含 3,000 個參數。檔案儲存讀取配置,不包含設備的藍牙連線,也不保證所有項目在目標車輛上可讀。
參數配置與解碼
通過參數右側的齒輪打開編輯器。下面按“向車輛讀取什麼 → 怎樣換算 → 怎樣判定有效”的順序說明欄位。測試讀取使用編輯器中的當前配置檢查結果;點擊儲存後,修改才成為設備的已儲存配置。
名稱與更新頻率
名稱用於辨認車輛參數。內部標識符由 App 自動管理,不在參數編輯器中填寫,也不是請求 PID;導出的預設不攜帶設備本機標識符。儀表腳本使用自己定義的輸入標識符,再通過輸入綁定選擇車輛參數。
**讀取間隔(秒)**以秒填寫,範圍為 0.3–99999。例如 1 秒錶示目標查詢間隔為 1 秒,實際更新還受車輛響應、其他請求與當前讀取需求影響。參數列表的可見項目、儀表選擇和行程資料用途會產生讀取需求;僅導入參數不會讓整份列表始終按固定頻率輪詢。共享同一請求的參數可以復用一次響應。
請求設定
| 欄位 | 含義與填寫方式 |
|---|---|
| 服務 | 請求的類別,使用十六進制編號。例如請求 0105 的服務為 01。 |
| PID | 該服務中的資料項編號。例如 0105 的 PID 為 05;01、21 使用兩位 PID,22 使用四位 PID。 |
| 請求 CAN ID | 接收請求的車輛控制器地址。留空時由協議採用功能尋址方式;已匹配的預設通常應保留原地址。 |
| 響應 CAN ID 過濾 | 指定採用哪個控制器的響應,避免多個控制器回傳資料時選錯來源。 |
| 擴展目標地址、擴展接收地址 | 額外的通信尋址配置,供需要它的車輛協議使用。 |
| 響應超時參數 | 適配器使用的十六進制超時配置,不以秒填寫;它與讀取間隔是不同設定。 |
| 自定義 CAN 流控制 | 用於需要特定流控制配置的請求,按相應車輛定義使用。 |
換算公式、位元組順序與單位
車輛響應通常是資料位元組。A 表示第一個資料位元組、B 表示第二個,依此類推,不包括協議頭。公式支持算術、位運算、比較、邏輯運算和條件表達式;它不是可以呼叫任意 JavaScript 函式的腳本。
例如,冷卻液溫度使用 A - 40;標準發動機轉速使用 (A * 256 + B) / 4。若 A = 26、B = 248,後者得到 1726 rpm。一個參數的公式應與該請求回傳的位元組含義一致。
位元組順序規定如何解釋多位元組欄位:大端把高位位元組放在前面,小端把低位位元組放在前面。App 按配置處理順序後再執行數值公式,公式不應再次重復交換位元組。
公式結果的單位與顯示單位需要區分。修改自定義單位名稱只改變標注,不會修改公式數值;對已有標準物理量選擇兼容的顯示單位時,App 可執行相應換算。請核對公式使用的原單位,避免重復換算。
讀取條件與有效範圍
| 配置 | 實際作用 |
|---|---|
| 最少響應位元組數 | 排除長度不足的回傳,防止缺少位元組時繼續計算。 |
| 讀取條件 | 對原始響應位元組計算條件,例如 A != 0。結果為零、缺少位元組或計算失敗時,本次讀數不可用。 |
| 最小值、最大值 | 對數字結果限幅。例如有效範圍配置為 0–100 時,120 會顯示為 100。最大值需大於最小值;未設定最小值時按零處理,僅設定最小值不會單獨限幅。 |
| 有效下限、有效上限 | 排除無效結果,邊界本身也不包含。例如上限為 100 時,結果大於或等於 100 都不可用。 |
響應先通過長度和讀取條件檢查,再解碼。數字結果先限幅,再檢查有效上下限;無法得到有限數值時不輸出讀數。讀取條件使用位元組順序轉換前的原始響應。
文本映射
文本映射把公式得到的某個數值顯示為文字,例如 1 → D。鍵支持小數和負數,必須是唯一的有限數值,1.5 與 1.50 代表同一項。文字允許為空字串。
命中映射時回傳對應字串;未命中時,開啓 未匹配時返回原數值 就回傳數字,關閉則回傳 null。這項未匹配設定在存在映射時適用。命中的文字不會繼續執行數字限幅。
因此,同一項參數可能回傳數字、文字或空值,儀表程式碼應按參數實際類型處理。出現“某些值能顯示、另一些值消失”的情況時,應檢查映射是否命中及未匹配設定。
儲存與錯誤提示
無效配置會指出欄位與原因,修正後再儲存或測試。服務 01、21 的 PID 為兩位十六進制數,22 為四位;CAN ID 為 3 或 8 位,擴展地址與超時參數為兩位。讀取間隔為 0.3–99999 秒,最少響應位元組數為 0–4096 的整數,公式與讀取條件各最多 1,024 個 UTF-8 位元組。數值必須有限,最小值不能大於最大值,有效下限必須小於有效上限;文本映射鍵不能重復。
行程資料替換
替換行程資料讓基礎讀數使用指定的 OBD 參數。例如,把一個車輛速度參數指定為“速度”後,基礎速度欄位、相關內置儀表及行程記錄可使用這個車輛讀數。
可替換的目標包括速度、縱向 G 值、橫向 G 值、俯仰角和側傾角。速度接受 km/h 或 mph,加速度接受 g 或 m/s²,角度接受度或弧度。App 會按目標需要換算單位。
替換要求參數提供合適的數字、單位與範圍。存在文本映射的參數不能用於行程替換;超出配置範圍的原始結果也會被拒絕,不會把限幅後的邊界值當作有效行程測量。
有有效 OBD 讀數時使用該來源;讀數缺失、過期或無效時回退到手機資料。手機來源也不可用時,該基礎讀數仍然可能為空。普通參數導入不會自動指定替換目標。
在自定義儀表中單獨顯示水溫、轉速等參數,可直接使用它們的 OBD 引用,無需配置行程替換。
自定義儀表接入
在 儀表設定 → 輸入綁定 旁點齒輪進入 參數設定,添加一個 OBD 資料 輸入,例如標識符 coolant。回傳輸入綁定,為它選擇設備下的冷卻液溫度參數。腳本通過 $data.current.coolant 讀取;車輛參數的 UUID 不用寫進程式碼。
讀數包含 value 和 unit,例如 { value: 83, unit: '°C' }。文字映射也可能回傳字串,數字格式化前應檢查類型。未綁定時整個輸入為 null;已綁定但暫時沒有讀數時,value 為 null,unit 仍取配置單位。
導入他人作品或更換適配器後,重新綁定已有輸入即可沿用程式碼。預期類型用於提示,不強制轉換車輛回傳值。預覽使用模擬輸入,確認實車資料時應檢查當前設備與 測試讀取。
資料有效性與故障診斷
讀數狀態
連線有效、收到響應和讀數有效是三個不同條件。響應可能因長度不足、讀取條件不滿足、公式無效或文本映射未命中而無法產生可用值。
執行時讀數具有有效期。斷開連線、讀取失敗或資料過期後,儀表與行程替換不應繼續把舊值作為當前有效資料。參數列表可以保留最近一次成功讀數用於展示,該展示值不等於仍有有效的即時輸出;可使用 測試讀取 檢查當前請求結果。
零是有效數值,空值表示當前沒有可用讀數。文本映射中的空字串是已匹配的文字結果,也與缺測不同。
按故障層級定位
| 表現 | 對應檢查範圍 |
|---|---|
| 無法發現設備 | 適配器供電、BLE 類型、iPhone 藍牙與 App 權限。 |
| 藍牙已連線但初始化失敗 | 適配器指令支持、車輛通信狀態與協議識別。 |
| 參數列表為空 | 當前設備的已儲存配置、首次能力查詢結果,以及是否主動清空過列表。重連不會自動恢復已刪除項。 |
| 單個參數沒有有效讀數 | 查詢地址與 PID、響應長度、讀取條件、解碼公式、範圍及文本映射。 |
| 數值存在但含義或單位異常 | 預設適用車型、位元組順序、公式和單位是否一致。 |
| 列表顯示舊值,儀表沒有值 | 當前讀數是否過期或讀取失敗;列表展示緩存不代表即時資料有效。 |
| 有有效讀數但自定義儀表不顯示 | 當前設備、所選參數、表達式,以及程式碼對數字、文字和空值的處理。 |
| 行程替換未生效 | 替換目標、參數數值類型、單位與範圍兼容性,以及讀數有效性。 |
問題反饋可包含以下信息,以區分連線問題、配置問題和顯示問題:
- 車型、年款、動力版本及適配器型號。
- 當前設備、預設及參數名稱。
- 測試讀取的結果或具體錯誤。
- 影響全部參數還是個別參數,以及問題發生在參數列表、行程替換還是自定義儀表。