WRX OBD2で車両情報を取得する その5 ELM327からの応答
とりあえずPLCでテスト用のプログラムと画面を作成しました。これでPLC側からATコマンドを送り、ELM327からの応答があるか試してみます。ただし1度で上手く通信出来るとも思ってはおらず、その場合の原因も様々です。1つ1つ確認していくしかないのですが、手が掛かりそうな感じもするし、意外とあっさり済んでしまいそうな感じもします。
無反応
まずは作成したラダープログラムとタッチパネル画面をPLCに転送します。スイッチと文字表示があるだけなので見栄えのしない画面です(最初の写真)。RS232CにはELM327も接続していますが、電源のみ供給していた状態では電源ランプの他に右側2つのランプも点灯していましたが、RS232Cで接続していると右側2つのランプは消灯し、電源ランプのみの点灯になりました。
この状態でタッチパネルに作成したスイッチを押して、ELM327に「ATZ」のコマンドを送ってみました。・・・が、無反応です。ELM327のランプも電源以外に点灯するランプはありません。ラダープログラムや送信コマンドの設定を見返しましたが、プログラムはともかくコマンド設定は正直何が正しくて何が間違いなのかもよく分かりません。一度基本に戻ってRS232Cの配線を確認します。
ELM327のデータシート(リンク先はpdf)にはELM327チップを用いたアプリケーション例も記載されています(79ページ目以降)。この中にはRS232C用の例もあり、これを見るとD-Sub9ピンメスコネクターで2番(RxD)はELM327チップの17番(RS232Tx)、3番の(TxD)は18番(RS232Rx)に繋がっていて、ELM327の内部で逆転しています。そういえばRS232Cってストレートやクロスといったケーブルがあって、周辺機器の中には機器内で逆転している物があった記憶があります。ELM327も同じ様なので、PLCのコネクターで送受信を入れ替えました。送信→受信ではなく、送信-送信、受信-受信になります。
再送信
これでもう一度PLCからコマンドを送ってみると、ELM327の右側2つのランプが一瞬点灯しました。しかしタッチパネルの文字表示には何も出ません。改めてコマンドを送ると再びランプが点灯するので、少なくとも送信は出来ていそうです。受信を確認するにはプログラム作成ソフトからPLCのモニタを行い、データデバイスの「D10」以降に何かデータが入ってないか確認します。
上記はその時モニターしたデータ値です。D10に「3F0D」、D11に「0D3E」が入っていますがこれは文字コードです。データが入っているという事は受信も出来ているので、単純にタッチパネルの文字表示(文字入力器)に何か問題がありそうです。
ELM327のバージョン判明
一度ELM327の電源は切り、タッチパネルの文字入力器の設定を見直しました。PLCにタッチパネルのデータをPCから転送して修正し、改めてELM327に電源を入れてみるとタッチパネルに「ELM327 v1.2a」と表示されました。どうやらELM327は電源を入れると最初に「ELM327」とチップの「バージョン」を送信してくる様です。文字表示の枠外に表示されてしまったのは想定外ですが、ちゃんと受信した内容を表示出来た事は大きな成果です。
また購入したELM327のチップのバージョンが「1.2a」という事も分かりました。RS232Cタイプなのでやはりだいぶ古いチップが搭載されています。ELM327のチップはいわゆる互換品も多いのですが、Elm Electronics社では1.2aというバージョンも存在していました。バージョンが1.5では明らかに互換品ですが(Elm Electronics社が「作っていない」と表記している)、今回の1.2aでも互換品が存在するのかは分かりません。
再々送信
バージョンの表示が出来たので、PLCから再度コマンドを送ってみます。
「ATZ」とパネルに表示されました。・・・送信したコマンドがそのまま返って来た形です。しかしその後のバージョン表示がありません。文字表示の枠外に表示されているのは、先のELM327の電源を入れた時に表示された物です。この辺りは文字入力器の設定だと思います。何故だろう?と思いながら少しするとELM327のランプが一瞬点灯し、タッチパネルは下記の様になりました。
「?」と「>」が文字表示の枠内、枠外にそれぞれ表示されています。データシートの88ページにエラーメッセージとして「?」が返される理由は、ELM327でコマンドが理解できないという事の様です。「>」はプロンプトで入力待ちです。という事で「ATZ」という文字としては送信出来ているのですが、それがELM327で理解出来ない状態になっています。
次回はこの問題を解消したいと思います。でも今回で大きな関門は1つ通過出来た気がします。
余談
ELM327のチップには元々RS232Cの通信機能があり、現在販売されているWi-FiやBluetooth、USBタイプの物はそれぞれの通信デバイス用ICが追加されている様ですが、データシートのアプリケーション例を参考にして回路を追加(改造)すれば、RS232Cでの通信も可能になりそうです。実際に回路を追加して改造している方もいらっしゃる様です。
私の購入したELM327のチップバージョンが1.2aと少し古いので、車両側と通信できない可能性があるかもしれません。その場合は現在販売しているWi-FiやBluetoothの物を購入して改造出来れば良いのですが、私に電気回路を弄る技術はありません。PLCにはEthernetポートがあるので、何かアダプターを付けてWi-Fiで繋げられる方法があれば良いと思っています。
「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.の登録商標です。その他のブランド名または製品名は各所有者の商標です。