Создание и использование J1939 каналов

В этом примере показано, как использовать Vehicle Network Toolbox™ с J1939 для создания и использования J1939 каналов для передачи и приема групп параметров в сети. Этот пример использует файл базы данных CAN, J1939.dbc. Также используются каналы MathWorks Virtual CAN, подключенные в строении закольцовывания

Откройте файл базы данных

Откройте файл базы данных для доступа к определениям.

db = canDatabase('J1939.dbc')
db = 

  Database with properties:

             Name: 'J1939'
             Path: '/tmp/BR2021ad_1584584_202060/publish_examples1/tp7b109833/ex33605241/J1939.dbc'
            Nodes: {2x1 cell}
         NodeInfo: [2x1 struct]
         Messages: {2x1 cell}
      MessageInfo: [2x1 struct]
       Attributes: {3x1 cell}
    AttributeInfo: [3x1 struct]
         UserData: []

Создайте J1939 каналы

Создайте J1939 каналы, по которым можно отправлять и получать информацию.

txCh = j1939Channel(db, 'MathWorks', 'Virtual 1', 1)
rxCh = j1939Channel(db, 'MathWorks', 'Virtual 1', 2)
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: [0x0 datetime]
                    SilentMode: 0
               TransceiverName: 'N/A'
              TransceiverState: 'N/A'
                      BusSpeed: 500000
                           SJW: []
                         TSEG1: []
                         TSEG2: []
                  NumOfSamples: []

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


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: [0x0 datetime]
                    SilentMode: 0
               TransceiverName: 'N/A'
              TransceiverState: 'N/A'
                      BusSpeed: 500000
                           SJW: []
                         TSEG1: []
                         TSEG2: []
                  NumOfSamples: []

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

Создайте группы J1939 параметров

Можно создать J1939 группы параметров для отправки по сети, задав некоторые детали трансмиссии и сигнальные данные в каждой.

pgSingleFrame = j1939ParameterGroup(db, 'VehicleDataSingle')
pgSingleFrame.SourceAddress = 30;
pgSingleFrame.DestinationAddress = 50;
pgSingleFrame.Signals.VehicleSignal1 = 25;
pgSingleFrame.Signals.VehicleSignal2 = 1000;
pgSingleFrame.Signals

pgMultiFrame = j1939ParameterGroup(db, 'VehicleDataMulti')
pgMultiFrame.SourceAddress = 30;
pgMultiFrame.DestinationAddress = 255;
pgMultiFrame.Signals.VehicleSignal1 = 5;
pgMultiFrame.Signals.VehicleSignal2 = 650;
pgMultiFrame.Signals.VehicleSignal3 = 5000;
pgMultiFrame.Signals
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: [1x1 struct]

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


ans = 

  struct with fields:

    VehicleSignal4: -1
    VehicleSignal3: -1
    VehicleSignal2: 1000
    VehicleSignal1: 25


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: [1x1 struct]

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


ans = 

  struct with fields:

    VehicleSignal6: -1
    VehicleSignal5: -1
    VehicleSignal4: -1
    VehicleSignal3: 5000
    VehicleSignal2: 650
    VehicleSignal1: 5

Запуск J1939 каналов

Чтобы начать использовать каналы для операций передачи и приема, поместите их в оперативный режим.

start(rxCh);
start(txCh);

Отправка J1939 групп параметров

The transmit функция отправляет группы параметров в сеть. Канал J1939 автоматически отправляет группы параметров, требующие многоадресного обмена сообщениями через свой транспортный протокол.

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

Прием групп параметров

The receive функция извлекает информацию из канала, который представляет сообщения, возникшие в сети.

pgRx = receive(rxCh, Inf)
pgRx =

  5x8 timetable

        Time              Name            PGN     Priority        PDUFormatType        SourceAddress    DestinationAddress                        Data                          Signals   
    ____________    _________________    _____    ________    _____________________    _____________    __________________    ____________________________________________    ____________

    0.065888 sec    VehicleDataSingle    40192       6        Peer-to-Peer (Type 1)         30                  50            {[              25 0 232 3 255 255 255 255]}    {1x1 struct}
    0.068718 sec    VehicleDataSingle    40192       6        Peer-to-Peer (Type 1)         30                  50            {[              25 0 232 3 255 255 255 255]}    {1x1 struct}
    0.36748 sec     VehicleDataMulti     51200       6        Peer-to-Peer (Type 1)         30                 255            {[5 0 138 2 136 19 255 255 255 255 255 255]}    {1x1 struct}
    0.526 sec       VehicleDataSingle    40192       6        Peer-to-Peer (Type 1)         30                  50            {[              25 0 232 3 255 255 255 255]}    {1x1 struct}
    0.52994 sec     VehicleDataSingle    40192       6        Peer-to-Peer (Type 1)         30                  50            {[              25 0 232 3 255 255 255 255]}    {1x1 struct}

Смотрите сигналы принятых групп параметров

Просмотрите детали принятых сигналов для образца одинарной системы координат и группы параметров мультисистемы координат.

pgRx.Signals{1}
pgRx.Signals{3}
ans = 

  struct with fields:

    VehicleSignal4: -1
    VehicleSignal3: -1
    VehicleSignal2: 1000
    VehicleSignal1: 25


ans = 

  struct with fields:

    VehicleSignal6: -1
    VehicleSignal5: -1
    VehicleSignal4: -1
    VehicleSignal3: 5000
    VehicleSignal2: 650
    VehicleSignal1: 5

Быстрый доступ к значениям сигналов

The j1939SignalTimetable функция быстро извлекает и преобразует данные сигнала из расписания групп параметров.

sigTT = j1939SignalTimetable(pgRx)
sigTT.VehicleDataSingle
sigTT.VehicleDataMulti
sigTT = 

  struct with fields:

     VehicleDataMulti: [1x6 timetable]
    VehicleDataSingle: [4x4 timetable]


ans =

  4x4 timetable

        Time        VehicleSignal4    VehicleSignal3    VehicleSignal2    VehicleSignal1
    ____________    ______________    ______________    ______________    ______________

    0.065888 sec          -1                -1               1000               25      
    0.068718 sec          -1                -1               1000               25      
    0.526 sec             -1                -1               1000               25      
    0.52994 sec           -1                -1               1000               25      


ans =

  1x6 timetable

       Time        VehicleSignal6    VehicleSignal5    VehicleSignal4    VehicleSignal3    VehicleSignal2    VehicleSignal1
    ___________    ______________    ______________    ______________    ______________    ______________    ______________

    0.36748 sec          -1                -1                -1               5000              650                5       

Остановите каналы J1939

Чтобы остановить прием данных из сети, остановите каналы J1939.

stop(rxCh);
stop(txCh);