WRX OBD2で車両情報を取得する その7 その他のATコマンドと調査用コマンド
前回まででELM327とPLC間での通信と、PLCで受信した内容の表示は確認する事が出来ました。確認で使用したATコマンド以外にも様々なコマンドがありますが、現時点ではまだ理解していません。また車両の情報を取得するにあたってはATコマンドとは異なる形式になる様なのですが、こちらもこれからです。さらに今回購入したELM327機器(以下、ELM327)が、そもそも私の車両(WRX:VAB-A)で通信出来るかも確認しないといけません。まだまだやる事が色々とあります。
その他のATコマンド
今回はELM327のデータシート(リンク先はpdf)に記載されている利用出来るATコマンドから、適当に利用しても問題無さそうなコマンドを幾つかPLCに追加して、ELM327からどの様な結果が返って来るか見る事にしました。選んだATコマンドは以下です。
- ATZ(前回から利用していたコマンド):リセット
- ATRV:OBD2電圧表示
- ATDP:現在の通信プロコトル表示
- ATSP0:プロコトル自動設定
- ATD:全てデフォルト設定
- ATI:バージョン情報
- ATL0:改行ON
- ATL1:改行OFF
- AT@1:デバイス説明表示
- AT@2:デバイス識別子表示
購入したELM327のバージョンが「1.2a」と低いので、データシートに記載されているATコマンドの中には利用出来ないコマンドがあるかもしれません(バージョンアップの際に追加されている)。ちなみにATコマンドとして送信する際は頭に「AT」を付けます。これまで「ATZ」がリセットとしていましたが、実際に機能を意味する部分は「Z」です。上記のコマンドも全て「AT」を付けた状態です。
PLCの通信設定と画面の変更
上記のコマンドを任意にELM327へ送信するには、それぞれ通信設定を行わなければいけません。ただし今回利用するPLCでは1つの通信設定内で複数のコマンドを登録しておき、別のデバイス条件によってコマンドを選択出来る機能がありました。
上記の様に複数のコマンド(定数)を設定する場合は「登録定数(文字)」を使用します。各コマンドで指定する「インデックス」の数値を「インデックスデバイス」に書き込む事で、どのコマンドを送信するか指定出来ます。今回はそのデバイスをD30とします。またタッチパネル画面も1画面追加して、D30にテンキーを使って数値を入力する画面を作成しました。
上記はメイン(ページ1)画面です。前回までは「送信」ボタンを押すと「ATZ」のみを送信していました。今回は「設定」というスイッチを置き、このスイッチを押すと設定画面(ページ2)に切り替わります。
上記が設定画面(ページ2)です。現在D30に書き込まれている数値を左に表示しています。数値の表示部分をタッチするとテンキーが表示されます。1~12までの各コマンド内容は単純に文字を表示しているだけ、「メイン」でページ1に戻ります。
テンキーで任意の数値を入力して、「ENT」キーを押すとD30にその数値が書き込まれます。その後メイン画面で「送信」スイッチを押すと、D30の数値に基づいたコマンドがELM327に送信されます。
画面の切り替えやテンキーの表示などは、予め機能としてタッチパネルに備わっています。タッチパネル画面の作成ソフトでスイッチなどを並べて設定を行っただけです。この辺りも今回PLC(タッチパネルを含むこの機種)を利用した理由です。
各コマンド送信後の結果
ATRV
OBD2に供給されている電圧が表示されますが、ちょっと誤差があります。これを補正するために「ATCV****(*は数値)」というコマンドがあり、現在の電圧が「**.**」vとして補正されるとあります。また「ATCV0000」というコマンドでその補正を初期状態(工場出荷)に戻すとありますが、これはELM327のバージョンが1.2aではサポートされていない様です。
ATDP
現在設定されているOBD2の通信プロトコルを表示するとあります。上記では「AUTO」になっていますが、初回は「AUTO,ISO~」でした。AUTOは自動で車両と繋がるプロトコルを探して接続し、その後は繋がったプロトコルが設定される様です。現在はOBD2に繋がっていないので、2回目以降は「AUTO」のみになった様です。
ATSP0
OBD2の通信プロトコル設定を「AUTO」にします。別途各プロコトルを指定するコマンドもあります。また設定したプロコトルをリセットするコマンド「ATSP00」がありますが、これもバージョンが1.2aではサポートされていない様です。
ATD
ELM327に電源を投入した時と同じデフォルト(工場出荷)状態になるとあります。ATZとの違いがイマイチ不明ですが、ATZはランプも電源投入時と同じ様に点灯し、その後にバージョンが表示されます。この違いだけでしょうか?
ATI
ELM327のバージョンを表示します。リセットは行われません。
ATL0・ATL1
ELM327がRS232C(PC)側に送信する内容の最後に、改行(キャリッジリターン)を付けない(L0)、付ける(L1)の設定です。改行オンオフは電源投入時のELM327チップの7番ピンの電圧状態にもよるとあります。「ATL0」と「ATL1」はタッチパネル画面での表示状態が変わるか試してみる為に入れました。もともとタッチパネルでの文字表示はコマンドラインの様な改行を含む表示は想定していません。現在複数行で表示されている事は実は偶然です。また改行を含むコマンドやその後にプロンプト(>)が送信されて来ますが、データの切れ目の認識がどうなっているのかもまだよく分かっていません。
AT@1
ELM327チップに登録されているデバイス文字を表示します。上記の様にだいぶ長い文字列が送信されました。PLC側で設定しているデータデバイス数は「10」だったのですが、収まらなかったデータが新たに先頭(D10)から格納されました。ELM327からはまとめて送信されていると思うのですが、PLC側で最初のデータ、収まらなかったデータと切り替わるタイミングも不明です。どちらか一方しか表示されないのであればその理由もわかるのですが。タッチパネルの文字入力器との兼ね合いもありそうですが、現状で上手く表示出来ている事も偶然です。
AT@2
ユーザーが任意に設定できる識別子を表示します。識別子とは「コメント」の様な物で設定は「AT@3」コマンドで行います。上記では識別子を設定していない(データが無い)ので、エラーとして「?」がELM327から送信されています。
車両側調査用コマンド
今回、ATコマンドの他に「0100」という数値も入れています。これには頭に「AT」が付いていません。「AT」が付かないコマンドはELM327ではOBD2に対する命令と認識され、車両との通信を試みます。詳しくはまた改めて書くつもりですが、「0100」は車両側でサポートされている各項目(回転数や水温など)を調べる事が出来るコマンドです。
車両に接続していない状態でELM327に「0100」を送信してみました。送信後は上記の様に表示され、ELM327本体では電源ランプの隣のランプ(OBDTx?)が点滅しています。
そして約5秒後には上記の様に「接続出来ない」とのメッセージが表示され、点滅していたランプは消灯しました。
まとめ
そろそろ車両に接続して実際にELM327がOBD2と通信出来るのかを確認し、可能であれば「0100」でサポートされている項目を調べる事が出来ればと思っています。車両でPLCを使うにはDC12V→DC24VのアップコンバーターかAC100Vのインバーターが必要です。現在はまだ持っていないので購入する必要があります。従って次回記事まで少し間が空くかもしれません。
「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.の登録商標です。その他のブランド名または製品名は各所有者の商標です。