Vehicle Network Toolbox

XCP Direct Data Acquisition

This example shows how to use XCP connections to directly acquire measurement values from a slave. It uses a freely available XCP slave simulator from Vector and Vector Virtual CAN channels. It is also recommended to run Vehicle CAN Bus Monitor in conjunction with this example.

Run a Slave Simulator

This example requires installing a free, third-party XCP implementation from Vector. The package includes an XCP slave simulator and A2L file. To install this driver, please follow these instructions:

  1. Go to www.vector.com and navigate to the "DOWNLOADS" page.

  2. Search for "Demos" under "Categories" and "XCP" under "Standards".

  3. Download and install the available version of "XCP Sample Implementation".

  4. In MATLAB, navigate to where you installed the sample package, and then go to .\Samples\XCPSim\CANape.

  5. The MATLAB XCP examples will use the XCPSIM.a2l file and the XCPsim.exe slave simulator. Run XCPsim.exe.

Open the A2L File

Establishing a connction to an XCP slave requires using the A2L file that describes the slave module.

a2lObj = xcpA2L('XCPSIM.a2l')
a2lObj = 

  A2L with properties:

                 FileName: 'XCPSim.a2l'
                 FilePath: [1x65 char]
                SlaveName: 'CPP'
        ProtocolLayerInfo: [1x1 struct]
                  DAQInfo: [1x1 struct]
    TransportLayerCANInfo: [1x1 struct]
                   Events: {1x6 cell}
             Measurements: {1x38 cell}

Create an XCP Channel

Create an XCP channel in order to prepare a connection to the slave.

xcpCh = xcpChannel(a2lObj, 'CAN', 'Vector', 'Virtual 1', 1)
xcpCh = 

  Channel with properties:

               SlaveName: 'CPP'
             A2LFileName: 'XCPSim.a2l'
          TransportLayer: 'CAN'
    TransportLayerDevice: [1x1 struct]
              SeedKeyDLL: []

Connect to the Slave

To make communication with the slave active, connect to it.

connect(xcpCh)

Directly Acquire Measurement Samples

Acquire some samples of a measurement from the slave.

readSingleValue(xcpCh, 'channel3')
readSingleValue(xcpCh, 'channel3')
readSingleValue(xcpCh, 'channel3')
ans =

   -2.7057


ans =

   -4.0092


ans =

   -4.7747

Directly Acquire a Series of Measurement Samples

Using a loop, acquire and plot many measurement samples from the slave.

allSamples = [];
for ii = 1:50
    newSample = readSingleValue(xcpCh, 'channel3');
    allSamples = [allSamples newSample];
end
plot(allSamples)

Disconnect from the Slave

To make communication with the slave inactive, disconnect from it.

disconnect(xcpCh)