Этот пример показывает вам, как создать и использовать каналы J1939, чтобы передать и принять группы параметра в сети J1939. Этот пример использует файл базы данных J1939.dbc
и MathWorks виртуальные каналы CAN, соединенные в петлевой настройке.
Откройте файл DBC с помощью canDatabase
получить доступ к определениям.
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: []
Используйте функциональный 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: []
Используйте функциональный 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
Используйте функциональный start
запустить J1939 образовывают канал для передачи и получить операции.
start(rxCh); start(txCh);
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
функция позволяет вам легко извлекать и преобразовывать данные сигнала из расписания групп параметра.
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
функция.
stop(rxCh); stop(txCh);