在 Simulink 中执行 XCP 数据采集
此示例说明如何使用 XCP 模块从 XCP Sample 服务器采集 Simulink® 中的测量变量值。XCP Sample 服务器是专门为 XCP 示例设计的。
Vehicle Network Toolbox™ 提供 XCP 模块,用于通过多个传输层与服务器对接,包括控制器局域网 (CAN)、控制器局域网灵活数据速率 (CAN FD) 和用户数据报协议 (UDP)。此示例使用 XCP CAN Configuration、XCP CAN Data Acquisition 和 XCP CAN Transport Layer 模块通过 CAN 协议执行数据传输。
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/Bdoc25b_2988451_1430519/tpe4ace63d/vnt-ex11419635/SampleECU.a2l'
ServerName: 'SampleServer'
Warnings: [0×0 string]
Parameter Details
Events: {'Event DAQ 100ms'}
EventInfo: [1×1 xcp.a2l.Event]
Measurements: {'Line' 'PWM' 'Sine'}
MeasurementInfo: [3×1 containers.Map]
Characteristics: {'Gain' 'yData'}
CharacteristicInfo: [2×1 containers.Map]
AxisInfo: [1×1 containers.Map]
RecordLayouts: [3×1 containers.Map]
CompuMethods: [1×1 containers.Map]
CompuTabs: [0×1 containers.Map]
CompuVTabs: [0×1 containers.Map]
XCP Protocol Details
ProtocolLayerInfo: [1×1 xcp.a2l.ProtocolLayer]
DAQInfo: [1×1 xcp.a2l.DAQ]
TransportLayerCANInfo: [1×1 xcp.a2l.XCPonCAN]
TransportLayerUDPInfo: [0×0 xcp.a2l.XCPonIP]
TransportLayerTCPInfo: [1×1 xcp.a2l.XCPonIP]
启动 XCP Sample 服务器
XCP Sample 服务器以可控方式模拟真实 XCP 服务器的行为。在这种情况下,它仅用于演示功能有限的示例。使用本地 SampleECU 类创建 sampleServer 对象。将在 MATLAB® 工作区中创建一个 sampleServer。
sampleServer = SampleECU(a2LInfo,"CAN","MathWorks","Virtual 1",1);
打开示例模型
open_system("XCPDataAcquisitionInSimulinkExample.slx")设置 XCP 模块参数
创建一个模型,以设置从 Sample 服务器采集测量变量 PWM 和 Sine 和 Line 的 XCP 数据。
使用 XCP Configuration 模块并选择 A2L 文件 SampleECU.a2l。
使用 XCP CAN Transport Layer 模块并将
Device设置为Mathworks Virtual 1 Channel 2。传输层配置为在 CAN 上通过指定的虚拟通道传输 XCP 报文。使用 XCP Data Acquisition 模块在发生指定事件时接收所选的测量变量值。对于此示例,我们已为所有三个测量变量选择了 XCP Data Acquisition 模块。
可视化从服务器接收的测量变量值
运行模型并绘制结果,以查看来自服务器的 PWM、Sine 和 Line 测量变量的值。X 轴对应于仿真时间步。最初,示波器没有数据输出,因为 Sample 服务器需要时间来初始化。

关闭模型并进行清理
close_system("XCPDataAcquisitionInSimulinkExample.slx") clear sampleServer a2LInfo