メインコンテンツ

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

CAN Pack ブロック入力ポートによる CAN ID の動的変更

この例では、入力ポートを介して CAN ID を指定することにより、CAN Pack ブロックに提供される CAN 識別子 (CAN ID) を動的に制御する方法を示します。

この方法を使用すると、メッセージはさまざまな CAN ID で動的にパックされます。

モデルの確認

model = 'demoDynamicCANID'; 
open_system(model);

このモデルは、仮想 CAN ネットワーク上での梱包から送信までのメッセージの流れを示すように構成されています。主なコンポーネントは次のとおりです。

  • CAN Pack ブロック:入力ポートを介して CAN ID を動的に受け入れるように構成されており、CAN メッセージの柔軟なパッケージ化を容易にします。

  • CAN Transmit ブロック:パックされたメッセージを仮想 CAN ネットワークに送信するためのゲートウェイとして機能します。

  • CAN Configuration ブロック:メッセージの送受信に使用できる CAN デバイスのパラメータを構成します。

  • Step ブロック:CAN Pack ブロックにさまざまな入力を提供します。

CAN Pack ブロックを調べる

CAN Pack ブロックをダブルクリックして、パラメータ ダイアログを開きます。オプションSpecify CAN identifier from input portを選択します。

このチェックボックスを有効にすると、新しい入力ポートが追加され、CAN ID を動的に変更できるようになります。

CAN Transmit ブロックの設定

メッセージはパックされ、MathWorks ® 仮想チャネル 1 に接続された CAN Transmit ブロックに送信されます。

MATLAB で CAN チャネルを作成する

これらのメッセージを受信して観察するには、MathWorks 仮想チャネル 2 を使用します。

rxCh = canChannel('MathWorks', 'Virtual 1', 2);

受信チャネルを開始します。

start(rxCh);

モデルのシミュレーションを実行します。

sim(model);

メッセージを timetable 形式で受信します。

rxMsg = receive(rxCh, Inf, "OutputFormat", "timetable")
rxMsg=11×8 timetable
       Time       ID    Extended       Name              Data            Length      Signals       Error    Remote
    __________    __    ________    __________    ___________________    ______    ____________    _____    ______

    1.8717 sec    1      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    2.8777 sec    1      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    3.8816 sec    1      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    4.8831 sec    1      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    5.8903 sec    1      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    6.8906 sec    5      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    7.8868 sec    5      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    8.8831 sec    5      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    9.8793 sec    5      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    10.876 sec    5      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 
    11.874 sec    5      false      {0×0 char}    {[8 0 0 0 0 0 0 0]}      8       {0×0 struct}    false    false 

受信したメッセージ内の CAN ID の変化を観察します。

stop(rxCh);

変化する CAN ID を可視化するには、受信した CAN ID をプロットします。

plot(rxMsg.Time, rxMsg.ID);
hold on
data = vertcat(rxMsg.Data{:});
plot(rxMsg.Time, data(:,1));
hold off
xlabel("TimeStamp");
ylabel("CAN ID Value");
legend("CAN ID","Data","Location","northeastoutside");
legend("boxoff");
yMax = max(rxMsg.ID)+5;
ylim([0 yMax]);