主要内容

阅读XCP测量与动态DAQ列表

本示例展示如何使用XCP协议功能连接并从部署到Windows®可执行文件的Simulink®模型获取数据。金宝app该示例使用TCP和动态DAQ列表读取模型的测量参数。XCP是一种高级协议,用于访问和修改模型、算法或ECU的内部参数和变量。有关更多信息,请参阅ASAM标准

算法概述

本例中使用的算法是构建并部署为XCP服务器的Simulink模型。金宝app模型已经编译完毕,可以在文件中运行XCPServerSineWaveGenerator.exe.此外,a2l文件XCPServerSineWaveGenerator.a2l作为该构建流程的输出提供。该模型包含通过XCP访问的三个度量和两个特征。因为模型已经部署,所以不需要Simulink来运行这个示例。金宝app下图演示了该模型。

截图2021-05-03 164730.png

有关如何构建Simulink模型(包括XCP服务器)和生成a2l文金宝app件的详细信息,请参见导出ASAP2文件进行数据测量和校准(金宝app仿真软件编码器)

运行XCP服务器模型

要与XCP服务器通信,必须运行已部署的模型。通过使用系统函数时,可以执行XCPServerSineWaveGenerator.exe从MATLAB®。该函数需要构造一个指向可执行文件的参数列表。将打开一个单独的命令窗口,并显示来自服务器的运行输出。

sysCommand = [“””fullfile (pwd,“XCPServerSineWaveGenerator.exe”),“””“&”];系统(所);

打开a2l文件

需要一个a2l文件来建立到XCP服务器的连接。a2l -文件描述了XCP服务器提供的所有功能和能力,以及如何连接到服务器的详细信息。使用xcpA2L函数打开描述服务器模型的a2l文件。

a2lInfo = xcpA2L(“XCPServerSineWaveGenerator.a2l”
a2lInfo = A2L与属性:文件详细信息FileName: 'XCPServerSineWaveGenerator。a2l ` FilePath: ` C:\Users\kuanliu\Documents\MATLAB\Examples\vnt-ex16421241\XCPServerSineWaveGenerator。a2l' ServerName: 'ModuleName'警告:[0×0 string]参数详细信息事件:{'100 ms'} EventInfo: [1×1 xcp.a2l.]测量值:{' sin ' 'SineAfterGain' 'SineAfterTable' 'XCPServer_DW。lastCos“XCPServer_DW。lastSin“XCPServer_DW。系统Enable'} MeasurementInfo: [6×1 containers.Map] Characteristics: {'Gain' 'ydata'} CharacteristicInfo: [2×1 containers.Map] AxisInfo: [1×1 containers.Map] RecordLayouts: [4×1 containers.Map] CompuMethods: [3×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: [0×0 xcp.a2l.XCPonCAN] TransportLayerUDPInfo: [0×0 xcp.a2l.XCPonIP] TransportLayerTCPInfo: [1×1 xcp.a2l.XCPonIP]

TCP是用于与XCP服务器通信的传输协议。TCP连接的详细信息,如IP地址和端口号,包含在TransportLayerTCPInfo财产。

a2lInfo。TransportLayerTCPInfo
CommonParameters: [1×1 xcp.a2l.]CommonParameters] TransportLayerInstance: " Port: 17725 Address: 2.1307e+09 AddressString: '127.0.0.1'

创建一个XCP通道

要创建到服务器的活动XCP连接,请使用xcpChannel函数。该函数需要对服务器a2l文件的引用,以及用于与服务器进行消息传递的传输协议类型。

xcpCh = xcpChannel(a2lInfo,“TCP”
xcpCh = Channel with properties: ServerName: 'ModuleName' A2LFileName: 'XCPServerSineWaveGenerator。a2l' TransportLayer: 'TCP' TransportLayerDevice: [1×1 struct] SeedKeyDLL: []

连接服务器

要使与服务器的通信处于活动状态,请使用连接函数。

连接(xcpCh)

创建并查看测量列表

XCP中的测量表示模型内存中的一个变量。服务器上可用的度量在a2l文件中定义。读取测量数据的一种方法是使用动态DAQ列表。使用createMeasurementList功能,以创建一个动态的DAQ列表,使用指定的事件来触发组成该列表的数据采集和测量。

createMeasurementList (xcpCh“数据收集”“100 ms”, (“正弦”“SineAfterGain”“SineAfterTable”])

查看配置的动态DAQ列表viewMeasurementLists函数。

viewMeasurementLists (xcpCh)
DAQ列表#1使用“100毫秒”事件@ 0.100000秒和以下测量值

从XCP服务器获取数据

启动已配置的动态DAQ列表startMeasurement函数。它开始从服务器传输DAQ数据,并将DAQ数据存储在XCP通道中。运行几秒钟后,停止测量使用stopMeasurement函数。

startMeasurement (xcpCh)暂停(3);stopMeasurement (xcpCh)

检索正弦测量数据

从XCP通道检索所获得的数据正弦测量,使用readDAQ函数。该函数需要引用XCP通道和要读取的指定测量值。readDAQ返回XCP通道持有的所有可用样本。返回的测量数据readDAQ使用a2l文件中为测量定义的计算方法完全缩放。

dataSine = readDAQ(xcpCh,“正弦”);情节(dataSine“啊——”)标题(“正弦测量数据”)包含(“数据点”) ylabel (“数据值”

检索SineAfterGain测量数据

从XCP通道检索所获得的数据SineAfterGain测量,使用readDAQ函数。

dataSineAfterGain = readDAQ(xcpCh,“SineAfterGain”);情节(dataSineAfterGain“啊——”)标题(“SineAfterGain测量数据”)包含(“数据点”) ylabel (“数据值”

检索SineAfterTable测量数据

从XCP通道检索所获得的数据SineAfterTable测量,使用readDAQ函数。

dataSineAfterTable = readDAQ(xcpCh,“SineAfterTable”);情节(dataSineAfterTable“啊——”)标题(“SineAfterTable测量数据”)包含(“数据点”) ylabel (“数据值”

断开与服务器的连接

要使与服务器的通信处于非活动状态,请使用断开连接函数。XCP服务器可以在断开连接后安全关闭。

断开(xcpCh)

清理

清晰的a2lInfo