メインコンテンツ

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

CAN 通信Simulinkモデルの構築

モデルのメッセージ送信部分を構築する

このセクションでは、Vehicle Network Toolbox™ ブロックと Simulink® ライブラリ内の他のブロックを使用して、CAN メッセージを送信するモデルの部分を構築する方法を示します。

CAN メッセージを送信するモデルの構築は、次の手順で詳しく説明されます。

この例の部分では

  • MathWorks 仮想 CAN チャネルを使用してメッセージを送信します。

  • CAN チャネルを構成するには、CAN Configuration ブロックを使用します。

  • Constant (Simulink) ブロックを使用して、CAN Pack ブロックにデータを提供します。

  • CAN Transmit ブロックを使用して、データを仮想 CAN チャネルに送信します。

このセクションを モデルのメッセージ受信部分を構築する および モデルを保存して実行する と併用して、完全なモデルを構築し、シミュレーションを実行します。

手順 1: 新しいモデルを作成する

  1. Simulink を起動して新しいモデルを作成するには、MATLAB® コマンド プロンプトで次のように入力します。

    simulink

    Simulink スタート ページ ダイアログで、空のモデル をクリックしてから モデルを作成 をクリックします。空のエディター ウィンドウが開きます。

  2. エディター ツールストリップの シミュレーション タブで、保存名前を付けて保存 をクリックして新しいモデルに名前を割り当てます。

手順 2: ブロックライブラリを開く

  1. モデル エディターのツールストリップの シミュレーション タブで、ライブラリ ブラウザー をクリックします。

  2. Simulink ライブラリ ブラウザが開きます。左側のペインには、使用可能なブロック ライブラリのツリーがアルファベット順に表示されます。Vehicle Network Toolbox ノードを展開し、CAN Communication をクリックします。

手順 3: Vehicle Network Toolboxブロックをモデルにドラッグ

モデルにブロックを配置するには、ライブラリ内のブロックをクリックしてエディターにドラッグします。この例では、モデル内に次のブロックのインスタンスがそれぞれ 1 つずつ必要です。

  • CAN Configuration

  • CAN Pack

  • CAN Transmit

メモ

モデル内の各ブロックのデフォルト構成では、MathWorks Virtual 1 Channel 1 が使用されます。モデル内のブロックを構成して、他のベンダーの仮想チャネルまたはハードウェア デバイスを使用できます。

メモ

デフォルトでは、ブロック名はモデルに表示されません。モデル エディターで作業中にブロック名を表示するには、ツールストリップの Format タブで 自動 をクリックし、自動ブロック名の非表示 の選択を解除します。

手順 4: 他のブロックをドラッグしてモデルを完成させる

この例では、Constant (Simulink) ブロックをデータ ソースとして使用します。Simulink、よく使用されるブロック ライブラリから、Constant (Simulink) ブロックをモデルに追加します。

手順 5: ブロックを接続する

Constant ブロックと CAN Pack ブロック入力を接続します。ポインターを Constant ブロックの出力ポートの近くに移動すると、ポインターが十字形になります。Constant ブロックの出力ポートをクリックし、マウス ボタンを押したままポインターを CAN Pack ブロックの入力ポートまでドラッグします。次にボタンを放します。

同様に、CAN Pack ブロックの出力ポートと CAN Transmit ブロックの入力ポートを接続します。

CAN Configuration ブロックは他のブロックに接続されません。このブロックは、通信用に CAN チャネルを構成します。

手順 6: ブロックパラメータ値を指定する

モデル内の各ブロックのパラメータを設定するには、ブロックをダブルクリックします。

CAN Configuration ブロックを設定する.  CAN Configuration ブロックをダブルクリックして、パラメータ ダイアログ ボックスを開きます。次のパラメータを確認または設定します。

  • デバイス から MathWorks Virtual 1 (Channel 1) へ。

  • バス速度 から 500000 へ。

  • ACK モード から Normal へ。

  • [OK] をクリックします。

