メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

カスタム CAN ブロックを作成する

現在 Vehicle Network Toolbox™ でサポートされていないハードウェアで使用するために、カスタム Receive および Transmit ブロックを作成できます。次のいずれかのワークフローを選択します。

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 メッセージ バスを使用します。

  1. CAN または CAN FD 用の MATLAB ワークスペースに Simulink メッセージ バスを作成します。

    canMessageBusType

    または

    canFDMessageBusType

    これらの各関数は、それぞれ CAN_MESSAGE_BUS または CAN_FD_MESSAGE_BUS という名前の変数をワークスペースに作成します。この変数は、後で S 関数を構築する際に使用します。

  2. Simulink で新しい空のモデルを開き、ブロック ライブラリから S-Function Builder (Simulink) ブロックをモデルに追加します。

  3. S-Function Builder ブロックをダブルクリックしてダイアログ ボックスを開きます。最初に構築する関数は送信用です。

  4. ダイアログ ボックスの設定で、関数名を定義し、Simulink バスの使用を指定します。

    • S関数名: CustomCANTransmit

    • データのプロパティ:入力ポート:バス: On、バス名: CAN_MESSAGE_BUS (次の図を参照)。

      Port and parameter properties in the S-function builder block

      CAN FD の場合、バス名を CAN_FD_MESSAGE_BUS に設定します。

    関数とブロックの構築では、ダイアログ ボックスの他のタブを使用して、デバイス ドライバーとの対話用のコードを定義し、不要なポートを削除します。

  5. Buildをクリックします。コード ファイルは、MATLAB の現在の作業フォルダーに配置されます。

  6. モデルに新しい S-Function Builder ブロックを配置し、手順を繰り返して CustomCANReceive という名前の S 関数を構築します。入力ポートと出力ポートを除いて、同じ設定を使用します。Receive ブロックの出力ポートは、送信関数の入力と同じバス名を使用します。

  7. 受信関数を構築し、モデルから両方の S-Function Builder ブロックを削除します。この時点で、S-Function Builder によって生成されたファイルをテンプレートのセットとして使用し、独自のツールを使用してさらに編集およびコンパイルすることができます。あるいは、S-Function (Simulink) ブロックを使用して関数を実行することもできます。

  8. モデルに 2 つの S-Function ブロックを追加します。各ブロックを開き、モデル パラメータの S 関数名フィールドを設定して、CustomCANTransmit と CustomCANReceive をそれぞれ 1 つずつ用意します。

    この時点で、各ブロックのマスクを作成して、ハードウェアのパラメータにアクセスできるようにすることができます。この例では、これらのブロックにマスクは必要ありません。

  9. 次のようなその他の必要なブロックをモデルに追加します。

  10. ブロックのパラメータと接続を設定します。

    典型的なモデルは次のようになります。ここで、Constant (Simulink) ブロックと Display (Simulink) ブロックにより、接続とモデルの動作を検証できます。

    Custom transmit and receive blocks in a model

CANメッセージデータタイプを使用するブロック

メモ

設計を容易にし、より多くの Simulink 機能を活用するために、可能な場合は CAN メッセージ データ タイプではなく Simulink バスを使用することをお勧めします。Simulinkバスを使用するブロックを参照してください。

他の Vehicle Network Toolbox ブロックで使用するための独自のブロックを作成するには、カスタム CAN データ タイプを使用できます。このカスタム CAN データ型を C++ S 関数に登録します。

メモ

CAN メッセージ データ型を使用するカスタム ブロックを作成するには、C++ ファイル タイプの S 関数 (.cpp) を使用する必要があります。C ファイル タイプの S 関数 (.c) を使用すると、リンカー エラーが発生する可能性があります。

カスタム CAN データ タイプを S 関数に登録して使用するには、次の手順を実行します。

  1. S 関数をコンパイルするときに必要なシンボルをインポートする IMPORT_SCANUTIL 識別子を定義します。

    #define IMPORT_SCANUTIL
  2. S 関数の先頭にある matlabroot\toolbox\vnt\vntblks\include\candatatype にある can_datatype.h ヘッダーを含めます。

    #include "can_datatype.h"

    メモ

    can_datatype.h に含まれるヘッダー can_message.hmatlabroot\toolbox\shared\can\src\scanutil\ にあります。CAN_MESSAGE および CAN_DATATYPE 構造の詳細については、can_message.h ファイルを参照してください。

  3. ビルド中に S 関数を matlabroot\toolbox\vnt\vntblks\lib\ARCH フォルダーにある scanutil.lib にリンクします。共有ライブラリscanutil.dllmatlabroot\bin\ARCHにあります

  4. カスタム CAN データ型を初期化するには、mdlInitializeSizes (Simulink) でこの関数を呼び出します。

    mdlInitialize_CAN_datatype(S);
  5. ssGetDataTypeId (Simulink) を使用してカスタム データ型 ID を取得します。

    dataTypeID = ssGetDataTypeId(S,SL_CAN_MESSAGE_DTYPE_NAME);
  6. 次のいずれかを行います。

    • Receive ブロックを作成するには、出力ポートのデータ型を CAN_MESSAGE に設定します。

      ssSetOutputPortDataType(S,portID,dataTypeID);
    • Transmit ブロックを作成するには、入力ポート タイプを CAN_MESSAGE に設定します。

      ssSetInputPortDataType(S,portID,dataTypeID);

参考

関数

トピック