阅读XCP测量与动态DAQ列表
本示例展示如何使用XCP协议功能连接并从部署到Windows®可执行文件的Simulink®模型获取数据。金宝app该示例使用TCP和动态DAQ列表读取模型的测量参数。XCP是一种高级协议,用于访问和修改模型、算法或ECU的内部参数和变量。有关更多信息,请参阅ASAM标准.
算法概述
本例中使用的算法是构建并部署为XCP服务器的Simulink模型。金宝app模型已经编译完毕,可以在文件中运行XCPServerSineWaveGenerator.exe
.此外,a2l文件XCPServerSineWaveGenerator.a2l
作为该构建流程的输出提供。该模型包含通过XCP访问的三个度量和两个特征。因为模型已经部署,所以不需要Simulink来运行这个示例。金宝app下图演示了该模型。
有关如何构建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