メインコンテンツ

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

MATLAB の J1939 通信入門

この例では、J1939 チャネルを作成して使用し、J1939 ネットワーク上でパラメータ グループを送受信する方法を示します。この例では、データベース ファイル J1939.dbc と、ループバック構成で接続された MathWorks ® 仮想 CAN チャネルを使用します。

DBCファイルを開く

定義にアクセスするには、canDatabase を使用して DBC ファイルを開きます。

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

             Name: 'J1939'
             Path: 'C:\Users\michellw\OneDrive - MathWorks\Documents\MATLAB\Examples\vnt-ex33605241\J1939.dbc'
            Nodes: {2×1 cell}
         NodeInfo: [2×1 struct]
         Messages: {2×1 cell}
      MessageInfo: [2×1 struct]
       Attributes: {3×1 cell}
    AttributeInfo: [3×1 struct]
         UserData: []

J1939チャネルを作成する

関数 j1939Channel を使用して、情報を送受信できる J1939 チャネルを作成します。

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

   Device Information:
   -------------------
                  DeviceVendor: 'MathWorks'
                        Device: 'Virtual 1'
            DeviceChannelIndex: 1
            DeviceSerialNumber: 0

   Data Details:
   -------------
      ParameterGroupsAvailable: 0
       ParameterGroupsReceived: 0
    ParameterGroupsTransmitted: 0
                FilterPassList: []
               FilterBlockList: []

   Channel Information:
   --------------------
                       Running: 0
                     BusStatus: 'N/A'
          InitializationAccess: 1
              InitialTimestamp: [0×0 datetime]
                    SilentMode: 0
               TransceiverName: 'N/A'
              TransceiverState: 'N/A'
                      BusSpeed: 500000
                           SJW: []
                         TSEG1: []
                         TSEG2: []
                  NumOfSamples: []

   Other Information:
   ------------------
                      UserData: []

rxCh = j1939Channel(db, "MathWorks", "Virtual 1", 2)
rxCh = 
  Channel with properties:

   Device Information:
   -------------------
                  DeviceVendor: 'MathWorks'
                        Device: 'Virtual 1'
            DeviceChannelIndex: 2
            DeviceSerialNumber: 0

   Data Details:
   -------------
      ParameterGroupsAvailable: 0
       ParameterGroupsReceived: 0
    ParameterGroupsTransmitted: 0
                FilterPassList: []
               FilterBlockList: []

   Channel Information:
   --------------------
                       Running: 0
                     BusStatus: 'N/A'
          InitializationAccess: 1
              InitialTimestamp: [0×0 datetime]
                    SilentMode: 0
               TransceiverName: 'N/A'
              TransceiverState: 'N/A'
                      BusSpeed: 500000
                           SJW: []
                         TSEG1: []
                         TSEG2: []
                  NumOfSamples: []

   Other Information:
   ------------------
                      UserData: []

J1939パラメータグループを作成する

関数 j1939ParameterGroup を使用して、ネットワークに送信する単一フレーム パラメータ グループを作成します。

pgSingleFrame = j1939ParameterGroup(db, "VehicleDataSingle")
pgSingleFrame = 
  ParameterGroup with properties:

   Protocol Data Unit Details:
   ---------------------------
                  Name: 'VehicleDataSingle'
                   PGN: 40192
              Priority: 6
         PDUFormatType: 'Peer-to-Peer (Type 1)'
         SourceAddress: 254
    DestinationAddress: 254

   Data Details:
   -------------
             Timestamp: 0
                  Data: [255 255 255 255 255 255 255 255]
               Signals: [1×1 struct]

   Other Information:
   ------------------
              UserData: []

送信の詳細と信号データを設定します。

pgSingleFrame.SourceAddress = 30;
pgSingleFrame.DestinationAddress = 50;
pgSingleFrame.Signals.VehicleSignal1 = 25;
pgSingleFrame.Signals.VehicleSignal2 = 1000;
pgSingleFrame.Signals
ans = struct with fields:
    VehicleSignal4: -1
    VehicleSignal3: -1
    VehicleSignal2: 1000
    VehicleSignal1: 25

同じアプローチを使用して、マルチフレーム パラメータ グループを作成し、送信の詳細と信号データを設定します。

pgMultiFrame = j1939ParameterGroup(db, "VehicleDataMulti")
pgMultiFrame = 
  ParameterGroup with properties:

   Protocol Data Unit Details:
   ---------------------------
                  Name: 'VehicleDataMulti'
                   PGN: 51200
              Priority: 6
         PDUFormatType: 'Peer-to-Peer (Type 1)'
         SourceAddress: 254
    DestinationAddress: 254

   Data Details:
   -------------
             Timestamp: 0
                  Data: [255 255 255 255 255 255 255 255 255 255 255 255]
               Signals: [1×1 struct]

   Other Information:
   ------------------
              UserData: []

