...

CANoe/CANalyzer as a COM Server

by user

on
Category: Documents
89

views

Report

Comments

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
Fly UP