このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
MATLAB におけるイベントベースの CAN 通信
この例では、イベント時にメッセージを送信するための CAN チャネルとメッセージを構成する方法を示します。ループバック構成で接続されている MathWorks® バーチャル CAN チャネルを使用します。
この例は仮想ネットワーク上での CAN メッセージの送受信に基づいているため、CAN エクスプローラーを併せて実行すると、コードが何を実行しているかをより完全に理解できるようになります。CAN エクスプローラーを実行するには、それを開いて、例の受信チャネルと同じインターフェイスを使用するように設定します。発生したすべてのメッセージを確認するには、例の実行を開始する前に必ず CAN エクスプローラーを起動してください。
この例では、CAN ネットワークのワークフローについて説明していますが、ここで説明する概念は CAN FD ネットワークにも適用されます。
CANチャネルを作成する
メッセージの送受信用の CAN チャネルを作成します。
txCh = canChannel("MathWorks", "Virtual 1", 1); rxCh = canChannel("MathWorks", "Virtual 1", 2);
メッセージと信号の定義を含む DBC ファイルを開き、両方の CAN チャネルに添付します。
db = canDatabase("CANDatabaseEvent.dbc");
txCh.Database = db;
rxCh.Database = db;CANメッセージを作成する
データベース情報を使用して CAN メッセージ EngineMsg を作成します。
msgEngineMsg = canMessage(db, "EngineMsg")msgEngineMsg =
Message with properties:
Message Identification
ProtocolMode: 'CAN'
ID: 100
Extended: 0
Name: 'EngineMsg'
Data Details
Timestamp: 0
Data: [0 0 0 0 0 0 0 0]
Signals: [1×1 struct]
Length: 8
Protocol Flags
Error: 0
Remote: 0
Other Information
Database: [1×1 can.Database]
UserData: []
イベントベースの送信用にメッセージを構成する
イベントベースのメッセージ送信を有効にするには、送信チャネル、チャネルに登録するメッセージ、および状態値を指定して transmitEvent コマンドを使用します。
transmitEvent(txCh, msgEngineMsg, "On");イベントベースの送信を開始する
受信チャネルと送信チャネルを開始します。
start(rxCh); start(txCh);
Data プロパティに新しい値を書き込み、VehicleSpeed 信号に直接書き込み、CAN バスへのメッセージの自動イベントベースの送信をトリガーします。
msgEngineMsg.Data = [250 100 0 0 20 0 0 0]; pause(1); msgEngineMsg.Signals.VehicleSpeed = 60; pause(1);
送信チャネルと受信チャネルを停止します。
stop(txCh); stop(rxCh);
イベントベースの感染行動を解析する
受信チャネルでは現在、2 回の送信をもたらした 2 つの更新に対応する 2 つのメッセージが利用可能になっています。
rxCh.MessagesAvailable
ans = 2
利用可能なメッセージを受信します。メッセージを調べて、それぞれに Data プロパティに以前に設定されたデータ値があることを確認します。
msgRx = receive(rxCh, Inf, "OutputFormat", "timetable")
msgRx=2×8 timetable
Time ID Extended Name Data Length Signals Error Remote
____________ ___ ________ _____________ ________________________ ______ ____________ _____ ______
0.045004 sec 100 false {'EngineMsg'} {[250 100 0 0 20 0 0 0]} 8 {1×1 struct} false false
1.0556 sec 100 false {'EngineMsg'} {[250 100 0 0 60 0 0 0]} 8 {1×1 struct} false false
信号を調べて、VehicleSpeed の 2 番目のインスタンスに、VehicleSpeed 信号に以前に設定されたデータ値があることを確認します。
signals = canSignalTimetable(msgRx)
signals=2×2 timetable
Time VehicleSpeed EngineRPM
____________ ____________ _________
0.045004 sec 20 2835
1.0556 sec 60 2835
イベントベースの送信用に構成されたメッセージを表示する
送信チャネルで自動送信用に設定されたメッセージを表示するには、transmitConfiguration コマンドを使用します。
transmitConfiguration(txCh)
Periodic Messages None Event Messages ID Extended Name Data --- -------- --------- --------------------- 100 false EngineMsg 250 100 0 0 60 0 0 0
チャネルとDBCファイルを閉じる
ワークスペースから変数をクリアして、チャネルと DBC ファイルへのアクセスを閉じます。
clear rxCh txCh clear db