pgMultiFrame.SourceAddress = 30;
pgMultiFrame.DestinationAddress = 255;
pgMultiFrame.Signals.VehicleSignal1 = 5;
pgMultiFrame.Signals.VehicleSignal2 = 650;
pgMultiFrame.Signals.VehicleSignal3 = 5000;
pgMultiFrame.Signals
ans = struct with fields:
    VehicleSignal6: -1
    VehicleSignal5: -1
    VehicleSignal4: -1
    VehicleSignal3: 5000
    VehicleSignal2: 650
    VehicleSignal1: 5

J1939チャネルを開始する

関数 start を使用して、送信および受信操作用の J1939 チャネルを開始します。

start(rxCh);
start(txCh);

J1939パラメータグループを送信する

transmit 関数は、パラメータ グループをネットワークに送信します。J1939 チャネルは、トランスポート プロトコルを介して、マルチフレーム メッセージングを必要とするパラメータ グループを自動的に送信します。

transmit(txCh, pgSingleFrame)
transmit(txCh, pgSingleFrame)
transmit(txCh, pgMultiFrame)
transmit(txCh, pgSingleFrame)
transmit(txCh, pgSingleFrame)
pause(2);

パラメータグループを受け取る

receive 関数は、ネットワーク上で発生したメッセージングを表す情報をチャネルから取得します。

pgRx = receive(rxCh, Inf)
pgRx=5×8 timetable
       Time              Name            PGN     Priority        PDUFormatType        SourceAddress    DestinationAddress                        Data                          Signals   
    ___________    _________________    _____    ________    _____________________    _____________    __________________    ____________________________________________    ____________

    0.13955 sec    VehicleDataSingle    40192       6        Peer-to-Peer (Type 1)         30                  50            {[              25 0 232 3 255 255 255 255]}    {1×1 struct}
    0.14347 sec    VehicleDataSingle    40192       6        Peer-to-Peer (Type 1)         30                  50            {[              25 0 232 3 255 255 255 255]}    {1×1 struct}
    0.59386 sec    VehicleDataMulti     51200       6        Peer-to-Peer (Type 1)         30                 255            {[5 0 138 2 136 19 255 255 255 255 255 255]}    {1×1 struct}
    0.76564 sec    VehicleDataSingle    40192       6        Peer-to-Peer (Type 1)         30                  50            {[              25 0 232 3 255 255 255 255]}    {1×1 struct}
    0.7702 sec     VehicleDataSingle    40192       6        Peer-to-Peer (Type 1)         30                  50            {[              25 0 232 3 255 255 255 255]}    {1×1 struct}

受信したパラメータグループ信号の検査

単一フレームおよびマルチフレーム パラメータ グループのインスタンスの受信信号の詳細を表示します。

pgRx.Signals{1}
ans = struct with fields:
    VehicleSignal4: -1
    VehicleSignal3: -1
    VehicleSignal2: 1000
    VehicleSignal1: 25

pgRx.Signals{3}
ans = struct with fields:
    VehicleSignal6: -1
    VehicleSignal5: -1
    VehicleSignal4: -1
    VehicleSignal3: 5000
    VehicleSignal2: 650
    VehicleSignal1: 5

アクセス信号値

j1939SignalTimetable 関数を使用すると、パラメータ グループの timetable から信号データを簡単に抽出して変換できます。

sigTT = j1939SignalTimetable(pgRx)
sigTT = struct with fields:
     VehicleDataMulti: [1×6 timetable]
    VehicleDataSingle: [4×4 timetable]

sigTT.VehicleDataSingle
ans=4×4 timetable
       Time        VehicleSignal4    VehicleSignal3    VehicleSignal2    VehicleSignal1
    ___________    ______________    ______________    ______________    ______________

    0.13955 sec          -1                -1               1000               25      
    0.14347 sec          -1                -1               1000               25      
    0.76564 sec          -1                -1               1000               25      
    0.7702 sec           -1                -1               1000               25      

sigTT.VehicleDataMulti
ans=1×6 timetable
       Time        VehicleSignal6    VehicleSignal5    VehicleSignal4    VehicleSignal3    VehicleSignal2    VehicleSignal1
    ___________    ______________    ______________    ______________    ______________    ______________    ______________

    0.59386 sec          -1                -1                -1               5000              650                5       

J1939チャネルを停止する

ネットワークからのデータの受信を停止するには、stop 関数を使用して J1939 チャネルを停止します。

stop(rxCh);
stop(txCh);