4. チュートリアル
4.1. 動作説明
4.1.14. プロファイルの適用方法
動作説明 あらかじめ作成しておいたプロファイル情報を用い、受信したCANメッ セージを 物理量へ変換します。
動作図 ファイルに保存されたプロファイル情報をプログラムに読み込み、
受信CANメッセージにプロファイルを適用することで、物理量へと変換し ます。
CANメッセージ
プロファイル
物理量 物理量 物理量
アプリケーション例
『ユーティリティを用いた登録方法』で登録し、保存しておいた以下の条件のプロファイルを 用い、受信したCANメッセージを変換し、内部に含まれるデータを抽出します。
27h 34h
ID
データ1 1234h
12h 78h 56h データ2
5678h 4バイトのデータフィールド
・16ビット整数のデータを2個含む
・メモリ配置は Intel方式(リトルエンディアン)
プログラムでの制御手順
『受信メッセージ取り出し』を参考にしていただき、CANバス から受信したメッセージをプログラムで取り込みます。
メッセージは CAN_MESSAGE 構造体に入れたままにしておき ます。(以降の処理はCAN_MESSAGE構造体を使用するため)
まずプログラム内にプロファイル情報を取り込みます。
先ほど、「MyProfile」という名前で保存した定義ファイルを使用 します。
変数名 設定値・内容 SzFileName “MyProfile”
取得したプロファイル情報の中に、今回受信したメッセージに 該当するプロファイルが存在するかどうかを確認します。
変数名 設定値・内容
pCanMessage 上で取得したCANメッセージ
nNumber プロファイル番号格納用変数へのポインタ
CanQueryProfile関数の戻り値が、IFCAN_ERROR_SUCCESS以 外だった場合は、該当するプロファイルが登録されていないこ とになります。新たにプロファイルを登録(『APIを用いた登録 方法』参照)するなどしてください。
戻り値がIFCAN_ERROR_SUCCESSだった場合にはプロファイ
ルが登録されており、その番号がnNumber変数に返されます。
取得されたプロファイルには、どういった情報が含まれている か を 確 認 し ま す 。CanGetProfile 関 数 を 実 行 す る こ と で 、
CAN_PROFILE_DATA 構造体にプロファイルの情報が返されま
す。ここでは既にわかっていますので、変換に必要な構造体(16 ビット整数 × 2個)を用意しておきます。(次で使用します)
プロファイル情報検索 CanQueryProfile 受信データの準備
プロファイル情報取得 CanLoadProfile
物理量格納用 構造体の準備
70
受信したCANメッセージにプロファイルを適用し、 物理量に 変換します。
ここでは、使用する言語により 方法が変わってきます。まずは Visual C++での使用方法を説明いたします。
変換にはCanApplyProfile関数を用います。
変数名 設定値・内容
pCanMessage 変換の元になるCANメッセージ構造体
pDestination 変換後の物理量を格納する構造体
nMaximumleng
th 32
pnLength 実際に変換されたサイズ
pCanMessageには、変換元となるCANメッセージの構造体を指
定し、pDestinationには変換後の物理量を格納する構造体をして いします。
nMaximumlengtにはpDestinationに指定した構造体のサイズをバ イト単位で指定します。ここで指定されたサイズ以上に変換が 行われることを防止します。
関数実行後、pnLength に実際に変換が行われたサイズがバイト 単位で返されます。
先ほどは、Visual C++での使用方法でした。次にVisual Basicで の使用方法を説明いたします。なお、以下の使用方法は Visual C++でも同様にご利用いただけます。
CanApplyProfile関数では、CANメッセージに含まれる複数のデ ータを一括で変換することができましたが、Visual Basic では、
この方法が使用できません。そのため、データ一つ一つに対し てプロファイルの適用を行う必要があります。
それを行うのが以下の3つの関数です。
関数名 内容
CanApplyProfileInteger 32ビット整数値へ変換 CanApplyProfileFloat 32ビット実数値へ変換 CanApplyProfileDouble 64ビット実数値へ変換
今回受信したCANメッセージには16ビット整数値が二つ含ま れるため、CanApplyProfileInteger関数を使用します。
変数名 設定値・内容
pCanMessage 変換の元になるCANメッセージ構造体
pnDestination 変換後の物理量を格納する変数(整数型)
nIndex データ1の変換時 : 1
データ2の変換時 : 2
nIndexには、変換を行う対象となるデータの番号を指定します。
1から始まりますのでご注意ください。
サンプルプログラム
プログラム名 プログラム格納先フォルダ
4851_PROFILE_APPLY <インストール先>¥言語¥can¥4851_PROFILE_APPLY
プロファイルの適用 CanApplyProfile
プロファイルの適用 CanApplyProfileInteger