---
title: プログラミングコース05 車載ネットワーク（CAN）計測
tags: 
author: [株式会社ペリテック](https://www.docswell.com/user/Peritec)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4JMYYY32JW.jpg?width=480
description: プログラミングコース05の解説つきスライドです。 是非テキストや動画（Youtube）と併用ください。
published: April 30, 26
canonical: https://www.docswell.com/s/Peritec/ZL3G78-programming_course05
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4JMYYY32JW.jpg)

プログラミングコース
P05 車載ネットワーク(CAN)計測
CANデータベースファイルを使用した
CAN通信プログラミングを学ぶ
（CAN Interface）
株式会社ペリテック


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PJR999Q579.jpg)

本コースで習得すべき内容
① NI-XNETデータベースエディタを使用してCANデータベースファイルが作成できる
ようになること。
② CAN Interfaceを使用してデータの送受信プログラムが作成できるようになること。
③ NIが推奨しているキューメッセージハンドラ（生産者／消費者デザインパターン）を
使用してLabVIEWプログラムが作成できるようになること。
④ 表制御器、波形チャートを使用して計測データの数値表示・グラフ表示を行う
LabVIEWプログラムが作成できるようになること。
⑤ 計測結果のファイル保存、ファイル読込みのLabVIEWプログラムが作成できるよ
うになること。
※ NI＝米国ナショナルインスツルメンツ社


# Page. 3

