This example shows you how to use Vehicle Network Toolbox™ with J1939 to create and use J1939 channels to transmit and receive parameter groups on a network. This example uses the CAN database file, J1939.dbc
. It also uses MathWorks Virtual CAN channels connected in a loopback configuration
Open the database file to access the definitions.
db = canDatabase('J1939.dbc');
Create J1939 channels on which you can send and receive information.
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: [0×0 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: [0×0 datetime] SilentMode: 0 TransceiverName: 'N/A' TransceiverState: 'N/A' BusSpeed: 500000 SJW: [] TSEG1: [] TSEG2: [] NumOfSamples: [] Other Information: ------------------ UserData: []
You can create J1939 parameter groups to send on the network.
pgSingleFrame = j1939ParameterGroup(db, 'VehicleDataSingle') pgSingleFrame.SourceAddress = 30; pgSingleFrame.DestinationAddress = 50; pgMultiFrame = j1939ParameterGroup(db, 'VehicleDataMulti') pgMultiFrame.SourceAddress = 30; pgMultiFrame.DestinationAddress = 255;
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: [] 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: []
To begin using channels for transmit and receive operations, place them online.
start(rxCh); start(txCh);
The transmit
function sends parameter groups onto the network. The J1939 channel automatically sends parameter groups requiring multiframe messaging via its transport protocol.
transmit(txCh, pgSingleFrame) transmit(txCh, pgSingleFrame) transmit(txCh, pgMultiFrame) transmit(txCh, pgSingleFrame) transmit(txCh, pgSingleFrame) pause(1);
The receive
function retrieves information from the channel which represents messaging that occurred on the network.
pgRx = receive(rxCh, Inf)
pgRx = 1×5 ParameterGroup array with properties: Protocol Data Unit Details: --------------------------- Name PGN Priority PDUFormatType SourceAddress DestinationAddress Data Details: ------------- Timestamp Data Signals Other Information: ------------------ UserData
View details of the received information.
pgRx(1)
ans = ParameterGroup with properties: Protocol Data Unit Details: --------------------------- Name: 'VehicleDataSingle' PGN: 40192 Priority: 6 PDUFormatType: 'Peer-to-Peer (Type 1)' SourceAddress: 30 DestinationAddress: 50 Data Details: ------------- Timestamp: 0.0262 Data: [255 255 255 255 255 255 255 255] Signals: [1×1 struct] Other Information: ------------------ UserData: []
Parameter groups sent using the transport protocol are reconstructed in full detail by the channel.
pgRx(3)
ans = ParameterGroup with properties: Protocol Data Unit Details: --------------------------- Name: 'VehicleDataMulti' PGN: 51200 Priority: 6 PDUFormatType: 'Peer-to-Peer (Type 1)' SourceAddress: 30 DestinationAddress: 255 Data Details: ------------- Timestamp: 1.9336 Data: [255 255 255 255 255 255 255 255 255 255 255 255] Signals: [1×1 struct] Other Information: ------------------ UserData: []
To stop receiving data from the network, stop the J1939 channels.
stop(rxCh); stop(txCh);