CAN Packブロックを設定する.  CAN Pack ブロックをダブルクリックして、パラメータ ダイアログ ボックスを開きます。次のパラメータを確認または設定します。

  • データの入力形式 から raw data へ。

  • Name をデフォルト値 CAN Msg に設定します。

  • 識別子タイプ をデフォルトの Standard (11-bit identifier) タイプに変更します。

  • 識別子 から 500 へ。

  • 長さ (バイト) をデフォルトの長さである 8 に設定します。

  • [OK] をクリックします。

CAN Transmit ブロックを設定する.  CAN Transmit ブロックをダブルクリックして、パラメータ ダイアログ ボックスを開きます。次のパラメータを確認または設定します。

  • デバイス から MathWorks Virtual 1 (Channel 1) へ。

    [OK] をクリックします。

Constant ブロックを設定する.  Constant ブロックをダブルクリックして、パラメータ ダイアログ ボックスを開きます。

メイン タブで、以下を設定します。

  • 定数値 から [1 2 3 4 5 6 7 8] へ。

  • サンプル時間 から 0.01 秒。

信号属性 タブで、以下を設定します。

  • 出力データ型 から uint8 へ。

    [OK] をクリックします。

あなたのモデルはこの図のようになります。

Model for basic CAN transmission

モデルのメッセージ受信部分を構築する

このセクションでは、Vehicle Network Toolbox ブロックと Simulink ライブラリ内の他のブロックを使用して、CAN メッセージを受信するモデルの部分を構築する方法を示します。この例では、次の手順で CAN ネットワーク経由でデータを受信する方法を示します。

この例の部分では

  • メッセージを受信するために、MathWorks 仮想 CAN チャネルを使用します。

  • CAN Configuration ブロックを使用して仮想 CAN チャネルを構成します。

  • メッセージを受信するには、CAN Receive ブロックを使用します。

  • CAN Unpack ブロックを含む Function-Call Subsystem (Simulink) ブロックを使用します。この関数は、CAN Receive ブロックからデータを取得し、CAN Unpack ブロックのパラメータを使用してメッセージ データをアンパックします。

  • 受信したデータを表示するには、Scope (Simulink) ブロックを使用します。

手順 7: Vehicle Network Toolboxブロックをモデルにドラッグ

例のこの部分では、Vehicle Network Toolbox CAN Communication ブロック ライブラリの次のブロックのインスタンスをそれぞれ 1 つずつ用意して開始します。

  • CAN Configuration

  • CAN Receive

ヒント

CAN Receive ブロックと CAN Transmit ブロックに個別の CAN チャネルを構成します。各チャネルには独自の CAN Configuration ブロックが必要です。

手順 8: 他のブロックをドラッグしてモデルを完成させる

Simulink Ports & Subsystems ブロック ライブラリの Function-Call Subsystem ブロックを使用して、CAN メッセージ パック サブシステムを構築します。

  1. Function-Call Subsystem ブロックをモデルにドラッグします。

  2. Function-Call Subsystem ブロックをダブルクリックしてサブシステム エディターを開きます。

  3. in1 ポート ラベルをダブルクリックして、名前を CAN Msg に変更します。

  4. Out1 ポート ラベルをダブルクリックして、名前を Data に変更します。

  5. Vehicle Network Toolbox ブロック ライブラリから CAN Unpack ブロックをこのサブシステムにドラッグ アンド ドロップします。入力ラインと出力ラインの間に配置すると、自動的に接続されます。

    Function-Call Subsystem ブロックの内部はこの図のようになるはずです。

    Function call subsystem to unpack a message

    CAN UnpackFunction-Call Subsystem 内に配置する理由は、すべての可能性のあるメッセージをキャプチャできるようにするためです。

  6. ツールストリップの戻る矢印をクリックして、モデル ビューに戻ります。

ステップ9:ブロックを接続する

  1. Function-Call Subsystem ブロックの名前を CAN Unpack Subsystem に変更します。

  2. CAN Receive ブロックの CAN Msg 出力ポートを CAN Unpack Subsystem ブロックの in1 入力ポートに接続します。

  3. CAN Receive ブロックの f() 出力ポートを CAN Unpack Subsystem ブロックの function() 入力ポートに接続します。

  4. シミュレーション結果を視覚的に表示するには、Simulink ブロック ライブラリから Scope (Simulink) ブロックをモデルにドラッグします。

  5. CAN Unpack Subsystem ブロックの CAN Msg 出力ポートを Scope ブロックの入力ポートに接続します。

    CAN Configuration ブロックは他のブロックに接続されません。このブロックは、CAN メッセージを受信するために CAN Receive ブロックで使用される CAN チャネルを構成します。

