WRX OBD2で車両情報を取得する その14 エンジン回転数以外の項目の返信内容
前回はエンジン回転数以外でELM327を介して車両から取得したい項目(PID)を選び、PLCで各項目個別に要求コマンドを送信出来る様にしました。その後、実際に車両のOBD2ポートにELM327を接続してどの様な返信が来るのか確認したので、今回はその結果についてです。内容は個人的な覚え書きになってしまいそうですが。
返信される文字列(アスキーコード)
まずは各項目の要求となるコマンドを送信して、ELM327から返信される内容の規則性を確認します。基本的にはELM327に対して要求コマンド(例としてエンジン回転数の場合は「010C」)を送信すると、最初に送信した要求コマンドと同じコマンドが返され(010C)、次にレスポンスコードとしてサービスIDに「40」を加えた値(410C)、次に答えとなる値が1バイトから多い項目で40バイトで続いて返されます。各項目内容や返信される答えのバイト数の詳細はWikiにて。
上記が「010C」コマンドでエンジン回転数を要求した場合の返信結果です。答えとなるエンジン回転数は「0A ED」で、さらに計算が必要です。
その後、ELM327に対しては「CR(キャリッジリターン)」を送信する事で前回と同じ項目に対する答えが返信されますが、「CR」を送信した場合は要求コマンドの返信はありません(010C)。返信は下記の様にレスポンスコード(410C)からになります。「CR」は同じ項目の繰り返しの要求時に有効となります。
今回の取得したい項目についても当然ですがこの規則に合っていて、例外はありませんでした。従って項目によってレスポンスコードや答えとなる値が異なっても、注目すべき箇所(データデバイス)は一定です。ただし答えとなる値が、今回取得したいとした項目では1バイトか2バイトの違いがあります。上記のエンジン回転数の答えは「0A CB」(2バイト)ですが、多くの項目では「0A」(1バイト)の部分のみです。この違いについては何らかの対応が必要です。また実際のELM327からの返信は文字列(アスキーコード)なので、数値として扱えるように変換も必要です。
項目別の返信内容(答え)
取得したい項目全ての返信を車両で確認しましたが、今回はアスキーコードの変換やその後の計算はPLCでは行っていません。あくまでタッチパネルに表示された文字列から内容を確認します。
下記の各題名は順番に【項目(PID)・「名称と単位」・答えのバイト数】です。車はアイドリング状態(もしくはエンジンOFFでIG電源ON状態)で、その時にPLCに表示された文字の答え部分のみを抜き出しています。記事を書きながら変換や計算を行っています。計算式などはWikiに記載の内容に基づきます。
04「エンジン負荷(%)」1
文字「64」で10進数では「100」、計算後「39.2(%)」。アクセルを少し踏んで回転数を上げると文字が「39」や「26」に下がる。これを計算すると「22.4」や「10.2」。アイドリング状態で負荷が約40%も掛かるのかと疑問。ただし駆動軸に対する負荷であれば納得。
05「水温(℃)」1
文字「87」で10進数「135」、計算後「95(℃)」。この時の水温は後付けのメーターで98℃だったので、概ね正しい値。誤差はセンサーの位置?
06「短期燃料トリム バンク1(%)」1
文字「7F」で10進数「127」。計算後「-0.78(%)」。Wikiによると燃料トリムとは燃料の量を調整している割合となっている。マイナスであれば減少。アクセルを踏むと文字は「81」や「84」となり、計算すると「0.78」、「3.13」でプラスになる。アクセル開度や空気流量などでECUが細かく調整していそう。瞬間燃費に使える?
07「長期燃料トリム バンク1(%)」1
文字は「81」で10進数「129」。計算後「0.78(%)」。上記とほぼ同じだが「短期」と「長期」の違いは不明。単純に短期に比べると数値の変化するタイミングが長いだけ?
0B「インマニ(ブースト)圧力(kPa)」1
文字は「25」で10進数「37」。計算は不要で「37(kPa)」。ただしWikiでは「絶対圧力」となっているので、大気圧の101.3を引くと-64.3。この時のブースト値は後付けのメーターで「-0.59*100kPa」。アイドリング状態では近い値だが、アクセルを踏むと文字が「1A」、値で「-75.3kPa」に下がった。たまたまブーストが掛かる前の一瞬だったかもしれない。
0C「エンジン回転数(rpm)」2
前回までで取得出来ているので省略。
0D「車速(km/h)」1
文字は「00」で10進数も「0」。計算は不要で「0(km/h)」。ただし走りながらの確認は行っていない。
0F「吸気温度(℃)」1
文字は「6C」で10進数「108」。計算後「68(℃)」。停車状態なのでむしろ温度は高いのかも。
10「MAF空気流量(g/s)」2
文字は「01」と「30」で10進数はそれぞれ「1」と「48」。計算後「3.04(g/sec)」。1秒間に3グラムの空気を取り込んでいる。ぴちょくんが言うには空気1リットルで約1.2gとの事なので、2.5リッター位になる模様。
11「スロットル位置(%)」1
文字は「23」で10進数「35」。計算後「13.7(%)」。アクセルを踏んでない状態でこの値。アクセルを一杯に踏み込むと文字は「C8」で10進数「200」、計算後は「78.4(%)」になる。電子スロットルなので最大最小の補正が必要かもしれないが、そもそもスロットルとはアクセル開度なのかアクチュエーターなのか。
2F「燃料タンクレベル(%)」1
文字は「DE」で10進数「222」。計算後「87.1(%)」。燃料メーターも確かにその位だったが、満タン時などの変化は不明。
33「絶対気圧(kPa)」1
文字は「5F」で10進数「95」。計算は不要で「95(kPa)」。標高を考慮すると合っていそう。また先の「0B インマニ圧力」の基準をこれにすると、「37-95=-58」でブーストメーターとほぼ一致する。
3C「触媒温度(℃)」2
文字は「08」と「B3」で10進数はそれぞれ「8」と「179」。計算後「182.7(℃)」。触媒といってもセンサーがどの位置にあるのか不明。
45「相対スロットル位置(%)」1
文字は「07」で10進数「7」。計算後「2.75(%)」。相対の意味する所が不明。またアクセルを踏んで半分程度の位置で文字「AC」、計算後「67.5(%)」から変化しない。
46「周囲空気温度(外気温)(℃)」1
文字は「40」で10進数「64」。計算後「24(℃)」。実際は15℃程度だったと思う。走行すれば変わるのかも。
47「アブソリュートスロットル位置B(%)」1
文字は「4F」で10進数「79」。計算後「31(%)」。上記の相対に対するアブソリュート(絶対)?こちらもアクセルを踏んで半分程度の位置で文字「D3」、計算後「82.7(%)」から変化しない。
49「アクセルペダル位置D(%)」1
文字は「22」で10進数「34」。計算後「13.3(%)」。アクセルを一杯に踏み込むと文字「A5」、計算後「64.7(%)」。これがアクセル開度?それでも0~100%では無い。
4A「アクセルペダル位置E(%)」1
文字は「22」で10進数「34」。計算後「13.3(%)」で上記と同じ。アクセルを一杯に踏み込むと文字は「A2」、計算後「63.5(%)」で誤差はあるが上記と一緒?
4C「スロットルアクチュエーター(%)」1
文字は「00」で10進数「0」。計算後も「0(%)」。アクセルを踏んで半分程度の位置で文字「FF」、計算後「100(%)」。0~100%の表示にはなっているがアクセルは全開では無い。
5A「相対アクセルペダル位置(%)」1
文字は「00」で10進数「0」。計算後「0(%)」。アクセルを一杯に踏み込むと文字「81」、計算後「50.6(%)」。こちらはアクセルを全開にしても50%程度。
返信された内容を確認してみて
正直な所、どれもこれも微妙な結果で確実と思える値が得られた項目は多くありません。スロットルやアクセルといった項目はやはり何がなんだかという感じですが、別の方法で得られる、または比較の出来る値も無いのでどうしようもありません。普段OBD2ポートに接続して使用しているトラストのインフォメータータッチでは、「スロットル」とされる項目も表示していますが、こちらでは「電圧」の最小値と最大値を設定しています。今回のアクセルやスロットル項目の中で単位が「電圧」になっている物はないのですが、ELM327とOBD2との通信方式によって取得出来る項目も異なり、さらにメーカー独自の通信方式や項目、OBD2ポートで使用していないピンを使用している事もある様です。
今回色々な項目を調べましたが、PLCで個別に扱う場合はこれまでのエンジン回転数と同様に、問題無く変換や計算、その後の表示も可能だという事は分かりました。ただしやはり複数項目を同時に取得する場合の方法が見えていません。個別の項目でその答えの意味が分からない物も、実際に車を走行させると様子が異なる可能性もありますが、ここはひとまず置いておいて次は複数項目の同時取得の方法を考えたいと思っています。
「OBD2」関連記事
以下は「OBD2」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。
- 「セカイモン」でドイツから商品を購入
- WRX OBD2で車両情報を取得する その1 OBD2とは
- WRX OBD2で車両情報を取得する その2 ELM327の電源とRS232Cの配線
- WRX OBD2で車両情報を取得する その3 ELM327と「とある機器」の接続
- WRX OBD2で車両情報を取得する その4 通信テスト用のプログラムと画面
- WRX OBD2で車両情報を取得する その5 ELM327からの応答
- WRX OBD2で車両情報を取得する その6 ELM327との通信テスト完了
- WRX OBD2で車両情報を取得する その7 その他のATコマンドと調査用コマンド
- WRX OBD2で車両情報を取得する その8 ELM327を車両OBD2に接続する
- WRX OBD2で車両情報を取得する その9 OBD2のPIDを調べる
- WRX OBD2で車両情報を取得する その10 その他のPIDとエンジン回転数の取得
- WRX OBD2で車両情報を取得する その11 アスキーコードを数値に変換
- WRX OBD2で車両情報を取得する その12 正しいエンジン回転数取得の様子
- WRX OBD2で車両情報を取得する その13 エンジン回転数以外の項目とメーター表示
- WRX OBD2で車両情報を取得する その14 エンジン回転数以外の項目の返信内容
- WRX OBD2で車両情報を取得する その15 複数PIDの取得テスト
- WRX OBD2のアクセル開度によるSIドライブ自動変更機能の自作
- WRX OBD2で車両情報を取得する その16 複数PIDの取得の様子
- WRX OBD2で車両情報を取得する その17 エンジン回転数と車速からギア位置を判定する
- WRX OBD2ポート(OBD2コネクター)からの電源について
- WRX OBD2で車両情報を取得する その18 OBD2の分岐ケーブルについて
その他
ブロック形式でプログラミングが行える、教育用「micro:bit」も始めてみました。micro:bitでもELM327と接続して車両OBD2ポートからの情報取得を試しています。
- WRX micro:bitを車両で使う その16 シリアル通信(RS232C)を行う
- WRX micro:bitを車両で使う その19 ELM327の車両との通信を確認する
- WRX micro:bitを車両で使う その20 アスキーコード16進数から数値10進数への変換
- WRX micro:bitを車両で使う その21 車両からエンジン回転数を得る
- WRX micro:bitを車両で使う その40 フルカラーLED(WS2812B)でメーターを作る
micro:bit全体の記事は以下から始まります。
注記
- OBD2の仕様は各メーカーや車両で異なる部分があります。メーカーや車両によってはアフターマーケット製品による利用を推奨していない場合や、利用した場合による不具合発生の可能性を示している事があります。
- このブログ内で書いている内容はあくまで私の車両、私の利用する製品や機器での場合です。他メーカーや他の車両をはじめ、同じメーカーの車両または製品、機器であっても記事内容の保証、責任を負う事は出来ません。
- 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で、利用する車両などへの適合を確認し、自己判断と自己責任の下で利用して下さい。
- OBD2やELM327、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
- ELM327はElm Electronics Inc.の登録商標です。その他のブランド名または製品名は各所有者の商標です。