Comments
Description
Transcript
CANoe/CANalyzer as a COM Server
CANoe/CANalyzer as a COM Server Version 1.2 Application Note AN-AND-1-117 Restrictions Abstract Public Document This application note is a general introduction to the COM server functionality of CANoe and CANalyzer using Microsoft Visual Basic examples. Table of Contents 1 1.1 1.2 1.3 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 3 3.1 3.2 4 概要 2 はじめに .............................................................................................................................................................. 2 COM (Component Object Model)...................................................................................................................... 2 COM としての CANoe/CANalyzer ....................................................................................................................... 3 Microsoft Visual BASIC を使用して COM サーバーにアクセスするには ................................................................. 3 プロジェクトの設定 ............................................................................................................................................... 3 測定の制御 ......................................................................................................................................................... 4 通信データへのアクセス....................................................................................................................................... 5 環境変数へのアクセス (CANoe のみ) .................................................................................................................. 7 CANoe/CANalyzer イベントへの反応 .................................................................................................................. 9 CAPL 関数の呼び出し ......................................................................................................................................... 9 CAN メッセージの送信 ....................................................................................................................................... 13 Microsoft Visual Basic の COM サーバーの例..................................................................................................... 14 ビジュアル インターフェイス ................................................................................................................................ 14 ソース コード ...................................................................................................................................................... 16 連絡先 ................................................................................................................................................................. 20 Copyright © 2003 - Vector CANtech, Inc. Contact Information: http://www.vector-japan.co.jp or 81-3-5769-6971 1 CANoe/CANalyzer as a COM Server 1 概要 1.1 はじめに CANoe と CANalyzer は、CAN バスのシミュレーションと解析を行うツールです。どちらのアプリケーションも、他のバスシステ ムにも使用でき、LIN、MOST、FlexRay の各オプションもご利用いただけます。CANalyzer は、データ トラフィックの解析、監 視、シミュレーションを行うことができ、一方 CANoe では、ネットワーク システムの機能モデル全体を作成することができます。 CANoe で作成した機能モデルは、設計から最終検査までのネットワーク開発工程全体で使用することができます。 本アプリケーション ノートには、CANoe/CANalyzer を COM サーバーとして使用する場合の概要について記載されています。 COM サーバーの機能に関する技術面の基本と可能性についても説明されています。Microsoft Visual Basic で作成されたサ ンプルを使用して、CANoe/CANalyzer COM サーバーのプログラミングできるようになっています。 1.2 COM (Component Object Model) COM は、異なるソフトウェア コンポーネント間で通信を行うために、Microsoft が定義した規格です。このコンポーネントは、 様々なプログラミング言語で作成することができ、様々なソフトウェア 開発者が個別にビルドすることができます。 Application Note AN-AND-1-117 2 CANoe/CANalyzer as a COM Server 1.3 COM としての CANoe/CANalyzer CANoe/CANalyzer バージョン 3.0 以降には、ビルドイン COM インターフェイスが搭載されています。この COM サーバーの 機能により、以下のことが可能です。 • • • CANoe/CANalyzer と他の外部プログラム/パッケージ間のデータ交換ができます。ただし、外部プログラムも COM テ クノロジに対応している必要があります。 ユーザー固有の制御パネルを使用してテスト シーケンスを自動化できます。 CANoe/CANalyzer を使用して測定をリモートで制御できます。ネットワークを介して CANoe/CANalyzer をリモートで 制御することもできます。 CANoe/CANalyzer の COM サーバー機能には、様々なプログラミング言語やスクリプト言語を使用してアクセスすることがで きます。ただし、使用するスクリプトは、すべて Microsoft の Windows Script ソフトウェア コンポーネント ベースである必要が あります。また、VBScript や Jscript などの Microsoft Windows 98、Windows NT、Windows 2000 のパッケージの一部とし て提供されているスクリプト言語を使用することができるため、Microsoft Excel や Microsoft Word でテスト報告書を作成する ことができます。さらに、Microsoft Visual Basic、Microsoft Visual C++、Borland Delphi などのプログラミング言語を使用して、 ユーザー独自のアプリケーションを作成することができます。 2 Microsoft Visual BASIC を使用して COM サーバーにアクセスするには 2.1 プロジェクトの設定 Microsoft Visual Basic は、比較的簡単に Microsoft Windows プラットフォーム用のアプリケーションを作成できる Rapid Application Development (RAD) ツールです。COM サーバーの機能を記述する時に、Microsoft Visual Basic 用に記述され たサンプルを使用すると、CANoe/CANalyzer COM サーバーにプログラミングする方法の詳細が分かります。 CANoe/CANalyzer COM サーバーは、相互に関係し合う複数のオブジェクトで構成され、特定のオブジェクト階層を使用しま す。各 COM サーバー オブジェクトは以下の 3 つのエレメントを使用して定義されており、これを使用して COM サーバーの機 能にアクセスすることができます。 1) オブジェクト プロパティ 2) オブジェクト メソッド 3) オブジェクト イベント 例:CANController.Baudrate 例:Measurement.Start 例:Application.OnQuit COM サーバー オブジェクトの階層について基本的な知識がある場合、COM サーバーの機能概要がよく理解できます。COM サーバー オブジェクトの階層については、CANoe および CANalyzer のオンライン ヘルプで説明されています。 Application Note AN-AND-1-117 3 CANoe/CANalyzer as a COM Server 図1 :CANalyzer の Type Library の参照設定 Microsoft Visual Basic から COM サーバーにアクセスするには、Microsoft Visual Basic プロジェクトを CANalyzer (または CANoe) を使用できるように設定する必要があります。Microsoft Visual Basic では、これは図 1のプロジェクトの参照設定を 使用して行います。 2.2 測定の制御 CANalyzer/CANoe の Type Library を使用できるように Microsoft Visual Basic プロジェクトを設定すると、アプリケーションが COM サーバーにアクセスできるようになります。ほとんどどの状況においても、CANalyzer/CANoe のコンフィギュレーションを 利用して測定を実行する場合、COM サーバーを使用します。 Visual Basic で COM サーバーの Application オブジェクトにア クセスするには、グローバル変数を使用しなければいけません。このグローバル変数は、次のように宣言します。 Dim gCanApp As CANalyzer.Application 次に、グローバル変数を初期化することにより、COM サーバーの Application オブジェクトにアクセスすることを Microsoft Visual Basic に認識させます。この初期化は、次のように宣言します。 Set gCanApp = New Application CANalyzer をまだ起動していない場合、コードの前の行で CANalyzer の新しいインスタンスが生成されます。前述のように、 主に COM サーバーを使用するのは、ユーザー独自の CANoe/CANalyzer のコンフィギュレーションを使用して測定を実行す る時です。つまり、ユーザー独自のコンフィギュレーションを読み込む場合には必ず COM サーバーを使用する必要があります。 この場合、次のように COM サーバーの Application オブジェクトの Open() メソッドを使用することができます。 gCanApp.Open ("C:\Program Files\CANalyzer\Demo_CL\motbus.cfg") コンフィギュレーションに CAPL (CAN Application Programming Language:CANoe/CANalyzer のプログラミングを行う言 語) コードが含まれる場合、測定に最新のコードが使用されるように、新しい測定を開始する前には必ず CAPL コードをリコン パイルしてください。 Application Note AN-AND-1-117 4 CANoe/CANalyzer as a COM Server コンパイルは、COM を使用して行うこともできます。この場合、CAPL オブジェクトの Compile() メソッドを使用します。CAPL オブジェクトもまた Application オブジェクトの一部なので、すでに初期化された gCanApp 変数を使用して CAPL オブジェクト にアクセスすることができます。 gCanApp.CAPL.Compile この時点ですべての設定が行われ、新しい測定の準備ができます。 新しい測定は、Measurement オブジェクトを使用して開始/停止することができます。CAPL オブジェクトと同様に、 Measurement オブジェクトも Application オブジェクトの一部なので、gCanApp 変数を使用して Measurement オブジェクトに アクセスすることができます。Measurement オブジェクトの Start() と Stop() メソッドを使用すると、新しい測定の開始と終了を 行うことができます。次のように使用します。 gCanApp.Measurement.Start また、COM サーバーにも Application オブジェクトの Quit() メソッドを使用して CANalyzer アプリケーションを終了させる機能 があります。次のコードを使用して CANalyzer を終了させることができます。このコードでは、Measurement オブジェクトの Running プロパティをチェックし、測定が実行中かどうかを確認します。実行中の場合、CANalyzer アプリケーションを終了さ せる前に、測定を停止させます。 If gCanApp.Measurement.Running Then 'stop the CANalyzer measurement gCanApp.Measurement.Stop End If 'quit the CANalyzer application gCanApp.Quit 2.3 通信データへのアクセス CANalyzer のコンフィギュレーションに使用される通信データは、CANdb データベースに保存されます。CANdb データベース ファイルには、.DBC というファイル拡張子が付き、ベクター ツール チェーン全体で共有のデータベースとして使用されます。た とえば、CANdb データベースには、CANalyzer コンフィギュレーションで使用される CAN メッセージが含まれます。各 CAN メ ッセージは、最高 8 データバイトです。CAN メッセージのデータ バイトは、1 つ以上のシグナルで構成されます。これらのシグ ナルは、CANdb データベースで定義されます。 Application Note AN-AND-1-117 5 CANoe/CANalyzer as a COM Server 図2 :CANdb++の CAN メッセージとシグナル 図 2 は、CANdb++ Database Editor で開いた CANdb データベースのスクリーンショットです。Window の左ペインでは CAN メッセージの「EngineData」が選択されています。Window の右ペインには、選択したメッセージのシグナルが表示されていま す。CANdb データベースには、CAN メッセージ「EngineData」が ID 64 (hex) のメッセージとして定義され、メッセージの長さは 4 データ バイトです。右ペインに表示されるように、シグナルはこの 4 データ バイトの中にあります。「EngSpeed」というシグナ ルは、16 ビット (2 バイト) のシグナルとして定義されており、「EngineData」という CAN メッセージの 0 バイト目と 1 バイト目に あります。 CANdb データベースを使用する主な利点は、定義済みのシグナル名を使用して、通信データにアクセスできることです。前述 のサンプル データベースでは、「EngSpeed」という名前を使用してシグナル値を読み書きすることができます。シグナルの場 所は、CANdb データベースにすでに定義されているので、シグナルが CAN メッセージのどこにあるかを心配する必要はあり ません。CANdb データベースを使用しないで同じタスクを実行するには、CAN メッセージのどこにシグナルがあるかを必ず覚 えておき、CAN メッセージのデータ バイトを直接読み書きする必要があります。 CANoe/CANalyzer の各コンフィギュレーションには、CANdb データベースが割り当てられているので、COM サーバーは、 CANdb データベースに定義されたシグナルを使用して通信データにアクセスできます。Visual Basic の Signal オブジェクトに アクセスするには、最初に Signal オブジェクトを変数に割り当てる必要があります。変数は次のように宣言します。 Dim gEngSpeedSignal As CANalyzer.Signal Bus オブジェクトの GetSignal() メソッドを使用して、CAN メッセージのシグナルを前に宣言した変数 gEngSpeedSignal に割 り当てます。このシグナルは、使用している CANalyzer/CANoe コンフィギュレーションの CANdb データベースに定義する必 要があります。また、Bus オブジェクトも Application オブジェクトの一部なので、すでに初期化された gCanApp 変数を使用し て Bus オブジェクトにアクセスすることができます。 Set gEngSpeedSignal = gCanApp.Bus.GetSignal(1, "EngineData", "EngSpeed") Application Note AN-AND-1-117 6 CANoe/CANalyzer as a COM Server GetSignal() メソッドは、次の 3 つのパラメータを使用します。 • シグナルを送信するチャンネル。 • シグナルを含むメッセージの名前。 • シグナルの実名。 シグナルを変数 gEngSpeedSignal に割り当てたら、この変数を使用して、Signal オブジェクトの Value プロパティを使用し、 シグナルにアクセスすることができます。 lblEngSpeedDisplayControl.Caption = gEngSpeedSignal.Value COM を使用して、直接シグナルの値を変更することはできません。第2.7章では、CAN メッセージにメッセージのシグナル値を 割り当てる方法について説明します。ここでの例では、COM サーバーを使用して、CAPL 関数のパラメータを介してシグナル 値を Visual Basic から CAPL に渡します。そして、このパラメータの値を、CAPL 関数で CAN メッセージのシグナルに割り当 てます。 2.4 環境変数へのアクセス (CANoe のみ) 環境変数は外部入出力に関係のあるネットワーク ノードの動作を示し、CANoe にのみ使用することができます。環境変数は、 CAN メッセージのシグナルと似ています。環境変数と CAN メッセージ シグナルはどちらもノードの入出力に使用します。両者 の違いは、CAN メッセージのシグナルが CAN ネットワーク通信に使用するのに対し、環境変数がノードの外部ソース (スイッ チ ポジション、センサー シグナル、アクチュエータ シグナルなど) の入出力に使用される点です。本章では、CANoe の COM サーバー機能を使用して環境変数にアクセスする方法を説明します。 Application Note AN-AND-1-117 7 CANoe/CANalyzer as a COM Server 図3 :CANdb++の環境変数 環境変数は、CANdb に定義および保存されます。図 3は、CANdb++ Database Editor で開いたサンプルの CANdb データベ ースのスクリーンショットです。 環境変数はノードの外部の入出力を表わすので、GUI (Graphical User Interface) を使用してインタラクティブに使用すること ができます。CANoe のパネル エディタを使用して独自の GUI を作成することができます。パネル エディタでは、パネルの各オ ブジェクト (ボタン、テキストボックスなど) を CANdb データベースに定義される環境変数に割り当てることができます。これによ り、GUI を使用して環境変数の値を変更することができます。環境変数を変更するたびに、イベントがトリガーされます。CAPL (CAN Access Programming Language) を使用して、外部入出力に関係するネットワーク ノードの動作を表わすこれらのイベ ントに反応することができます。このネットワーク ノードの動作は環境変数が表わします。 図4 :環境変数と GUI 図 4 の例では、環境変数をどのようにして GUI と組み合わせて使用するかを示しています。この例では、制御パネルの 0 番 のスイッチが環境変数 Env_Switch0 に割り当てられています。スイッチをクリックしてアクティブにすると、環境変数 Env_Switch0 の値が 0 から 1 に変わり、これによって CAPL コードでハンドラされたイベントがトリガーされます。 COM サーバーにより環境変数の値が読み書きされるので、Microsoft Visual Basic を使用して GUI を作成し、ノードの外部入 出力の動作をインプリメントすることができます。COM サーバーを使用して、環境変数と CAN メッセージ シグナルのどちらに も同じようにアクセスすることができますが、CAN メッセージ シグナルの値は読み取ることしかできないのに対し、環境変数の 値は読み書きの両方が可能です。 Visual Basic の EnvironmentVariable オブジェクトにアクセスするには、最初に Signal オブジェクトを変数に割り当てる必要 があります。変数は次のように宣言することができます。 Dim gSwitch0EnvVar As CANoe.EnvironmentVariable Application Note AN-AND-1-117 8 CANoe/CANalyzer as a COM Server Environment オブジェクトの GetVariable() メソッドを使用して、環境変数を前に宣言した変数 gSwitch0EnvVar に割り当てる ことができます。この変数は、使用する CANoe コンフィギュレーションの CANdb データベースに定義する必要があります。ま た、Environment オブジェクトも Application オブジェクトの一部なので、すでに初期化された gCanApp 変数を使用して Environment オブジェクトにアクセスすることができます。 Set gSwitch0EnvVar = gCanApp.Environment.GetVariable("Env_Switch0") GetVariable() メソッドは、環境変数の名前を 1 パラメータ使用します。このパラメータは、CANdb データベースに定義される環 境変数と全く同じ名前にします。環境変数を変数 gSwitch0EnvVar に割り当てたら、この変数を使用して、 EnvironmentVariable オブジェクトの Value プロパティを使用し、環境変数にアクセスすることができます。 gSwitch0EnvVar.Value = 1 2.5 CANoe/CANalyzer イベントへの反応 COM サーバーを使用して、CANalyzer/CANoe でトリガーされるイベントに反応することができます。イベントの例は、 Measurement オブジェクトの OnStart イベントで、このイベントは、CANalyzer/CANoe で測定が開始されるたびにトリガーさ れます。COM サーバーを使用して割り込みできるイベントについては、CANalyzer/CANoe のオンライン ヘルプの COM サー バー オブジェクト階層の記述を参照してください。 Visual Basic で COM サーバー オブジェクト イベントに反応するには、この機能を COM サーバー オブジェクトに対して有効に する必要があります。第2.2では、Application オブジェクトのグローバル変数は次のように宣言されています。 Dim gCanApp As CANalyzer.Application この特定のオブジェクトに対するイベントを有効にするには、Visual Basic キーワードの WithEvents を変数の宣言で使用しま す。 Dim WithEvents gCanApp As CANalyzer.Application COM サーバー オブジェクト イベントに反応させるには、Visual Basic 用の関数を作成し、この関数の名前をあらかじめ定義す る必要があります。この定義が必要なのは、イベントが Visual Basic の外部で発生するためです。関数の名前は、<object variable name>_<event name>() のように定義します。たとえば、本章の宣言を使用して Application オブジェクトの OnQuit イベントに反応するには、関数を次のように定義します。 Private Sub gCanApp_OnQuit() 'create application specific OnQuit event handler here.. End Sub この Visual Basic 関数は、CANalyzer が終了するたびに呼び出されます。イベントに反応するプロシージャは、すべての COM サーバー オブジェクトで同じです。 2.6 CAPL 関数の呼び出し CAPL を使用して、CANalyzer/CANoe 用のアプリケーションを作成することができます。このようなプログラムを使用すると、 ネットワーク ノードの開発工程期間が短縮されます。CAPL を使用すると CAN ノードの動作のシミュレーション、データ トラフィ ックの解析、ゲートウェイの作成などができるので、様々な CAN バスをまたがってデータ交換を行うことができます。 CAPL を使用して、特定のタスクを実行するアプリケーション固有の関数をインプリメントすることができます。COM サーバーの 機能によりこれらの関数を呼び出すことができるので、COM サーバーを使用して測定全体を制御することができます。本章で は、Microsoft Visual Basic アプリケーションから CAPL 関数を呼び出す場合の、COM サーバーの使用方法について説明し ます。CAPL プログラムは、CANalyzer/CANoe の一部として提供される CAPL ブラウザを使用して記述します。図 5は、 CAPL ブラウザのスクリーンショットで、CAPL 関数の場所を示しています。 Application Note AN-AND-1-117 9 CANoe/CANalyzer as a COM Server 図5 :CAPL ブラウザで関数が表示される場所 COM サーバーの機能を使用して CAPL 関数を呼び出す場合、グローバル変数を使用します。CAPLFunction オブジェクトに アクセスするには、グローバル変数を宣言する必要があります。CAPL 関数は、変数に割り当てないと呼び出すことができませ ん。CAPL 関数を変数に割り当てるには、CAPL オブジェクトの GetFunction() メソッドを使用します。GetFunction() メソッドの パラメータは、CAPL 関数の名前です。 重要: CAPL 関数の変数への割り当ては、Measurement オブジェクトの OnInit イベントでのみ行うことができます。 そのため、Measurement オブジェクトへのアクセスに使用する変数を、Visual Basic の WithEvents キーワ ードを使用して宣言する必要があります。 Application Note AN-AND-1-117 10 CANoe/CANalyzer as a COM Server 変数を宣言して初期化したら、この変数を使用して変数が参照する CAPL 関数を呼び出すことができます。CAPL 関数を呼び 出すには、CAPLFunction オブジェクトの Call() メソッドを使用します。次のように使用します。 'CANalyzer objects Dim WithEvents gCanApp As CANalyzer.Application Dim WithEvents gCanMeasurement As CANalyzer.Measurement Dim gWriteTextFunction As CANalyzer.CAPLFunction 'Initialization of CANalyzer objects Set gCanApp = New Application Set gCanMeasurement = gCanApp.Measurement 'Measurement OnInit event handler Private Sub gCanMeasurement_OnInit() 'assign CAPL function Set gWriteTextFunction = gCanApp.CAPL.GetFunction("WriteText") End Sub 'Call WriteText() CAPL function gWriteTextFunction.Call また、入力パラメータを CAPL 関数に渡し、CAPL 関数の戻り値を読み取ることもできます。入力パラメータの数は 10 個までで す。CAPL 関数のパラメータとして配列を渡すことはできません。Microsoft Visual Basic によって渡される入力パラメータの数 は、必ず CAPL 関数のパラメータの数と一致する必要があります。CAPL では、long タイプのパラメータを使用してください。こ の場合、byte (1 バイト)、int(eger) (2 バイト)、long (4 バイト) タイプのパラメータを Microsoft Visual Basic から渡すことができ、 Microsoft Visual Basic と CAPL でタイプが一致していることを考慮する必要がありません。 以下にパラメータを渡す場合の例を示します。 'CANalyzer objects Dim WithEvents gCanApp As CANalyzer.Application Dim WithEvents gCanMeasurement As CANalyzer.Measurement Dim gMultiplyFunction As CANalyzer.CAPLFunction Dim gMultiplyResult As Integer 'Initialization of CANalyzer objects Set gCanApp = New Application Set gCanMeasurement = gCanApp.Measurement 'Measurement OnInit event handler Private Sub gCanMeasurement_OnInit() 'assign CAPL function Set gMultiplyFunction = gCanApp.CAPL.GetFunction("Multiply") End Sub 'multiply two values and get the result in the CAPL function’s return value gMultiplyResult = gMultiplyFunction.Call (4, 5) Application Note AN-AND-1-117 11 CANoe/CANalyzer as a COM Server Figure 6 :CAPL 関数 Multiply() 重要: CAPL 関数の戻り値は、必ず integer タイプである必要があります。COM サーバーを CANalyzer と組み合わ せて使用する場合、現在の CAPL プログラムを表わしている P Block が CANalyzer の評価ブランチに設定 されている場合に限り、CAPL 関数の戻り値を使用することができます。CANalyzer 測定設定の各種ブランチ については、図 7を参照してください (注:リアルタイム ブランチと評価ブランチは、それぞれシミュレーション ブ ランチ、解析ブランチと呼ばれることがあります)。 Application Note AN-AND-1-117 12 CANoe/CANalyzer as a COM Server 図7 :CANalyzer の測定ブランチ 2.7 CAN メッセージの送信 COM サーバーには、CAN メッセージの送信を開始する機能はありませんが、できないわけではありません。これを行うには、 CAPL 関数 output() の呼び出しを含む関数を CAPL プログラムでインプリメントします。関数 output() は、CAN メッセージや エラー フレームを送信するときに CAPL プログラムで使用することができる CAPL のライブラリ関数です。COM サーバーの機 能を使用して CAPL 関数を呼び出すことで、CAN メッセージの送信を行う独自の CAPL 関数を呼び出すことができます (第 2.6章で説明)。 CANalyzer を使用する場合、いくつかの制限事項があります。CAPL でインプリメントされる関数にライブラリ関数 output() が 含まれている場合、CANalyzer のリアルタイム ブランチ (図 7を参照) に CAPL プログラムを配置しても、COM サーバーを使 用してこの CAPL 関数を呼び出すことはできません。CANalyzer の評価ブランチに CAPL プログラムを配置することでこの問 題は回避されそうですが、これでは問題は解決されません。 CANalyzer 評価ブランチに配置した CAPL プログラムで CAN メ ッセージを送信すると、CAN メッセージがトレース Window に表示されますが、実際には CAN バスに流れていません。これは、 CAN メッセージを送信するために使用する CAPL プログラムは、CANalyzer のリアルタイム ブランチに配置する必要があるこ とを意味します。COM サーバーで呼び出す CAPL 関数に関数 output() を含めることができない場合、CAPL プログラムの別 のポイントで呼び出す必要があります。COM サーバーで呼び出される CAPL 関数で、関数 output() を呼び出して送信するの ではなく、CAN メッセージの送信リクエストを設定します。また、CAPL プログラムに、このリクエストが設定されたかどうかを確 認するチェック ルーチンも含めます。リクエストが設定されると、いつでもこのルーチンが関数 output() を呼び出して、CAN メッ セージが実際に送信され、最後にリクエストがリセットされます。 Application Note AN-AND-1-117 13 CANoe/CANalyzer as a COM Server CANalyzer で COM サーバーを使用して CAN メッセージを送信する方法を前述しましたが、これは間接的な方法なので CAPL プログラムのオーバーヘッドがより多く含まれます。そのため、COM サーバーと CANalyzer を使用して CAN メッセージ を送信する方法を、例をあげて説明します。この例の目的は、Microsoft Visual Basic アプリケーションのボタンをクリックして、 CANalyzer で CAN メッセージを送信することができるようにすることです。これを実現するために、ボタンをクリックしたときに、 COM サーバーで CAPL 関数 SendMsg() を呼び出すようにします。この CAPL 関数が行うことは、TxTimer_1ms を 1 ミリ秒 のタイマーで起動することです。CAPL のタイマーのイベントによって、CAN メッセージの実際の送信が行われます。ここでの 例でのその他の特徴は、COM サーバーに呼び出される CAPL 関数に値が渡されることです。CAPL では、この値を読み取り、 タイマーのイベントで送信されるメッセージのシグナルに割り当てます (図 8を参照)。 図8 :CANalyzer を使用した CAN メッセージの送信 3 Microsoft Visual Basic の COM サーバーの例 3.1 ビジュアル インターフェイス 図 9 は、Microsoft Visual Basic で COM サーバーを使用するサンプル アプリケーションのスクリーンショットです。このアプリ ケーションでは、CANalyzer のインストール時に提供される、Motbus.cfg という CANalyzer のデモ コンフィギュレーションを使 用しています。 Application Note AN-AND-1-117 14 CANoe/CANalyzer as a COM Server 図9 :サンプル アプリケーションのスクリーンショット Application Note AN-AND-1-117 15 CANoe/CANalyzer as a COM Server 3.2 ソース コード '******************************************************************** ' GLOBALS: '******************************************************************** 'objects: Dim WithEvents gCanApp As CANalyzer.Application Dim WithEvents gCanMeasurement As CANalyzer.Measurement 'signals: Dim gEngSpeedSignal As CANalyzer.Signal Dim gCarSpeedSignal As CANalyzer.Signal Dim gEngTempSignal As CANalyzer.Signal Dim gEngStatusSignal As CANalyzer.Signal 'CAPL functions Dim gSendGearFunction As CANalyzer.CAPLFunction 'CAN Channel 1 Dim gCANChannel1 As CANalyzer.CANController 'indicator flags Dim gConnected As Boolean Dim gMotBus As Boolean '******************************************************************** ' NAME: CanConnect ' DESCRIPTION: Initializes CANalyzer object variables and sets ' some indication flags used in the application '******************************************************************** Private Sub CanConnect() 'init new CANalyzer application Set gCanApp = New Application 'init measurement object Set gCanMeasurement = gCanApp.Measurement 'init CAN channel variable of bustype CAN (=1) and CAN channel 1 Set gCANChannel1 = gCanApp.configuration.GeneralSetup.ControllerSetup(1, 1) 'indicate that the connection has been made gConnected = True 'check if MotBus.cfg configuration is loaded If (gCanApp.configuration.Name = "motbus") Then gMotBus = True Else gMotBus = False End If End Sub '*** end of CanConnect *** '******************************************************************** ' NAME: UpdateMotBusSignals ' DESCRIPTION: Read the signals values from the CAN messages ' and displays these values on the form '******************************************************************** Private Sub UpdateMotBusSignals() If (gMotBus = True) Then prgEngineSpeed.Value = gEngSpeedSignal.Value lblEngineSpeedVal.Caption = gEngSpeedSignal.Value prgVehicleSpeed.Value = gCarSpeedSignal.Value lblVehicleSpeedVal.Caption = gCarSpeedSignal.Value lblEngineTemperatureVal.Caption = gEngTempSignal.Value If (gEngStatusSignal.Value) Then lblEngineStatusVal.Caption = "Idle" Else lblEngineStatusVal.Caption = "Running" End If End If Application Note AN-AND-1-117 16 CANoe/CANalyzer as a COM Server End Sub '*** end of UpdateMotBusSignals *** '******************************************************************** ' NAME: GetCANChannelParameters ' DESCRIPTION: Read the CAN channel parameters using the COM ' server and displays it using labels. '******************************************************************** Private Sub GetCANChannelParameters() lblBaudrateValue = gCANChannel1.Baudrate lblBtr0Value = gCANChannel1.BTR0 lblBtr1Value = gCANChannel1.BTR1 lblSamplesValue = gCANChannel1.Samples End Sub '*** end of GetCANChannelParameters *** '******************************************************************** ' NAME: ResetDisplayControls ' DESCRIPTION: Resets all the controls related to the MotBus ' signals '******************************************************************** Private Sub ResetDisplayControls() prgEngineSpeed.Value = 0 lblEngineSpeedVal.Caption = "" prgVehicleSpeed.Value = 0 lblVehicleSpeedVal.Caption = "" lblEngineTemperatureVal.Caption = "" lblEngineStatusVal.Caption = "" lblBaudrateValue = "" lblBtr0Value = "" lblBtr1Value = "" lblSamplesValue = "" End Sub '*** end of ResetDisplayControls *** '******************************************************************** ' NAME: btnDbDialog_Click ' DESCRIPTION: Opens CANalyzer database dialog '******************************************************************** Private Sub btnDbDialog_Click() gCanApp.UI.OpenDbDialog End Sub '*** end of btnDbDialog_Click *** '******************************************************************** ' NAME: btnOpenConfig_Click ' DESCRIPTION: Opens the configuration as specified in the ' textbox and compiles the CAPL code. It also ' stops all running measurements '******************************************************************** Private Sub btnOpenConfig_Click() If (gConnected = False) Then 'make the connection CanConnect End If If (gCanApp.Measurement.Running) Then 'stop the CANalyzer measurement gCanApp.Measurement.Stop End If 'load an existing CANalyzer configuration gCanApp.Open (txtConfigLocation.Text) Application Note AN-AND-1-117 17 CANoe/CANalyzer as a COM Server 'compile CAPL code of the CANalyzer configuration if any available gCanApp.CAPL.Compile 'check if MotBus.cfg configuration is loaded If (gCanApp.configuration.Name = "motbus") Then gMotBus = True Else gMotBus = False End If 'enable database dialog button btnDbDialog.Enabled = True End Sub '*** end of btnOpenConfig_Click *** '******************************************************************** ' NAME: btnStartMeasurement_Click ' DESCRIPTION: Start the measurement if no measurements are ' running, otherwise it stops the measurement '******************************************************************** Private Sub btnStartMeasurement_Click() If (btnStartMeasurement.Caption = "Start Measurement") Then If (gConnected = False) Then 'make the connection CanConnect End If 'start a CANalyzer measurement gCanApp.Measurement.Start Else 'stop a CANalyzer measurement gCanApp.Measurement.Stop End If End Sub '*** end of btnStartMeasurement_Click*** '******************************************************************** ' NAME: gCanMeasurement_OnStart (event handler) ' DESCRIPTION: Disables the open configuration button and ' changes the caption of the measurement button '******************************************************************** Private Sub gCanMeasurement_OnStart() 'disable open configuration functionality btnOpenConfig.Enabled = False 'change the caption of the button btnStartMeasurement.Caption = "Stop Measurement" 'display CAN channel parameters GetCANChannelParameters 'enable the timer tmrSignals.Enabled = True End Sub '*** end of gCanMeasurement_OnStart *** '******************************************************************** ' NAME: gCanMeasurement_OnStop (event handler) ' DESCRIPTION: Enables the open configuration button and ' changes the caption of the measurement button '******************************************************************** Private Sub gCanMeasurement_OnStop() 'disable the timer tmrSignals.Enabled = False 'enable open configuration functionality btnOpenConfig.Enabled = True 'change the caption of the button btnStartMeasurement.Caption = "Start Measurement" 'update controls on form ResetDisplayControls Application Note AN-AND-1-117 18 CANoe/CANalyzer as a COM Server End Sub '*** end of gCanMeasurement_OnStop *** '******************************************************************** ' NAME: gCanApp_OnQuit (event handler) ' DESCRIPTION: Sets a flag to indicate that the connection ' with the COM server is no longer there '******************************************************************** Private Sub gCanApp_OnQuit() 'indicate that MotBus.cfg is not loaded gMotBus = False 'disnable the timer tmrSignals.Enabled = False 'indicate that the connection is no longer there gConnected = False 'reset signals Set gEngSpeedSignal = Nothing Set gCarSpeedSignal = Nothing Set gEngTempSignal = Nothing Set gEngStatusSignal = Nothing 'reset CANalyzer object globals Set gCanApp = Nothing Set gCanMeasurement = Nothing Set gCANChannel1 = Nothing End Sub '*** end of gCanApp_OnQuit *** '******************************************************************** ' NAME: gCanMeasurement_OnInit (event handler) ' DESCRIPTION: Initializes the measurement signals of the ' MotBus.cfg configuration if this one is loaded '******************************************************************** Private Sub gCanMeasurement_OnInit() If (gMotBus = True) Then 'assign signals Set gEngSpeedSignal = gCanApp.Bus.GetSignal(1, "EngineData", "EngSpeed") Set gCarSpeedSignal = gCanApp.Bus.GetSignal(1, "ABSdata", "CarSpeed") Set gEngTempSignal = gCanApp.Bus.GetSignal(1, "EngineData", "EngTemp") Set gEngStatusSignal = gCanApp.Bus.GetSignal(1, "EngineData", "IdleRunning") End If 'assign CAPL function Set gSendGearFunction = gCanApp.CAPL.GetFunction("sendGear") End Sub '*** end of gCanMeasurement_OnInit *** '******************************************************************** ' NAME: tmrSignals_Timer (event handler) ' DESCRIPTION: On timer event that occurs every 100ms if a ' measurement is running. If the MotBus.cfg con' figuration is active, the signals on the form ' are updated '******************************************************************** Private Sub tmrSignals_Timer() If (gMotBus = True) Then UpdateMotBusSignals End If End Sub '*** end of tmrSignals_Timer *** Application Note AN-AND-1-117 19 CANoe/CANalyzer as a COM Server 4 連絡先 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] Vector Japan Co. Ltd. Seafort Square Center Bld. 18F 2-3-12, Higashi-shinagawa, Shinagawa-ku Tokyo, 140-0002, Japan Tel:+81 03(5769)6970 Fax: +81 03(5769)6975 Email: [email protected] Application Note AN-AND-1-117 VecScan AB Lindholmspiren 5 SE-417 56 Göteborg Sweden Tel: +46 (0) 31 764 76 00 Fax: +46 (0) 31 764 76 19 Email: [email protected] 20