主要内容

使用动态DAQ列表读取XCP度量

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

算法概述

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

有关如何构建Simulink模型(包括XCP服务器和生成A2L文件金宝app)的详细信息,请参阅导出ASAP2文件用于数据测量和校准(金宝appSimulink编码器)

运行XCP服务器模型

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

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

打开A2L-File

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

a2lInfo = xcpA2L (“XCPServerSineWaveGenerator.a2l”)
a2lInfo=A2L,带属性:文件详细信息文件名:“XCPServerSineWaveGenerator.A2L”文件路径:“C:\Users\kuanliu\Documents\MATLAB\Examples\vnt-ex16421241\XCPServerSineWaveGenerator.A2L”服务器名:“ModuleName”警告:[0×0字符串]参数详细信息事件:{100 ms'}EventInfo:[1×1 xcp.A2L.Event]测量值:{'Sine''SineAfterGain''SineAfterGain''SineAfterGain''SineAfterGain''SineAfterGain''SineAfterGain''SineAfterTable''XCPServer_DW.lastCos''XCPServer_DW.lastSin''XCPServer_DW.lastSin''XCPServer_DW.systemEnable'}MeasurementInfo:[6×1 containers.Map]特征:{'Gain''ydata'}特征信息:[2×1 containers.Map]AxisInfo:[1 containers.Map][0×1 containers.Map]CompuvTab:[0×1 containers.Map]XCP协议详细信息ProtocolLayerInfo:[1×1 XCP.a2l.ProtocolLayer]DAQInfo:[1×1 XCP.a2l.DAQ]TransportLayerCANInfo:[0×0 XCP.a2l.XCPonIP]TransportLayerCpinfo:[1×1 XCP.a2l.Xponip]

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

a2lInfo。TransportLayerTCPInfo
ans = XCPonIP with properties:CommonParameters] TransportLayerInstance: " Port: 17725 Address: 2.1307e+09 AddressString: '127.0.0.1'

创建一个XCP通道

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

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

连接到服务器

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

连接(xcpCh)

创建并查看测量列表

XCP中的测量值表示模型内存中的一个变量。可从服务器获得的测量值定义在a2l文件中。读取测量数据的一种方法是使用动态DAQ列表。使用createMeasurementList函数用于创建具有指定事件的动态DAQ列表,该事件用于触发构成该列表的数据采集和测量。

createMeasurementList (xcpCh“数据收集”,“100毫秒”, (“正弦”,“后增益”,“SineAfterTable”])

视图已配置的动态DAQ列表视图测量列表函数。

ViewMeasurementList(xcpCh)
数据采集列表#1使用0.100000秒的“100毫秒”事件和以下测量值:正弦正弦后增益正弦后表

从XCP服务器获取数据

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

开始测量(xcpCh)暂停(3);停止测量(xcpCh)

检索正弦测量数据

从XCP通道中获取数据正弦测量,使用readDAQ函数。该功能需要参考XCP通道和指定的测量来读取。readDAQ返回XCP通道持有的所有可用样品。由readDAQ使用A2L文件中为测量定义的计算方法完全缩放。

dataSine = readDAQ (xcpCh,“正弦”);绘图(数据线),“o—)标题(“正弦测量数据”)包含(“数据点”) ylabel (“数据值”)

检索增益测量数据

从XCP通道中获取数据正弦后增益测量,使用readDAQ函数。

dataSineAfterGain = readDAQ (xcpCh,“后增益”); 绘图(数据线增益,“o—)标题(“后增益测量数据”)包含(“数据点”) ylabel (“数据值”)

检索可追溯的测量数据

从XCP通道中获取数据柔软的测量,使用readDAQ函数。

dataSineAfterTable = readDAQ (xcpCh,“SineAfterTable”);绘图(数据线),“o—)标题(“SineAfterTable测量数据”)包含(“数据点”) ylabel (“数据值”)

断开与服务器的连接

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

断开(xcpCh)

清理

清晰的a2lInfo