あなたのモデルはこの図のようになります。

Model to transmit and receive CAN messages

ステップ10:ブロックパラメータ値を指定する

ブロックをダブルクリックして、モデル内のブロックのパラメータを設定します。

CAN Configuration1 ブロックを構成する.  CAN Configuration ブロックをダブルクリックして、パラメータ ダイアログ ボックスを開きます。以下を設定します:

  • デバイス から MathWorks Virtual 1 (Channel 2) へ。

  • バス速度 から 500000 へ。

  • ACK モード から Normal へ。

    [OK] をクリックします。

CAN Receive ブロックを設定する.  CAN Receive ブロックをダブルクリックして、[パラメータ] ダイアログ ボックスを開きます。以下を設定します:

  • デバイス から MathWorks Virtual 1 (Channel 2) へ。

  • サンプル時間 から 0.01 へ。

  • 各タイムステップで受信したメッセージ数 から all へ。

    [OK] をクリックします。

CAN Unpack Subsystem を構成する.  CAN Unpack Subsystem をダブルクリックして、Function-Call Subsystem エディターを開きます。モデル内で、CAN Unpack ブロックをダブルクリックして、そのパラメータ ダイアログ ボックスを開きます。以下を設定します:

  • Data to be output as から raw data へ。

  • Name をデフォルト値 CAN Msg に設定します。

  • 識別子タイプ をデフォルトの Standard (11-bit identifier) に変更します。

  • 識別子 から 500 へ。

  • 長さ (バイト) をデフォルトの長さである 8 に設定します。

    [OK] をクリックします。

モデルを保存して実行する

このセクションでは、構築したモデル モデルのメッセージ送信部分を構築するモデルのメッセージ受信部分を構築する を保存する方法を説明します。

ステップ11:モデルの保存

シミュレーションを実行する前に、保存 アイコンをクリックするか、エディター ツールストリップの シミュレーション タブから 保存 を選択してモデルを保存します。

ステップ12:構成パラメータの変更

  1. モデル エディターのツールストリップの モデル化 タブで、モデル設定 をクリックします。[コンフィギュレーション パラメーター] ダイアログ ボックスが開きます。

  2. ソルバー オプション セクションで、次を選択します。

    • Type リストからの 固定ステップ

    • ソルバー リストからの 離散 (連続状態なし)

ステップ13:シミュレーションの実行

シミュレーションを実行するには、エディター ツールストリップの [シミュレーション] または [モデル化] タブにある [Run] ボタンをクリックします。

シミュレーションを実行すると、CAN Transmit ブロックは CAN Pack ブロックからメッセージを取得します。次に、仮想チャネル 1 を介して送信します。仮想チャネル 2 の CAN Receive ブロックはこのメッセージを受信し、メッセージをアンパックするために CAN Unpack Subsystem ブロックに渡します。

シミュレーションの実行中は、モデル ウィンドウの下部にあるステータス バーにシミュレーションの進行状況が更新されます。

ステップ14:結果を見る

Scope ブロックをダブルクリックすると、グラフ上でメッセージ転送が表示されます。グラフ上にすべてのデータが表示されない場合は、オートスケール ツールバー ボタンをクリックすると、軸が自動的に拡大縮小され、保存されているすべてのシミュレーション データが表示されます。

Scope block display of received CAN messages

グラフでは、横軸はシミュレーション時間(秒)を表し、縦軸は受信データ値を表します。シミュレーション時間の 0.01 秒ごとに定数値の配列 [1 2 3 4 5 6 7 8] をパックして送信するようにモデルを構成しました。これらの値は受信され、アンパックされます。Scope ウィンドウの出力は、受信したデータ値を表します。

参考

トピック