チュートリアル
CAN拡張機能によるデータ収集と解析方法
課題
・転送速度の遅いCAN接続でも効率よく時間計測やカバレッジ計測を行いたい。
・再コンパイルしなくても、テストポイントのフィルタを行いたい。
解決方法
・CAN拡張機能を使用します。
効果
CAN拡張機能を使用することで再コンパイルしなくても、テストポイント種別・ソースファイル・モジュールによる
フィルタを指定することができ、CANバス上に流れる情報を抑制することができます。
また、CANバス上に流れるデータが抑制されることにより、転送速度がそれほど早くないCANバス接続でも、
効率よく時間計測やカバレッジ計測を行うことができます。
ドライバのカスタム方法
1. サンプルドライバのダウンロード
対応OS | 接続方式 | 言語 | イベントID出力方式 | ダウンロード |
---|---|---|---|---|
Non-OS/iTron | CAN | C/C++ | イベントID出力ポイント挿入 | ダウンロード |
※CAN接続ではイベントID出力によるイベントトレース機能はご使用できません。
2. サンプルドライバの変更
CAN拡張機能に対応したテストポイントのドライバは、通常のドライバと異なり、DT10側からのフィルタの設定情報を受けるための
受信処理も必要になります。サンプルドライバをカスタマイズする際には、以下の点に留意してください。
・最大ファイルの設定
#define MAX_FILE 511
dt_can_drv.cでは、MAX_FILEには最大値の511が指定されています。
できるだけ、DT10のプロジェクトに登録されているファイル数を上限値として指定するようにしてください。
・最大メッセージ数
#define MAX_MESSAGE 15
CAN拡張機能用のドライバでは、基本的にターゲット機器の内部RAMにデータを溜めてから、
ログデータを送信するようになっています。
MAX_MESSAGEには、メッセージの量をどれだけ溜めるかを指定します。
最終的には、MAX_MESSAGEx8バイト分のメモリがバッファとして確保されます。
・セキュリティコード
unsigned int DtSecurityCode[4]
CAN拡張機能用のダイアログでセキュリティコードとして得られた値を指定します。
・CANコマンド受信タスク
void _TP_CanRecvCtrl(void)
dt_can_drv.c内の_TP_CanRecvCtrl()はDT10側から送信されるCANコマンドを受信し、
フィルタ関連のコマンドをでコードするための処理が実装されています。
_TP_CanRecvCtrl()関数を一定周期でコールするか、もしくはターゲット機器側で何らかのCANコマンドを受けたときに
コールされるように実装する必要があります。
・CANデータ送信タスク
void _TP_CanSendCtrl(void)
dt_can_drv.c内の_TP_CanSendCtrl()は、ターゲット機器側からCANデータをDT10側に送信するための制御処理が実装されています。
_TP_CanSendCtrl()は10msec間隔で実行する必要があります。
・CANデータ送信処理
void MCP2515DataSend( unsigned char *p, int size )
dt_can_drv.c内では、ターゲット機器側からCANデータを送信するためのAPIとして
MCP2515DataSend()をコールしてデータを送信しています。
現在のお使いの環境に合ったCANデータの送信処理で該当箇所を置き換えてください。
・CANデータ受信処理
int MCP2515DataRecv( unsigned char *p, int size )
dt_can_drv.c内では、ターゲット機器側が受けたCANデータを取り出すためのAPIとして
MCP2515DataRecv()をコールしてデータを読み込んでいます。
現在のお使いの環境に合ったCANデータの受信処理で該当箇所を置き換えてください。
プロジェクトの設定
プロジェクトの設定では、「接続方式」にCANを指定します。
CAN接続では、イベントID出力機能はご使用できませんが、
新規プロジェクト作成時には、イベントID出力方式は、「イベントID出力ポイント挿入」を設定してください。
CAN接続時のテストポイント
テストポイントの挿入は、通常通り行います。
CAN接続の場合、テストポイントの出力をターゲット機器側で行うための情報を、ヘッダファイルに付加します。
CAN接続以外のテストポイントのマクロ
CAN接続時のテストポイントマクロ
CAN拡張機能設定ダイアログ
CAN拡張機能を有効化するために、CAN接続設定の拡張機能のチェックボックスをONにします。
チェックボックスがONになると、拡張機能設定のためのダイアログが表示されます。
CAN拡張機能の設定
CAN拡張機能設定を行うことにより、次のデータフォーマットでデータ送信が可能になります。
目的に応じて、最適な設定を行うことにより、CANの限られたリソースを十分に活かすことができます。
1. CAN IDの設定
CAN拡張機能を使用するときは、DT10とターゲット機器とで、双方向のCAN通信が発生しますので、
それぞれのCAN IDを設定します。
2. セキュリティコードの指定
コマンドの誤送信により、CANバス上に勝手にテストポイント用のデータが送信されることを防ぐために、
DT10はデータ取得時にターゲット機器にセキュリティコードを送信します。
ターゲット機器側が正しくテストポイントの情報を送信できることを確認した後に、
フィルタの設定情報の送信やテストポイントのデータの受信を行います。
Base Codeには、セキュリティコード作成の元になる文字列を指定します。
Create Keyボタンを押すことにより、セキュリティコードが作成されます。
作成されたセキュリティコードは、ターゲット機器に組み込むDT10ドライバ内で使用します。
3. テストポイント種別によるフィルタ
データのフォーマットに関係なく、テストポイントの種別でフィルタをすることができます。
(フィルタそのものはターゲット機器側で行うため、設定後のビルドは必要ありません。)
Branchは分岐に関連するテストポイントを意味します。
BranchのチェックボックスをONにするこで、if, switch, catchのテストポイントのフィルタが有効になります。
Loopはループ処理に関連するテストポイントを意味します。
LoopのチェックボックスをONにすることで、for, while, do-whileのテストポイントのフィルタが有効になります。
4. データフォーマットの指定
CANバス上に送信するデータのフォーマットを指定します。
フォーマットの指定は、チェックボックスの組み合わせにより、以下の3つのフォーマットが選択可能です。
・時間情報付加モード
・データ圧縮モード
4.1. 通常モード
通常モードでは、1回の送信で2つのテストポイントのデータが送信可能となっています。
通常モード時は、以下のように、「経過時間はターゲットプログラムで取得する」のチェックボックスOFF、
「モジュールまたはソースファイルによるフィルタを有効にする」のチェックボックスをOFFにします。
4.2. 時間情報付加モード
時間情報付加モードでは、1回の送信で1つのテストポイントのデータが送信となりますが、
ターゲット機器が持っている時間情報を付加することができます。
時間情報付加モード時は、以下のように、「経過時間はターゲットプログラムで取得する」のチェックボックスON、
「モジュールまたはソースファイルによるフィルタを有効にする」のチェックボックスはOFFにします。
また、「1カウントあたりの時間」を設定することで、ターゲット機器側で付加した時間情報の換算を行うことができます。
4.3. データ圧縮モード
データ圧縮モードでは、データを圧縮することにより、1回の送信で4つのテストポイントのデータが送信となります。
データ圧縮モード時は、以下のように、「経過時間はターゲットプログラムで取得する」のチェックボックスOFF、「
モジュールまたはソースファイルによるフィルタを有効にする」のチェックボックスはONにします。
データ圧縮モードでは、モジュールによるフィルタとソースファイルによるフィルタの2種類のフィルタが有効になっています。
4.3.1 ソースファイルによるフィルタ
ソースファイルによるフィルタを行うときは、「モジュールまたはソースファイルによるフィルタを有効にする」のチェックボックス右横のリストから「ソースファイル」を選択します。
フィルターの対象となるソースファイルを選択します。
(ソースファイル選択後のビルド操作は必要ありません)
4.3.2 モジュールによるフィルタ
モジュールによるフィルタを行うときは、「モジュールまたはソースファイルによるフィルタを有効にする」の
チェックボックス右横のリストから「モジュール」を選択します。
モジュールによるフィルタを設定したときは、モジュールを自動で切り替えながらのデータ取得が可能になります。
モジュールの選択やデータを取得するモジュールの順序の入れ替えはアイコンを使用して行います。
5. データの収集
データの収集は通常通り行います。
6. データ解析
データ解析も取得したモードに関係なく、通常通りの解析が可能です。