Этот пример показывает вам, как использовать 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);