Этот пример показывает вам, как использовать Vehicle Network Toolbox™ с J1939, чтобы создать и использовать каналы J1939, чтобы передать и принять группы параметра в сети. Этот пример использует файл базы данных CAN, J1939.dbc. Это также использует MathWorks Virtual CAN channels, соединенный в петлевой настройке
Откройте файл базы данных, чтобы получить доступ к определениям.
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, на которых можно отправить и получить информацию.
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, чтобы отправить в сети, установив некоторые детали передачи и данные сигнала в каждого.
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
Чтобы начать использовать каналы для передачи и получать операции, разместите их онлайн.
start(rxCh); start(txCh);
transmit функция отправляет группы параметра на сеть. Канал J1939 автоматически отправляет группы параметра, требующие сверхкадра, обменивающегося сообщениями с помощью его транспортного протокола.
transmit(txCh, pgSingleFrame) transmit(txCh, pgSingleFrame) transmit(txCh, pgMultiFrame) transmit(txCh, pgSingleFrame) transmit(txCh, pgSingleFrame) pause(1);
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
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.
stop(rxCh); stop(txCh);