メインコンテンツ

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

MATLAB での CAN FD 通信入門

この例では、CAN FD チャネルを使用して CAN FD メッセージを送受信する方法を説明します。ループバック構成で接続されている MathWorks® バーチャル CAN FD チャネルを使用します。

利用可能なCAN FDチャネルを表示

CAN FD をサポートする利用可能なすべてのデバイス チャネルを表示するには、canFDChannelList を使用します。

canFDChannelList
ans=2×6 table
      Vendor         Device       Channel    DeviceModel    ProtocolMode     SerialNumber
    ___________    ___________    _______    ___________    _____________    ____________

    "MathWorks"    "Virtual 1"       1        "Virtual"     "CAN, CAN FD"        "0"     
    "MathWorks"    "Virtual 1"       2        "Virtual"     "CAN, CAN FD"        "0"     

送信チャネルと受信チャネルを作成する

デバイスの詳細を指定した canFDChannel を使用して、メッセージを送受信するための CAN FD チャネルを作成します。

txCh = canFDChannel("MathWorks","Virtual 1",1)
txCh = 
  Channel with properties:

   Device Information
            DeviceVendor: 'MathWorks'
                  Device: 'Virtual 1'
      DeviceChannelIndex: 1
      DeviceSerialNumber: 0
            ProtocolMode: 'CAN FD'

   Status Information
                 Running: 0
       MessagesAvailable: 0
        MessagesReceived: 0
     MessagesTransmitted: 0
    InitializationAccess: 1
        InitialTimestamp: [0×0 datetime]
           FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All'

   Bit Timing Information
               BusStatus: 'N/A'
              SilentMode: 0
         TransceiverName: 'N/A'
        TransceiverState: 'N/A'
       ReceiveErrorCount: 0
      TransmitErrorCount: 0
     ArbitrationBusSpeed: 500000
            DataBusSpeed: 2000000

   Other Information
                Database: []
                UserData: []

rxCh = canFDChannel("MathWorks","Virtual 1", 2);

バス速度の設定

CAN FD チャネルでは、オンラインになる前にバス速度を設定する必要があります。アービトレーション フェーズ速度とデータ フェーズ速度は両方とも configBusSpeed を使用して構成されます。

configBusSpeed(txCh, 500000, 1000000);
configBusSpeed(rxCh, 500000, 1000000);

DBCファイルを開く

canDatabase を使用して、CAN FD メッセージと信号の定義が含まれるデータベース ファイルを開きます。

db = canDatabase("CANFDExample.dbc")
db = 
  Database with properties:

             Name: 'CANFDExample'
             Path: '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex36915890/CANFDExample.dbc'
        UTF8_File: '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex36915890/CANFDExample.dbc'
            Nodes: {}
         NodeInfo: [0×0 struct]
         Messages: {'CANFDMessage'}
      MessageInfo: [1×1 struct]
       Attributes: {2×1 cell}
    AttributeInfo: [2×1 struct]
         UserData: []

データベースを受信チャネルに直接接続します。DBC ファイルの定義は、受信メッセージと信号の復号化に自動的に適用されます。

rxCh.Database = db;

チャネルを開始する

チャネルをオンラインに設定するには、start コマンドを使用します。

start(txCh);
start(rxCh);

CAN FDメッセージを作成する

canFDMessage 関数を使用して CAN FD メッセージを作成します。

msg1 = canFDMessage(500, false, 12)
msg1 = 
  Message with properties:

   Message Identification
    ProtocolMode: 'CAN FD'
              ID: 500
        Extended: 0
            Name: ''

   Data Details
       Timestamp: 0
            Data: [0 0 0 0 0 0 0 0 0 0 0 0]
         Signals: []
          Length: 12
             DLC: 9

   Protocol Flags
             BRS: 0
             ESI: 0
           Error: 0

   Other Information
        Database: []
        UserData: []

msg2 = canFDMessage(1000, false, 24);
msg3 = canFDMessage(1500, false, 64);

CAN FD のビット レート切り換え機能を有効にするには、メッセージの BRS プロパティを設定します。

msg1.BRS = true;
msg2.BRS = true;
msg3.BRS = true;

CAN FD メッセージは、データベースを使用して作成することもできます。データベースは、メッセージが CAN か CAN FD か、および BRS ステータスを定義します。

msg4 = canFDMessage(db,"CANFDMessage")
msg4 = 
  Message with properties:

   Message Identification
    ProtocolMode: 'CAN FD'
              ID: 1
        Extended: 0
            Name: 'CANFDMessage'

   Data Details
       Timestamp: 0
            Data: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
         Signals: []
          Length: 48
             DLC: 14

   Protocol Flags
             BRS: 1
             ESI: 0
           Error: 0

   Other Information
        Database: [1×1 can.Database]
        UserData: []

メッセージを送信する

作成したメッセージを送信チャネルから送信するには、transmit を使用します。

transmit(txCh, [msg1 msg2 msg3 msg4])

メッセージの受信

receive 関数を使用して受信チャネルからメッセージを受信します。CAN FD チャネルのデフォルトの戻りタイプは、受信した CAN FD メッセージに固有の情報を含む timetable です。

rxMsg = receive(rxCh, Inf)
rxMsg=4×12 timetable
        Time         ID     Extended          Name          ProtocolMode                                                                   Data                                                                    Length    DLC      Signals       Error    Remote     BRS      ESI 
    ____________    ____    ________    ________________    ____________    ___________________________________________________________________________________________________________________________________    ______    ___    ____________    _____    ______    _____    _____

    0.099466 sec     500     false      {0×0 char      }     {'CAN FD'}     {[                                                                                                        0 0 0 0 0 0 0 0 0 0 0 0]}      12       9     {0×0 struct}    false    false     true     false
    0.099467 sec    1000     false      {0×0 char      }     {'CAN FD'}     {[                                                                                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]}      24      12     {0×0 struct}    false    false     true     false
    0.099468 sec    1500     false      {0×0 char      }     {'CAN FD'}     {[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]}      64      15     {0×0 struct}    false    false     true     false
    0.099468 sec       1     false      {'CANFDMessage'}     {'CAN FD'}     {[                                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]}      48      14     {1×1 struct}    false    false     true     false

チャネルを停止する

チャネルをオフラインに設定するには、stop コマンドを使用します。

stop(txCh);
stop(rxCh);

DBCファイルを閉じる

ワークスペースから変数をクリアして、DBC ファイルへのアクセスを閉じます。

clear db