このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
カスタム CAN ブロックを作成する
現在 Vehicle Network Toolbox™ でサポートされていないハードウェアで使用するために、カスタム Receive および Transmit ブロックを作成できます。次のいずれかのワークフローを選択します。
Simulinkバスを使用するブロック (推奨) — ブロックを接続するには Simulink® バス信号を使用します。S-Function Builder と S-Function ブロックを使用して関数とブロックを作成します。
CANメッセージデータタイプを使用するブロック — CAN メッセージ データ型を使用して情報を共有します。独自の C++ コードと MATLAB® コードを記述してコンパイルし、関数を定義して、ブロックを作成します。
Simulinkバスを使用するブロック
Simulink CAN バスを使用する Vehicle Network Toolbox のカスタム ブロックを作成するには、S 関数ビルダーを使用できます。この方法で S 関数とブロックを構築する詳細な手順については、Use a Bus with S-Function Builder to Create an S-Function (Simulink) を参照してください。次の例では、そのトピックで概説されている手順を使用します。
この例では、CAN メッセージを送受信するための 2 つのカスタム ブロックを構築する方法を示します。これらのブロックは、CAN Pack ブロックおよび CAN Unpack ブロックと対話するために Simulink メッセージ バスを使用します。
CAN または CAN FD 用の MATLAB ワークスペースに Simulink メッセージ バスを作成します。
canMessageBusType
または
canFDMessageBusType
これらの各関数は、それぞれ
CAN_MESSAGE_BUSまたはCAN_FD_MESSAGE_BUSという名前の変数をワークスペースに作成します。この変数は、後で S 関数を構築する際に使用します。Simulink で新しい空のモデルを開き、ブロック ライブラリから S-Function Builder (Simulink) ブロックをモデルに追加します。
S-Function Builder ブロックをダブルクリックしてダイアログ ボックスを開きます。最初に構築する関数は送信用です。
ダイアログ ボックスの設定で、関数名を定義し、Simulink バスの使用を指定します。
S関数名:
CustomCANTransmitデータのプロパティ:入力ポート:バス:
On、バス名:CAN_MESSAGE_BUS(次の図を参照)。
CAN FD の場合、バス名を
CAN_FD_MESSAGE_BUSに設定します。
関数とブロックの構築では、ダイアログ ボックスの他のタブを使用して、デバイス ドライバーとの対話用のコードを定義し、不要なポートを削除します。
Buildをクリックします。コード ファイルは、MATLAB の現在の作業フォルダーに配置されます。
モデルに新しい S-Function Builder ブロックを配置し、手順を繰り返して CustomCANReceive という名前の S 関数を構築します。入力ポートと出力ポートを除いて、同じ設定を使用します。Receive ブロックの出力ポートは、送信関数の入力と同じバス名を使用します。
受信関数を構築し、モデルから両方の S-Function Builder ブロックを削除します。この時点で、S-Function Builder によって生成されたファイルをテンプレートのセットとして使用し、独自のツールを使用してさらに編集およびコンパイルすることができます。あるいは、S-Function (Simulink) ブロックを使用して関数を実行することもできます。
モデルに 2 つの S-Function ブロックを追加します。各ブロックを開き、モデル パラメータの S 関数名フィールドを設定して、CustomCANTransmit と CustomCANReceive をそれぞれ 1 つずつ用意します。
この時点で、各ブロックのマスクを作成して、ハードウェアのパラメータにアクセスできるようにすることができます。この例では、これらのブロックにマスクは必要ありません。
次のようなその他の必要なブロックをモデルに追加します。
ブロックのパラメータと接続を設定します。
典型的なモデルは次のようになります。ここで、Constant (Simulink) ブロックと Display (Simulink) ブロックにより、接続とモデルの動作を検証できます。

CANメッセージデータタイプを使用するブロック
メモ
設計を容易にし、より多くの Simulink 機能を活用するために、可能な場合は CAN メッセージ データ タイプではなく Simulink バスを使用することをお勧めします。Simulinkバスを使用するブロックを参照してください。
他の Vehicle Network Toolbox ブロックで使用するための独自のブロックを作成するには、カスタム CAN データ タイプを使用できます。このカスタム CAN データ型を C++ S 関数に登録します。
メモ
CAN メッセージ データ型を使用するカスタム ブロックを作成するには、C++ ファイル タイプの S 関数 (.cpp) を使用する必要があります。C ファイル タイプの S 関数 (.c) を使用すると、リンカー エラーが発生する可能性があります。
カスタム CAN データ タイプを S 関数に登録して使用するには、次の手順を実行します。
S 関数をコンパイルするときに必要なシンボルをインポートする
IMPORT_SCANUTIL識別子を定義します。#define IMPORT_SCANUTIL
S 関数の先頭にある
にあるmatlabroot\toolbox\vnt\vntblks\include\candatatypecan_datatype.hヘッダーを含めます。#include "can_datatype.h"
メモ
can_datatype.hに含まれるヘッダーcan_message.hはにあります。matlabroot\toolbox\shared\can\src\scanutil\CAN_MESSAGEおよびCAN_DATATYPE構造の詳細については、can_message.hファイルを参照してください。ビルド中に S 関数を
フォルダーにあるmatlabroot\toolbox\vnt\vntblks\lib\ARCHscanutil.libにリンクします。共有ライブラリscanutil.dllはにありますmatlabroot\bin\ARCHカスタム CAN データ型を初期化するには、
mdlInitializeSizes(Simulink) でこの関数を呼び出します。mdlInitialize_CAN_datatype(S);
ssGetDataTypeId(Simulink) を使用してカスタム データ型 ID を取得します。dataTypeID = ssGetDataTypeId(S,SL_CAN_MESSAGE_DTYPE_NAME);
次のいずれかを行います。
Receive ブロックを作成するには、出力ポートのデータ型を
CAN_MESSAGEに設定します。ssSetOutputPortDataType(S,portID,dataTypeID);
Transmit ブロックを作成するには、入力ポート タイプを
CAN_MESSAGEに設定します。ssSetInputPortDataType(S,portID,dataTypeID);
参考
関数
トピック
- C/C++ S-Function の基礎 (Simulink)
- Use a Bus with S-Function Builder to Create an S-Function (Simulink)