![Page Image](https://bcdn.docswell.com/page/PEXQQQ5XJX.jpg)

本コースでプログラミングを学ぶシステム構成
（送信）
CAN1
CAN2
（受信）
ノートPC
USB-8502 （2ポートCAN）
CAN接続ケーブル


# Page. 4

![Page Image](https://bcdn.docswell.com/page/3EK99969ED.jpg)

本コースで作成するプログラムの機能
① CAN Interfaceを使用してスピードメータ、タコメータ、外気温度、車内温度、ビームのCANデータを一定周
期で送受信するプログラムを作成する。
② キューメッセージハンドラ（生産者／消費者デザインパターン）を使用する。
③ スピードメータ、タコメータ、外気温度、車内温度、ビームを画面に配置して送信データが編集できること。
④ スピードメータ、タコメータ、外気温度、車内温度、ビームをCAN Interfaceで送信すること。
⑤ 送受信周期が設定できること。
⑥ CAN Interfaceで受信したデータを物理値に変換してグラフと一覧表に表示すること。
⑦ 一覧表のデータがファイル保存（csvファイル形式：カンマ区切り）できること。
⑧ 保存したファイルを読み込んでグラフと一覧表に表示できること。


# Page. 5

![Page Image](https://bcdn.docswell.com/page/L73WWW6975.jpg)

CAN（Controller Area Network）について
CANは、ドイツのBosch社が開発したシリアル通信プロトコルです。1994年に国際標準化機構（ISO）により
標準規格（ISO11898/ISO11519）になりました。現在では、ほぼすべての自動車に採用されています。


# Page. 6

![Page Image](https://bcdn.docswell.com/page/87DKKKV8JG.jpg)

CANデータベースファイルについて
CAN​データベースファイルとは、CAN​フレームおよびデータフィールドにおける信号定義の情報が含まれた
テキストファイルです。CAN​データベースでは、各信号について工学単位への変換規則を定義しています。
以下のデータが保存されます。
・ID番号とデータフィールドのバイト数
・データフィールドで定義される信号名
・データフィールドで定義される信号名の位置（開始ビット）とサイズ（ビット数）
・データタイプ（符号付き、符号なし、IEEE​浮動少数）とバイト順序
・スケール係数とスケールオフセット
・最大値、最小値、デフォルト値、単位
・コメント
（右図の例）
スケール係数
： 1
スケールオフセット ： 0
Speed_1（物理値）＝１×受信データ＋0


# Page. 7

![Page Image](https://bcdn.docswell.com/page/VJPKKKVWE8.jpg)

本コースで配布するプログラムの画面設計


# Page. 8

![Page Image](https://bcdn.docswell.com/page/2EVVVVZ9EQ.jpg)

Step①CANデータベースファイルを作成する。
X-NETデータベース
エディタを起動する。
１．CANクラスタプロパティ
Test1
２．CANフレームプロパティ
Meter1
３．信号プロパティ
Speed_1
Tacho_1
beam_1
inside_temp_1
outside_temp_1
X-NET データベースエディタ


# Page. 9

![Page Image](https://bcdn.docswell.com/page/57GLLL44EL.jpg)

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 データベースエディタ


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4EQYYYGRJP.jpg)

Step①CANデータベースファイルを作成する。（つづき）
【参考】
Vectorデータベースファイル形式（.dbc）
で保存する場合は、このメニューを右クリック
して保存します。
X-NET データベースエディタ


# Page. 11

![Page Image](https://bcdn.docswell.com/page/KJ4WWW5Q71.jpg)

Step②NI MAXのバスモニタで通信速度の設定を確認する。
②
③
①
NI MAXを起動してCAN Interface “CAN1”のバスモニタを起動する。


# Page. 12

![Page Image](https://bcdn.docswell.com/page/LE1YYYWL7G.jpg)

Step②NI MAXのバスモニタで通信速度の設定を確認する。（つづき）
ボーレートを500kbaudに設定します。
（通常の車両で使用する通信速度）
バスモニタの設定画面を起動する。


# Page. 13

![Page Image](https://bcdn.docswell.com/page/GEWGGG6QJ2.jpg)

Step③CSVファイル保存VIを作成する。
ファイルパスと計測結果表及びcycle timeを入力パラ
メータとして、年月日_時分秒.csvというファイル名で保
存するVIを作成する。
sub csv file save.vi


# Page. 14

![Page Image](https://bcdn.docswell.com/page/47ZLLLY3J3.jpg)

Step④CSVファイル読込VIを作成する。
ファイルパスを入力パラメータとして、計測結果
とグラフ表示データを読み込むVIを作成する。
sub csv file read.vi


# Page. 15

![Page Image](https://bcdn.docswell.com/page/YJ6WWWDZJV.jpg)

Step⑤生産者／消費者デザインパターンでメインVIを作成する。
ダイアグラム（以下省略）


# Page. 16

![Page Image](https://bcdn.docswell.com/page/GJ5MMM39J4.jpg)

Step⑥キューで送信するメッセージを列挙定数で作成する。
配付するプログラムは、以下のように処理を分割し
て作成しました。
①initialize 1 ：初期化処理①
②initialize 2 ：初期化処理②
③wait ：wait loop
④csv save ：計測データ保存処理
⑤csv read ：計測データ読み込み処理
⑥system start ：計測開始処理
⑦output &amp; input ：計測処理
⑧stop ：計測停止処理
⑨exit : プログラム終了処理


# Page. 17

![Page Image](https://bcdn.docswell.com/page/LE3WWW62E5.jpg)

Step⑦生産者ループのイベント処理を作成する。
配付するプログラムは、以下のように
イベント処理を作成しました。
複雑な処理は実行せず、ファイル操作
及び計測処理はキューで消費者ループ
へ処理の実行を通知します。
①Tacho_value：値変更
②Tacho：値変更
③CSV保存ボタン：値変更
④CSV読込ボタン：値変更
⑤計測開始ボタン：値変更
⑥停止ボタン：値変更
⑦Exitボタン：値変更


# Page. 18

![Page Image](https://bcdn.docswell.com/page/8EDKKKV67G.jpg)

Step⑧消費者ループ（送信側）のinitialize 1を作成する。
initialize 1：プログラム終了時、ファイルに保存した画面設定データを読み込んで
再現する処理を作成しています。


# Page. 19

![Page Image](https://bcdn.docswell.com/page/V7PKKKRZJ8.jpg)

Step⑨消費者ループ（送信側）のinitialize 2を作成する。
initialize 2：以下の初期化を行います。
Result表の指標、 Result表、波形チャート、計測ランプ、Beamランプ
設定数値（全てゼロ）、波形チャートXスケール（乗数設定）


# Page. 20

![Page Image](https://bcdn.docswell.com/page/2JVVVVRMJQ.jpg)

Step⑩消費者ループ（送信側）のcsv_saveを作成する。
csv_save：sub csv file save.viを配置します。


# Page. 21

![Page Image](https://bcdn.docswell.com/page/5EGLLLMXJL.jpg)

Step⑪消費者ループ（送信側）のcsv_readを作成する。
csv_read：sub csv file read.viを配置します。
計測結果の表示位置、波形チャートを初期化してからデータを表示します。


# Page. 22

![Page Image](https://bcdn.docswell.com/page/4JQYYYR57P.jpg)

Step⑪消費者ループ（送信側）のcsv_readを作成する。（つづき）
csv_read：sub csv file read.viを配置します。
計測結果の表示位置、波形チャートを初期化してからデータを表示します。


# Page. 23

![Page Image](https://bcdn.docswell.com/page/K74WWW8VE1.jpg)

Step⑫消費者ループ（送信側） のsystem startを作成する。
system start：計測ランプ（ON）とExitボタン（Grayed Out）を実行し、XNET（CAN送信）
の初期化と開始を実行しています。


# Page. 24

![Page Image](https://bcdn.docswell.com/page/LJ1YYY24EG.jpg)

Step⑬消費者ループ（送信側） のoutput &amp; inputを作成する。
output &amp; input： XNET Write関数を配置して（CAN送信）を実行しています。
Cycle timeの待ち時間はwaitの処理で行います。


# Page. 25

![Page Image](https://bcdn.docswell.com/page/GJWGGGRZ72.jpg)

Step⑭消費者ループ（送信側） のstopを作成する。
stop： XNET Stop関数とClear関数を配置して（CAN送信）を停止しています。
キューの排出も実行します。


# Page. 26

![Page Image](https://bcdn.docswell.com/page/4EZLLLRL73.jpg)

Step⑮消費者ループ（送信側） のexitを作成する。
exit：受信処理のループへexitの実行を通知し、消費者ループを終了させています。


# Page. 27

![Page Image](https://bcdn.docswell.com/page/Y76WWWRM7V.jpg)

Step⑯消費者ループ（受信側）のsystem startを作成する。
system start： X-NET（CAN受信）の初期化と開始を実行しています。
Result表を初期化するために空白の配列をシフトレジスタへ接続します。


# Page. 28

![Page Image](https://bcdn.docswell.com/page/G75MMM8Q74.jpg)

Step⑰消費者ループ（受信側）のoutput &amp; inputを作成する。
output &amp; input： XNET Read関数を配置して（CAN受信）を実行しています。
CAN受信データをグラフとResult表に表示します。
Cycle timeの待ち時間はwaitの処理で行います。


# Page. 29

![Page Image](https://bcdn.docswell.com/page/9J2999KWER.jpg)

Step⑱消費者ループ（受信側）のstopを作成する。
stop： XNET Stop関数とClear関数を配置して（CAN受信）を停止しています。
キューの排出も実行します。


# Page. 30

![Page Image](https://bcdn.docswell.com/page/DEY444N9JM.jpg)

Step⑲消費者ループ（受信側）のexitを作成する。
exit：消費者ループを終了（While Loopの条件にTrueを接続）させています。


# Page. 31

![Page Image](https://bcdn.docswell.com/page/VJNYYYXD78.jpg)

Step⑳サブVIの説明 （sub index value.vi）
現在行、設定行、制御器refnumを入力パラメータとして現在行が設定行を超えた
場合に一覧表を垂直スクロールさせています。


# Page. 32

![Page Image](https://bcdn.docswell.com/page/YE9PPP88J3.jpg)

まとめとポイント
① CANデータベースファイル
① NI-XNETデータベースエディタで作成できる。
② FIBEX​データベースファイル（.xml）、Vector​データベースファイル（.dbc）、NI CAN​
データベースファイル（.ncd）を認識できる。
② 物理値変換
① XNET関数は、CANデータベースファイルの信号名で物理値変換できる。
③ メインVIの作り方
① キューメッセージハンドラ（生産者／消費者デザインパターン）を使用する。
② キューで送信するメッセージは列挙定数をタイプ定義して作成する。
④ CSVファイル保存
① ２次元の文字配列に変換すれば簡単にWrite／Readできる。
⑤ CAN通信のモニタとロギング
① NI MAXから起動するバスモニタを使用すればモニタとロギングが簡単に実現できる。
② 車両CANのモニタとロギングの仕方については【付録.１】を参照してください。


# Page. 33

![Page Image](https://bcdn.docswell.com/page/GE8DDD8ZED.jpg)

付録．１ 車両CANのモニタとロギングの方法
OBD-II コネクタは運転席側の足元に
配置されている場合が多い。
NI社製CAN OBD-II ケーブルで
車両と接続する。
NI MAXから起動できるNI-XNETバスモニタでCAN通信をモニタすることができる。
又、ログを有効に設定すればファイルにロギングすることができる。


# Page. 34

![Page Image](https://bcdn.docswell.com/page/LELMMMR17R.jpg)

付録．２ 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 インターフェースデバイス


