プログラミングコース P05 車載ネットワーク(CAN)計測 CANデータベースファイルを使用した CAN通信プログラミングを学ぶ (CAN Interface) 株式会社ペリテック
本コースで習得すべき内容 ① NI-XNETデータベースエディタを使用してCANデータベースファイルが作成できる ようになること。 ② CAN Interfaceを使用してデータの送受信プログラムが作成できるようになること。 ③ NIが推奨しているキューメッセージハンドラ(生産者/消費者デザインパターン)を 使用してLabVIEWプログラムが作成できるようになること。 ④ 表制御器、波形チャートを使用して計測データの数値表示・グラフ表示を行う LabVIEWプログラムが作成できるようになること。 ⑤ 計測結果のファイル保存、ファイル読込みのLabVIEWプログラムが作成できるよ うになること。 ※ NI=米国ナショナルインスツルメンツ社
本コースでプログラミングを学ぶシステム構成 (送信) CAN1 CAN2 (受信) ノートPC USB-8502 (2ポートCAN) CAN接続ケーブル
本コースで作成するプログラムの機能 ① CAN Interfaceを使用してスピードメータ、タコメータ、外気温度、車内温度、ビームのCANデータを一定周 期で送受信するプログラムを作成する。 ② キューメッセージハンドラ(生産者/消費者デザインパターン)を使用する。 ③ スピードメータ、タコメータ、外気温度、車内温度、ビームを画面に配置して送信データが編集できること。 ④ スピードメータ、タコメータ、外気温度、車内温度、ビームをCAN Interfaceで送信すること。 ⑤ 送受信周期が設定できること。 ⑥ CAN Interfaceで受信したデータを物理値に変換してグラフと一覧表に表示すること。 ⑦ 一覧表のデータがファイル保存(csvファイル形式:カンマ区切り)できること。 ⑧ 保存したファイルを読み込んでグラフと一覧表に表示できること。
CAN(Controller Area Network)について CANは、ドイツのBosch社が開発したシリアル通信プロトコルです。1994年に国際標準化機構(ISO)により 標準規格(ISO11898/ISO11519)になりました。現在では、ほぼすべての自動車に採用されています。
CANデータベースファイルについて CANデータベースファイルとは、CANフレームおよびデータフィールドにおける信号定義の情報が含まれた テキストファイルです。CANデータベースでは、各信号について工学単位への変換規則を定義しています。 以下のデータが保存されます。 ・ID番号とデータフィールドのバイト数 ・データフィールドで定義される信号名 ・データフィールドで定義される信号名の位置(開始ビット)とサイズ(ビット数) ・データタイプ(符号付き、符号なし、IEEE浮動少数)とバイト順序 ・スケール係数とスケールオフセット ・最大値、最小値、デフォルト値、単位 ・コメント (右図の例) スケール係数 : 1 スケールオフセット : 0 Speed_1(物理値)=1×受信データ+0
本コースで配布するプログラムの画面設計
Step①CANデータベースファイルを作成する。 X-NETデータベース エディタを起動する。 1.CANクラスタプロパティ Test1 2.CANフレームプロパティ Meter1 3.信号プロパティ Speed_1 Tacho_1 beam_1 inside_temp_1 outside_temp_1 X-NET データベースエディタ
Step①CANデータベースファイルを作成する。(つづき) 信号プロパティ Speed_1 開始ビット:0 ビット数:16 最大:200 Tacho_1 開始ビット:16 ビット数:16 最大:10000 beam_1 開始ビット:48 ビット数:1 最大:1 inside_temp_1 開始ビット:32 ビット数:8 最大:100 outside_temp1 開始ビット:40 ビット数:8 最大:100 X-NET データベースエディタ
Step①CANデータベースファイルを作成する。(つづき) 【参考】 Vectorデータベースファイル形式(.dbc) で保存する場合は、このメニューを右クリック して保存します。 X-NET データベースエディタ
Step②NI MAXのバスモニタで通信速度の設定を確認する。 ② ③ ① NI MAXを起動してCAN Interface “CAN1”のバスモニタを起動する。
Step②NI MAXのバスモニタで通信速度の設定を確認する。(つづき) ボーレートを500kbaudに設定します。 (通常の車両で使用する通信速度) バスモニタの設定画面を起動する。
Step③CSVファイル保存VIを作成する。 ファイルパスと計測結果表及びcycle timeを入力パラ メータとして、年月日_時分秒.csvというファイル名で保 存するVIを作成する。 sub csv file save.vi
Step④CSVファイル読込VIを作成する。 ファイルパスを入力パラメータとして、計測結果 とグラフ表示データを読み込むVIを作成する。 sub csv file read.vi
Step⑤生産者/消費者デザインパターンでメインVIを作成する。 ダイアグラム(以下省略)
Step⑥キューで送信するメッセージを列挙定数で作成する。 配付するプログラムは、以下のように処理を分割し て作成しました。 ①initialize 1 :初期化処理① ②initialize 2 :初期化処理② ③wait :wait loop ④csv save :計測データ保存処理 ⑤csv read :計測データ読み込み処理 ⑥system start :計測開始処理 ⑦output & input :計測処理 ⑧stop :計測停止処理 ⑨exit : プログラム終了処理
Step⑦生産者ループのイベント処理を作成する。 配付するプログラムは、以下のように イベント処理を作成しました。 複雑な処理は実行せず、ファイル操作 及び計測処理はキューで消費者ループ へ処理の実行を通知します。 ①Tacho_value:値変更 ②Tacho:値変更 ③CSV保存ボタン:値変更 ④CSV読込ボタン:値変更 ⑤計測開始ボタン:値変更 ⑥停止ボタン:値変更 ⑦Exitボタン:値変更
Step⑧消費者ループ(送信側)のinitialize 1を作成する。 initialize 1:プログラム終了時、ファイルに保存した画面設定データを読み込んで 再現する処理を作成しています。
Step⑨消費者ループ(送信側)のinitialize 2を作成する。 initialize 2:以下の初期化を行います。 Result表の指標、 Result表、波形チャート、計測ランプ、Beamランプ 設定数値(全てゼロ)、波形チャートXスケール(乗数設定)
Step⑩消費者ループ(送信側)のcsv_saveを作成する。 csv_save:sub csv file save.viを配置します。
Step⑪消費者ループ(送信側)のcsv_readを作成する。 csv_read:sub csv file read.viを配置します。 計測結果の表示位置、波形チャートを初期化してからデータを表示します。
Step⑪消費者ループ(送信側)のcsv_readを作成する。(つづき) csv_read:sub csv file read.viを配置します。 計測結果の表示位置、波形チャートを初期化してからデータを表示します。
Step⑫消費者ループ(送信側) のsystem startを作成する。 system start:計測ランプ(ON)とExitボタン(Grayed Out)を実行し、XNET(CAN送信) の初期化と開始を実行しています。
Step⑬消費者ループ(送信側) のoutput & inputを作成する。 output & input: XNET Write関数を配置して(CAN送信)を実行しています。 Cycle timeの待ち時間はwaitの処理で行います。
Step⑭消費者ループ(送信側) のstopを作成する。 stop: XNET Stop関数とClear関数を配置して(CAN送信)を停止しています。 キューの排出も実行します。
Step⑮消費者ループ(送信側) のexitを作成する。 exit:受信処理のループへexitの実行を通知し、消費者ループを終了させています。
Step⑯消費者ループ(受信側)のsystem startを作成する。 system start: X-NET(CAN受信)の初期化と開始を実行しています。 Result表を初期化するために空白の配列をシフトレジスタへ接続します。
Step⑰消費者ループ(受信側)のoutput & inputを作成する。 output & input: XNET Read関数を配置して(CAN受信)を実行しています。 CAN受信データをグラフとResult表に表示します。 Cycle timeの待ち時間はwaitの処理で行います。
Step⑱消費者ループ(受信側)のstopを作成する。 stop: XNET Stop関数とClear関数を配置して(CAN受信)を停止しています。 キューの排出も実行します。
Step⑲消費者ループ(受信側)のexitを作成する。 exit:消費者ループを終了(While Loopの条件にTrueを接続)させています。
Step⑳サブVIの説明 (sub index value.vi) 現在行、設定行、制御器refnumを入力パラメータとして現在行が設定行を超えた 場合に一覧表を垂直スクロールさせています。
まとめとポイント ① CANデータベースファイル ① NI-XNETデータベースエディタで作成できる。 ② FIBEXデータベースファイル(.xml)、Vectorデータベースファイル(.dbc)、NI CAN データベースファイル(.ncd)を認識できる。 ② 物理値変換 ① XNET関数は、CANデータベースファイルの信号名で物理値変換できる。 ③ メインVIの作り方 ① キューメッセージハンドラ(生産者/消費者デザインパターン)を使用する。 ② キューで送信するメッセージは列挙定数をタイプ定義して作成する。 ④ CSVファイル保存 ① 2次元の文字配列に変換すれば簡単にWrite/Readできる。 ⑤ CAN通信のモニタとロギング ① NI MAXから起動するバスモニタを使用すればモニタとロギングが簡単に実現できる。 ② 車両CANのモニタとロギングの仕方については【付録.1】を参照してください。
付録.1 車両CANのモニタとロギングの方法 OBD-II コネクタは運転席側の足元に 配置されている場合が多い。 NI社製CAN OBD-II ケーブルで 車両と接続する。 NI MAXから起動できるNI-XNETバスモニタでCAN通信をモニタすることができる。 又、ログを有効に設定すればファイルにロギングすることができる。
付録.2 LIN(Local Interconnect Network)について LINは、自動車ネットワークでの低コスト、ローエンドマルチプレクス通信用の規格として開発されたものです。 CANは高帯域の高度エラー処理ネットワークのニーズに対応するものですが、CANの実装に必要なソフトウ ェアとハードウェアのコストは、パワーウィンドウや座席制御装置など高い性能が求められないデバイスには 高額すぎます。LINを使用すると、CANほどの帯域幅や多用途性を必要としないアプリケーションで、コスト効 率の高い通信を行うことができます。LINは、ほとんどの低コストの8ビットマイクロコントローラに組み込まれた 標準の汎用非同期送受信回路(UART)を使って、比較的低コストで実装することができます。 LINは、LINマスタと1つまたは複数のLINスレーブからなるマスタ/スレーブ方式を採用しています。 メッセージのヘッダには、フレームの始まりを示すブレークと、スレーブノードがクロック同期に使用する同期フ ィールドがあります。識別子(ID)には、6ビットメッセージIDと2ビットパリティフィールドが含まれます。IDは、特 定のメッセージアドレスを示しますが、送信先は示しません。IDを受信して解釈したら、1つのスレーブがメッセ ージの応答を開始します。それには8バイトのデータと8ビットのチェックサムが含まれています。 マスタはメッセージフレームの順序を制御します。これはスケジュールで固定されています。スケジュールは必 要に応じて変更することができます。 NI LIN インターフェースバイスは、 NI-XNETドライバでアプリケーションを開発す る際に使用するバスインタフェースです。 統合されたLINデータベースのLDF データベースからの信号をインポート、編集、および使用することができます。 NI LIN インターフェースデバイス