WRX OBD2で車両情報を取得する その4 通信テスト用のプログラムと画面
前回まででELM327に電源を供給し、RS232CでPLCとの接続は一応完了しました。次はELM327とPLCの間で実際に通信出来るかを確認してみますが、まずはPLCで確認用のプログラムとタッチパネル画面の作成が必要です。正直な所、今回利用するPLCやラダープログラム作成ソフトなどの利用は初めてなので、理解するのが大変そうです。
ELM327のランプ
通信の確認を行うにあたって、ELM327にある5つのランプの役割を知る必要があります。今回購入したELM327は本体のみで、取説の様な物はありませんでした。製品としての製造メーカーも不明です。とりあえず電源を入れて最初に光るランプ(一番左)はそのまま電源ランプかと思います。その他に4つのランプがありますが、Elm Electronics社のデータシート(リンク先はpdf、1ページ目と6ページ目)によるとELM327チップのピンアサインに、ステータスLEDとしてRS232CのRxとTx、OBDのRxとTxがあります(25~28ピン)。4つのランプはそれぞれこれらの内容と思われますが、実際に並んでいるランプがどの順番なのかはっきりしません。ELM327に電源のみを入れた状態では最初の写真の様に、一番左(電源)と右側2つが点灯しています。OBD2には繋がっていないので何かエラーを表しているのかもしれません。通信を行えばパラパラと点滅するのでしょう。
PLCの通信設定(RS232C)
PLCにスイッチング電源を介してDC24Vを供給すると、上記の様に「システム画面」が表示されました。まだプログラムやタッチパネル画面のデータを転送していないので、本体の設定以外は何も出来ません。まずはプログラム作成ソフトから新規作成を行い、通信ポート(RS232C)の設定を行います。
RS232Cの通信設定はELM327のデータシート(8ページ目)によると、通信速度は9.6kbps(電源投入時に6番ピンが0V)または38.4kbpsとなっています。その他はデータ長8ビット、ストップビットは1、パリティビットは無しとなっていたので、上記の様に設定しました。※6番ピンとはあくまでELM327のチップのピンです。OBD2ではありません。
また今回使用するPLCでは、プロジェクト設定内で送受信のコマンドも作成する形になっています。複数の設定が可能となっていて動作条件としてデバイスの指定があるので、ラダープログラムの方でそのデバイスをONさせれば該当の通信が行われる、という事の様です。
テスト用の送受信コマンド
PLCとELM327で通信が出来るのかを確認するには、とりあえずPLCから何かコマンドを送り、その返事があるかを見ます。ELM327のデータシートには利用出来るATコマンドも記載されていますが、「AT Z」でリセットとなり、リセット後はELM327から「ELM327 v〇.〇」とバージョンを示すメッセージが送信されるとあります(データシート8ページ目にも記載アリ)。従ってまずはPLCから「AT Z」と送信して、今回購入したELM327のバージョンを確認したいと思います。※ATとZの間のスペースは無くても良い様です。
上記の様に送信と受信のコマンドを設定しました。送信側は単純に文字列として「ATZ」を送るだけ、受信側に関しては受信したデータをデータデバイスに格納しますが、1つのデータデバイスで2バイトを扱うので、最大幾つのデータデバイスが必要か分かりません。とりあえずデータデバイスの先頭は「D10」、データデバイス数は「10」にしておきました。
送信用ボタンと文字表示
実際にPLCで送受信を行うには、さらに送信の際の条件を成立させるラダープログラムと、ELM327から受信した内容を表示させる画面が必要です。とは言っても現状のテストでは非常に単純な形です。
上記はラダープログラムです。タッチパネル上にスイッチ(デバイスアドレス:M10)を作成してスイッチを押すと、ATコマンドの送信条件(デバイスアドレス:M5)がONします。スイッチのアドレスを直接送信条件(M5)にしても良かったのかも。
上記はタッチパネルの作成画面です。左はモーメンタリスイッチ(デバイスアドレス:M10)、右は文字入力器(デバイスアドレス:D10)です。スイッチを押してATコマンドを送信し、ELM327から受信した内容を文字入力器で表示します。「文字入力器」となっていますが、このPLCでは表示のみも場合もこれを利用する事になっています。また受信側の条件は「常に有効」になっています。
次回は実際にELM327にATコマンドを送信して、バージョンを示すメッセージを表示出来るか確認します。
「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.の登録商標です。その他のブランド名または製品名は各所有者の商標です。