メインコンテンツ

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

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