• 検索結果がありません。

普及に向けた取り組みを強化

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 keyF1 // [F1]キーを押した時に反応

on keyshiftF3 // [Shift]–[F3]キーを押した時に反応 on keyPageUp // [Page Up]キーを押した時に反応 on keyHome // [Home]キーを押した時に反応 on key* // どれかのキーを押した時に反応

1. 何かが起きた  (イベント発生)

キーボードの aが押された

2. 何かを行う

 (イベントに対する処理)

出力Windowに

「a が押されました」

と表示する

CANメッセージ

(ID0x100)を 送信し、

出力Window

「0x100を送信」

と表示する

記述例 variables {

}

on key 'a'// aキー押下で反応 {

 write ( 'a' が押されました );

}

variables {

 message 0x100 msg1={DLC=6};

    // 送信メッセージ0x100の      定義

}

on key 'a' {

 output (msg1);// aキーを押す       ごとに0x1001回送信  write ( 0x100を送信 );

}

 使用するイベントハンドラー on key

7.5.2 イベントハンドラー       on message

on message は、CANメッセージの受信に 対して反応します。(表7)

7

イベントハンドラー「on message」への定義例

on message 100 // メッセージ10010進数)に反応、受信チャンネルは考慮されません on message 0x100 // メッセージ10016進数)に反応、受信チャンネルは考慮されません on message EngineData // データベースより参照定義したメッセージEngineDataに反応 on message CAN1.0x200 // CAN1でメッセージ20016進数)を受信したら反応

on message * // 全てのメッセージ受信時に反応

on message CAN2.* // CAN2で受信した全てのメッセージに反応

on message 100-200 // ID100から20010進数)の間の全てのメッセージに反応 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); //50msT1をセット  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

関連したドキュメント