普及に向けた取り組みを強化
7. CAPLの記 述 1 CAPL の用語
7.5 イベントハンドラー、変数、
関数の使用例
次に、よく使用されるイベントハンドラーを使 用した基本的なCAPLの記述例を紹介します。
7.5.1 イベントハンドラー on key on key は、パソコンのキーボード押下に対し て反応します。(表6)
表6
イベントハンドラー「on key」への定義例
on key a // [a]キーを押した時に反応(大文字・小文字は区別されます)
on key // スペースバーを押した時に反応 on key F1 // [F1]キーを押した時に反応
on key shiftF3 // [Shift]–[F3]キーを押した時に反応 on key PageUp // [Page Up]キーを押した時に反応 on key Home // [Home]キーを押した時に反応 on key * // どれかのキーを押した時に反応
1. 何かが起きた (イベント発生)
キーボードの aが押された
2. 何かを行う
(イベントに対する処理)
出力Windowに
「a が押されました」
と表示する
CANメッセージ
(ID:0x100)を 送信し、
出力Windowに
「0x100を送信」
と表示する
記述例 variables {
}
on key 'a' // aキー押下で反応 {
write ( 'a' が押されました );
}
variables {
message 0x100 msg1={DLC=6};
// 送信メッセージ0x100の 定義
}
on key 'a' {
output (msg1); // aキーを押す ごとに0x100を1回送信 write ( 0x100を送信 );
}
使用するイベントハンドラー on key
7.5.2 イベントハンドラー on message
on message は、CANメッセージの受信に 対して反応します。(表7)
表7
イベントハンドラー「on message」への定義例
on message 100 // メッセージ100(10進数)に反応、受信チャンネルは考慮されません on message 0x100 // メッセージ100(16進数)に反応、受信チャンネルは考慮されません on message EngineData // データベースより参照定義したメッセージEngineDataに反応 on message CAN1.0x200 // CAN1でメッセージ200(16進数)を受信したら反応
on message * // 全てのメッセージ受信時に反応
on message CAN2.* // CAN2で受信した全てのメッセージに反応
on message 100-200 // ID100から200(10進数)の間の全てのメッセージに反応 on message EngineData, ABSdata //EngineData ABSdataどちらか受信時に反応 1. 何かが起きた
(イベント発生)
メッセージ 0x100を
受信した
2. 何かを行う
(イベントに対する処理)
出力Windowに
「0x100を受信」
と表示する
0x200を送信して 出力Windowに
「0x200を送信」
と表示する
記述例 variables {
}
on message 0x100 // ID0x100のメッセージ受信で反応 {
write ( 0x100を受信 );
}
variables {
message 0x200 Sendmsg={DLC=4}; // 送信メッセージ0x200の定義 }
on message 0x100 {
output (Sendmsg); // 0x100受信ごとに0x200を送信 write ( 0x200を送信 );
}
使用するイベントハンドラー on message
表8
7.5.3 イベントハンドラー on start / on timer
on start は、CANoe/CANalyzerの測定開 始に対して反応します。
on Timer は、タイマー設定時間経過に対し て反応します。(表8)
イベントハンドラー「on timer」への定義例
on timer a // [a]キーを押した時に反応(大文字・小文字は区別されます)
on timer // スペースバーを押した時に反応 on timer F1 // [F1]キーを押した時に反応
on timer shiftF3 // [Shift]–[F3]キーを押した時に反応 on timer PageUp // [Page Up]キーを押した時に反応 CAPLはTimerの概念が1つのキーとなりま
す。表8の記述例を見ると、「on start」と「on timer」の両方にCAPL関数「setTimer」が記述 されていますが、これらはどのような役割をして いるのでしょうか。また、どのようにしてCAPL からメッセージの周期送信が行われるのでしょ うか。これらについて、以下に解説していきます。
1. 何かが起きた (イベント発生)
CANoe、 CANalyzerが
測定開始 された
2. 何かを行う
(イベントに対する処理)
500ms後に タイマーT1を開始し CANメッセージ
(ID 0x100)を 50ms周期送信する
記述例 variables {
message 0x100 msg1={DLC=6};
msTimer T1;
}
on start {
setTimer(T1,500); /*測定開始500ms後に タイマーT1を呼び出す*/
on timer T1 {
setTimer(T1,50); //50ms毎T1をセット output(msg1); //メッセージを出力 }
使用するイベントハンドラー on start / on timer
【Timerの特徴】
1. タイマーはイベントが発生した後、設定時間 が経過した後に関係するon timerを呼び出す 2. タイマーの開始には、setTimer()関数を用い て時間を設定する
3. タイマー経過後に関連するタイマーイベント ハンドラーが呼ばれる
4. タイマーイベントハンドラーは、タイマー経 過後にイベントを実行すると同時に初期化さ れる
5. タイマーイベントは停止条件がない限り、繰 り返し呼ばれ、処理が行われる
図17
setTimerは次の2つの役割を担います。
① Variablesで定義したタイマーを(設定時間 経過後に)呼び出す
② on timer内に記述したプログラムを(設定 時間経過後に)処理する
図17をご覧ください。
①で、測定開始と同時にon startが呼ばれる
(ここで1つ目のsetTimerスタート)
→ ②500ミリ秒後にタイマー T1 が呼ば れる(つまりon timer T1が呼ばれ、2つ 目のsetTimerがスタート)
→ 100ミリ秒 後にCAPL関 数outputに よってメッセージが出力される
このように、onTimer内のsetTimerに記述 した時間 経 過ごとにoutputが 呼ばれてメッ セージを送信することで、CAPLからの周期送 信が行われています。
測定スタート
測定開始からの時間の流れ
タイマーイベント
0ms 600ms 700ms
50ms
メッセージ
出力 メッセージ
出力 メッセージ 出力
50ms 50ms
800ms 500ms
タイマーT1の呼び出し
②on timer T1 {
setTimer(T1,50);
output(msg1);
} ①on start
{
setTimer(T1,500);
}
表9