在 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/Bdoc24a_2511836_3090053/tpeb21c448/vnt-ex11419635/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
类创建 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