Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

直接采集读取 XCP 测量变量值

此示例说明如何使用 XCP 协议功能连接 XCP Sample 服务器并从中采集数据。XCP Sample 服务器是专门为 XCP 示例设计的。

Vehicle Network Toolbox™ 提供 MATLAB 函数,用于通过多个传输层与服务器对接,包括控制器局域网 (CAN)、控制器局域网灵活数据速率 (CAN FD)、传输控制协议 (TCP) 和用户数据报协议 (UDP)。此示例使用直接内存访问读取 Sample 服务器的测量变量参数。

XCP 是一种高级协议,用于访问和修改模型、算法或 ECU 的内部参数和变量。有关详细信息,请参阅 ASAM 标准

打开 A2L 文件

建立与 XCP 服务器的连接需要 A2L 文件。A2L 文件说明 XCP 服务器提供的所有功能,以及如何连接到该服务器的详细信息。使用 xcpA2L 函数打开说明服务器模型的 A2L 文件。

a2lInfo = xcpA2L("SampleECU.a2l")
a2lInfo = 
  A2L with properties:

   File Details
                 FileName: 'SampleECU.a2l'
                 FilePath: '/tmp/Bdoc23b_2369753_865998/tp0e15fc65/vnt-ex10406968/SampleECU.a2l'
               ServerName: 'SampleServer'
                 Warnings: [0x0 string]

   Parameter Details
                   Events: {'Event DAQ 100ms'}
                EventInfo: [1x1 xcp.a2l.Event]
             Measurements: {'Line'  'PWM'  'Sine'}
          MeasurementInfo: [3x1 containers.Map]
          Characteristics: {'Gain'  'yData'}
       CharacteristicInfo: [2x1 containers.Map]
                 AxisInfo: [1x1 containers.Map]
            RecordLayouts: [3x1 containers.Map]
             CompuMethods: [1x1 containers.Map]
                CompuTabs: [0x1 containers.Map]
               CompuVTabs: [0x1 containers.Map]

   XCP Protocol Details
        ProtocolLayerInfo: [1x1 xcp.a2l.ProtocolLayer]
                  DAQInfo: [1x1 xcp.a2l.DAQ]
    TransportLayerCANInfo: [1x1 xcp.a2l.XCPonCAN]
    TransportLayerUDPInfo: [0x0 xcp.a2l.XCPonIP]
    TransportLayerTCPInfo: [1x1 xcp.a2l.XCPonIP]

启动 XCP Sample 服务器

XCP Sample 服务器以可控方式模拟真实 XCP 服务器的行为。在这种情况下,它仅用于演示功能有限的示例。使用本地 SampleECU 类创建 Sample 服务器对象,Sample 服务器将在 MATLAB 工作区中创建。XCP Sample 服务器仅支持 CAN、CAN FD 和 TCP。此示例选择 TCP 协议进行演示。

sampleServer = SampleECU(a2lInfo,"TCP");

创建 XCP 通道

要创建到服务器的活动 XCP 连接,请使用 xcpChannel 函数。该函数需要引用服务器 A2L 文件以及用于与服务器进行报文传输的传输协议类型。XCP 通道必须使用与 Sample 服务器相同的设备和 a2l 文件,以确保它们可以相互建立连接。

xcpCh = xcpChannel(a2lInfo, "TCP")
xcpCh = 
  Channel with properties:

              ServerName: 'SampleServer'
             A2LFileName: 'SampleECU.a2l'
          TransportLayer: 'TCP'
    TransportLayerDevice: [1x1 struct]
              SeedKeyDLL: []

连接到服务器

要激活与服务器的通信,请使用 connect 函数。

connect(xcpCh);

直接采集测量数据

XCP 中的测量变量表示 Sample 服务器内存中的变量。服务器提供的测量变量在 A2L 文件中定义。读取测量数据的一种方法是使用直接内存访问。readMeasurement 函数从服务器采集给定测量变量的当前值。它是没有缓冲的单次读取。

SineData = readMeasurement(xcpCh, "Sine") 
SineData = 1
LineData = readMeasurement(xcpCh, "Line")
LineData = 0
PWMData = readMeasurement(xcpCh, "PWM")
PWMData = 2

连续采集测量数据

有时,需要以固定间隔连续读取一个测量变量以池化不同用途的数据,例如在自定义 UI 中可视化某个值,或将该值用作其他过程的输入。在这些情形下,readMeasurement 可以按照由计时器或循环驱动的任何类型的时间间隔调用。这种测量变量值的读取方式最适合异步或低频目的。

断开与服务器的连接

要反激活与服务器的通信,请使用 disconnect 函数。断开连接后,XCP 服务器可以安全关闭。

disconnect(xcpCh)

清理

clear sampleServer a2lInfo