В этом примере показано, как использовать 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 каналы, по которым можно отправлять и получать информацию.
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);
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.
stop(rxCh); stop(txCh);