このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
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]);