CAPLクイック ガイド

Version 1.1
06/23/04
Application Note AN-AND-1-113
執筆者
制限
要旨
Bruce Emaus
公開文書
この文書は CAPL の簡単な解説書です。CAPL は C 言語に似た使いやすいプログラミング言語であり、
CANalyzer と CANoe の内部のプログラミング環境に組み込まれています。この文書の主要な目的は、初心
者の CAPL プログラマをサポートすることです。
目次
1.0
2.0
2.1
2.2
2.3
2.4
2.5
3.0
4.0
5.0
5.1
6.0
6.1
7.0
8.0
9.0
CAPL プログラミング .............................................................................................................................................. 1
CAPL の適用分野.................................................................................................................................................. 1
ノードのエミュレーション........................................................................................................................................ 1
ネットワークのエミュレーション .............................................................................................................................. 2
ノードのテスト....................................................................................................................................................... 2
ゲートウェイ ......................................................................................................................................................... 2
バス セパレータ ................................................................................................................................................... 2
CAPL プログラミング環境 ....................................................................................................................................... 2
イベントに対する CAPL の応答............................................................................................................................... 3
CAPL プログラムの例 ............................................................................................................................................ 5
イベント メッセージの送信..................................................................................................................................... 5
周期的メッセージの送信 ......................................................................................................................................... 6
条件付きの周期的メッセージの送信 ..................................................................................................................... 7
CAPL に関する制限 ............................................................................................................................................... 8
まとめ..................................................................................................................................................................... 9
連絡先 ................................................................................................................................................................... 9
1.0 CAPL プログラミング
CAN ベースのネットワーク、モジュール、分散型組み込みシステムでは、CAPL(Communication Application Programming
Language)を使用して CANalyzer をプログラミングできます。CAPL では、CAN プロトコルを使用する個別の適用業務に合わ
せたプログラミングと開発が可能です。分散型製品を開発するときなどは、CAPL を CANoe ツールでも使用できます。
2.0 CAPL の適用分野
2.1
ノードのエミュレーション
CAPL が組み込まれた CANalyzer を使用すると、ノードの様々な機能 (イベントの送信、周期的メッセージ、条件付きの周期
的メッセージなど) のエミュレーションを実行できます。また、特定のメッセージを受信したときに応答する会話式のメッセージも
作成できます。
Copyright © 2003 - Vector CANtech, Inc.
http://www.vector-japan.co.jp
1
CAPL クイック ガイド
2.2
ネットワークのエミュレーション
CAPL を組み込んだ CANalyzer を使用すると、既存のすべてのノードに対するシステム レベルでデータ トラフィックのエミュレ
ーションを実行できます。
2.3
ノードのテスト
CAN ベースのモジュールの開発過程で、CANalyzer を使用してモジュールの通信動作をテストできます。たとえば、メッセージ
送受信のタイミングの評価、Bus Off への対処、その他の各種機能に関するテストを簡単に実施することができます。
2.4
ゲートウェイ
CAPL が組み込まれた CANalyzer を、複数の異なる CAN バス間で一時的または永続的なゲートウェイ(またはブリッジ)として
使用すると、それらの CAN バス間で相互にデータを交換することができます。
2.5
バス セパレータ
CAPL のもう 1 つの使途として、テスト対象のノードと実際のネットワークとの間に CANalyzer Pro を挿入することが考えられ
ます。システムレベルの開発過程でこのような構成を使用すると、特定のノードの動作を分離してテストしたり、必要に応じてノ
ードの動作を変更したりすることができます。分散システムの開発過程で、異なるリビジョン レベルにある複数のモジュールを
相互に連携して、開発作業の連続性を維持することも、CAPL の 1 つの応用例です。
3.0 CAPL プログラミング環境
一般的に、CAPL は手続き型のプログラミング言語と考えられますが、プログラミング環境としてとらえることもできます。
CAPL プログラミング環境では、広範な入力、出力、その他の機能とインターフェイスを取る CAPL プログラムの作成、変更、
保守を行うことができます。CAPL プログラミング環境の内部で利用できるインターフェイスの例として、開始/終了イベント、キ
ーボード入力イベント、CAN メッセージの送信と受信、シリアル ポートおよびパラレル ポートとの対話、タイマーの使用、ユー
ザー独自の DLL へのリンクなどが挙げられます。
ほとんどのプログラムは、CAPL ブラウザを使用して開発します。CAPL ブラウザは、コードの編集からコンパイルまでの全体
的な開発プロセスをサポートする使いやすいツールです。CAPL ブラウザは CANalyzer または CANoe に組み込まれたコンポ
ーネントですが、CANalyzer または CANoe の外部で独立したアプリケーション プログラムとして使用することもできます。
Application Note AN-AND-1-113
2
CAPL クイック ガイド
4.0 イベントに対する CAPL の応答
一般的に、CAPL プログラムは、イベントを検出して、そのイベントに応答する手続き(イベント プロシージャ)を実行するという単
純な構造でデザインされます。
たとえば、CANalyzer の開始ボタンが押されたときに"Start Test"という文字列を書き込み Window に出力するには、次のよう
なプログラムを作成します。
Application Note AN-AND-1-113
3
CAPL クイック ガイド
on start
{
write("Start Test");
}
CAPL では、次のようなタイプのイベントを検出できます。
•
開始ボタンを押す
•
終了ボタンを押す
•
ユーザーのキーボード入力
•
CAN メッセージの受信
•
タイマーの時間切れ(タイムアウト)
•
グラフィック パネルを通じたユーザー入力 (CANoe のみで検出可能)
このように「イベントの発生を起因として特定の手続き型処理を実行する」という方法に基づき、CAPL プログラムはイベント プ
ロシージャの集合として構築/編成されます。
CAPL ブラウザは、イベント プロシージャの複数の異なるグループに対応するように構成されています。これらのイベント プロ
シージャ グループは「イベント クラス」と呼ばれます。次の CAPL イベント一覧に示すように、イベント クラスには、システム、
CAN コントローラ、CAN メッセージ、タイマー、キーボード、CAN エラー フレームなどがあります。
Application Note AN-AND-1-113
4
CAPL クイック ガイド
5.0 CAPL プログラムの例
CAN ベースのほとんどの分散型組み込みシステムでは、イベント メッセージ、周期的メッセージ、条件付きの周期的メッセージ
という 3 種類の情報送信ダイアログが使用されます。以下に説明する CAPL プログラムの例では、これら 3 種類のメッセージ
を送信するプログラムを開発するために、どの程度の長さの CAPL コードを記述する必要があるのかを示します。
5.1
イベント メッセージの送信
特定のイベントが発生したときに限り情報を送信すればよい場合は、イベント メッセージを使用します。ここで示す簡単なプログ
ラムでは、PC キーボードの'b'キーが押されたときに、CAN メッセージを 1 回送信します。
各メッセージを使用するには、メッセージを表す変数をグローバル変数で定義する必要があります。この例では、最初に、msg1
という変数名のメッセージを定義しています。このメッセージ msg1 の CAN 識別子は 16 進 555(0x555)であり、データ 長
(dlc=data length code)は 1 バイトです。
注: この例では、同じ CAPL プログラムの内部のみでメッセージを定義していますが、CANdb プログラム(Vector CAN ツール
製品に付属の別アプリケーション プログラム)を使用すると、ユーザー定義、業界標準、または企業固有のメッセージング デー
タベースからメッセージを簡単に取り込むことができます。
次に、'b'キーが押されたときに実行する新しいプロシージャ"on key"をイベント クラス"keyboard"に挿入します (プロシージャを
追加するときは、マウスの右ボタンをクリックします)。キーの名前を一重引用符で囲むことを忘れないでください。このプロシー
ジャ"on key"では、CAN メッセージの最初のバイトを 16 進 AA(0xAA)にセットした後、CAPL の組み込み関数 output を使用し
てメッセージを送信しています。関数 output で使用されているメッセージ名 msg1 は、グローバル変数で定義された変数名と
同じであることに注意してください。
variables
{
message 0x555 msg1 = {dlc=1};
}
on key 'b'
{
msg1.byte(0)=0xAA;
output(msg1);
}
Application Note AN-AND-1-113
5
CAPL クイック ガイド
6.0 周期的メッセージの送信
情報を反復的に送信する必要がある場合は、周期的メッセージを使用します。
周期的メッセージを送信するには、タイマーを使用する必要があります。このタイマーの名前は、グローバル変数領域で定義し
なければなりません。このタイマーを起動するために、開始ボタンをクリックしたときに実行されるイベント プロシージャ"on
start"の内部で、タイマーを初期化します。この例では、setTimer という CAPL 組み込み関数を使用して、タイマーの時間値を
100 ミリ秒に初期化しています。
タイマーが時間切れ(タイムアウト)になると、イベント プロシージャ"on timer"が実行されます。このイベント プロシージャ"on
timer"の内部では、タイマーを再び 100 ミリ秒にリセットします。次に、メッセージの最初のデータ バイトを増加した後、CAPL 組
み込み関数 output を使用して CAN メッセージを送信します。
ツールの停止ボタンが押されるまで、この反復的な処理が続行されます。
variables
{
message 0x555 msg1 = {dlc=1};
// timer1 を定義
mstimer timer1;
}
on start
{
setTimer(timer1,100);
// タイマーを 100 ミリ秒に初期化
}
on timer timer1
{
setTimer(timer1,100);
// タイマーをリセット
Application Note AN-AND-1-113
6
CAPL クイック ガイド
msg1.byte(0)=msg1.byte(0)+1;
// データを変更
output(msg1);
// メッセージを出力
}
CAPL プログラミング環境で、この周期的メッセージ用のプログラムを開発するときは、CAPL コードを 3 か所の異なる位置に
入力する必要があります。入力するコードは全部で 6 行になります。
6.1
条件付きの周期的メッセージの送信
特定の条件が満たされた場合だけ情報を反復的に送信する必要がある場合は、条件付きの周期的メッセージを使用します。
ここで示す CAPL プログラムでは、PC キーボードの'a'キーが押されるたびに、周期的メッセージを送信する状態とメッセージを
送信しない状態を切り替えます。
条件付きの周期的メッセージを送信するときにも、タイマーを使用する必要がありますが、このタイマーを継続的に実行する必
要はありません。キーボードの'a'キーが押されるたびに、タイマーのオン/オフを切り替えます。つまり、最初に'a'キーが押され
たときに周期的メッセージを開始し、次に'a'キーが押されたときに周期的メッセージを停止します。その後、'a'キーが押されるた
びに、これら 2 つの状態(メッセージのオン/オフ)を切り替えます。
グローバル変数では、前述の周期的メッセージの例とは異なるメッセージ名とタイマー名を定義していることに注意してください。
このようにすれば、同じ CAPL プログラムの内部で、必要に応じて 2 種類のメッセージ送信方式をテストすることができます。
最初に、メッセージを送信しない状態からプロセスを正しく開始するために、グローバル変数領域で conditionA という整数変数
を定義し、その変数の値をゼロ(オフ状態を表す値)に初期化します。
Application Note AN-AND-1-113
7
CAPL クイック ガイド
'a'キーが押されると、イベント プロシージャ"on key"が実行されます。 このプロシージャでは、状態変数 conditionA の値を切り
替えた後、新しい状態がオン(1)であるかどうかをテストします。状態がオン(1)である場合は、タイマーを起動します。
タイマーが時間切れ(タイムアウト)になると、イベント プロシージャ"on timer"が実行されます。このプロシージャでは、状態がオ
ン(1)である場合にタイマーをリセット(再起動)します。続いてメッセージのデータを変更した後、CAN メッセージを送信します。
状態がオフに切り替えられた場合に、タイマーが実際に停止するのは、次回のタイムアウトが発生したときであることに注意し
てください。
ツールの停止ボタンが押されるまで、この条件付きの反復処理が続行されます。
CAPL プログラミング環境で、このプログラムを開発するときは、CAPL コードを 3 か所の異なる位置に入力する必要がありま
す。入力するコードは全部で 10 行になります。
variables
{
message 0x400 msgA = {dlc=1};
mstimer timerA;
// 状態変数 conditionA = off に初期化
int conditionA = 0;
}
on key 'a'
{
conditionA =! conditionA;
// conditionA を切り替え
if(conditionA == 1)
// 状態がオンである場合
{
setTimer(timerA,200);
// タイマーを起動
}
}
on timer timerA
{
if(conditionA == 1)
// 状態がまだオンである場合
{
setTimer(timerA,200);
// タイマーを再起動
}
msgA.byte(0)=msgA.byte(0)-1; // データを変更
output(msgA);
// メッセージを出力
}
7.0 CAPL に関する制限
CAPL の処理能力は、CAPL 内部の構造や動作特性よりも利用可能な PC リソースによって制限を受けます。
一例として、CAN プロトコルと UART ベースの他のプロトコルとの間で高速ゲートウェイを使用して、性能境界値がどのように
変化するのかを検証しました。PCを交換して速度の向上を確認した結果、一貫した性能値を維持するのは極めて困難である
ことが判明しました。
数多くの CANoe モデルでは c.40 を使用して複数の CAPL プログラムを同時に実行し、車両全体のリアルタイム シミュレーシ
ョンを実行しています。CANoe モデルを実モジュールに相互接続したり、実際の車両のサブシステム部分に接続したりすること
もできます。
Application Note AN-AND-1-113
8
CAPL クイック ガイド
8.0 まとめ
CAPL プログラムは、設計、製造、保守のすべての工程で役立つ強力なツールです。
CAPL の各種機能を実際に体験するために、デモ版の CANalyzer(ベクターの Web サイトから入手可能)を使用して、CAPL
プログラムの作成、コンパイル、テストを実行できます。 デモ版の CANalyzer で作成したコードは、後でライセンス版の
CANalyzer に移行できます。
9.0 連絡先
Vector Informatik GmbH
Ingersheimer Straße 24
70499 Stuttgart
Germany
Tel.: +49 711-80670-0
Fax: +49 711-80670-111
Email: [email protected]
Vector CANtech, Inc.
39500 Orchard Hill Pl., Ste 550
Novi, MI 48375
Tel: (248) 449-9290
Fax: (248) 449-9704
Email: [email protected]
Vector France SAS
168 Boulevard Camélinat
92240 Malakoff
France
Tel: +33 (0)1 42 31 40 00
Fax: +33 (0)1 42 31 40 09
Email: [email protected]
ベクター・ジャパン株式会社
〒103-0027 東京都中央区日本橋 3-39 西川ビル 2 階
日本
Tel: 03-3516-7850
Fax: 03-3516-7855
電子メール: [email protected]
Application Note AN-AND-1-113
VecScan AB
Fabriksgatan 7
412 50 Göteborg
Sweden
Tel: +46 (0)31 83 40 80
Fax: +46 (0)31 83 40 99
Email: [email protected]
9