创建并添加自定义数据元素
通过添加自定义特征、测量、轴点、函数、组、记录布局和 CompuMethods 来生成 ASAP2 文件。默认情况下,ASAP2 文件包含配置为导出的模型中存在的数据元素。
使用 Simulink® Coder™ 您可以:
创建和添加自定义数据元素,例如特征、测量、轴点、函数、组、记录布局和 CompuMethods。
从 ASAP2 文件中删除数据元素。
根据数据元素的属性对其进行过滤和筛查。
获取或更新数据元素的属性。
视频 - ASAP2 文件的自定义
该视频将引导您了解如何构建模型以及在 ASAP2 文件中添加、更新、查找和删除自定义数据元素。
自定义 ASAP2 文件
在 ASAP2 文件中添加、更新、过滤、查找和删除 ECU 描述。
打开并构建示例模型
打开示例模型 ASAP2Demo
open_system("ASAP2Demo");
编译模型。
slbuild("ASAP2Demo");### Searching for referenced models in model 'ASAP2Demo'. ### Total of 2 models to build. ### Starting serial code generation build. ### Successfully updated the model reference code generation target for: ASAP2DemoModelRef ### Starting build procedure for: ASAP2Demo ### Successful completion of build procedure for: ASAP2Demo Build Summary Model reference code generation targets: Model Build Reason Status Build Duration ============================================================================================================ ASAP2DemoModelRef Target (ASAP2DemoModelRef.c) did not exist. Code generated and compiled. 0h 0m 5.8839s Top model targets: Model Build Reason Status Build Duration ============================================================================================================ ASAP2Demo Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 12.037s 2 of 2 models built (0 models already up to date) Build duration: 0h 0m 18.852s
为模型创建 ECU 描述对象。
descObj = coder.asap2.getEcuDescriptions("ASAP2Demo");获取描述对象中可用的计算方法列表。
find(descObj,"CompuMethod")ans = 1×10 string
"ASAP2DemoModelRef_CM_double" "ASAP2DemoModelRef_CM_int16_rpm" "ASAP2Demo_CM_double" "ASAP2Demo_CM_double_m_per__s_2_" "ASAP2Demo_CM_double_rpm" "ASAP2Demo_CM_int32" "ASAP2Demo_CM_single" "ASAP2Demo_CM_single_m_per__s_2_" "ASAP2Demo_CM_single_rpm" "ASAP2Demo_CM_uint8"
过滤计算方法,获取以 rpm 为单位的计算方法列表。
find(descObj,"CompuMethod",Units='rpm')
ans = 1×3 string
"ASAP2DemoModelRef_CM_int16_rpm" "ASAP2Demo_CM_double_rpm" "ASAP2Demo_CM_single_rpm"
创建并添加自定义计算方法
要向 ASAP2 文件添加新的计算方法,请创建自定义计算方法。
CompuMethod_1 = coder.asap2.CompuMethod; CompuMethod_1.Name = 'CompuMethod_1'; CompuMethod_1.ConversionType = 'LINEAR'; CompuMethod_1.Coefficients = [2 3]; CompuMethod_1.LongIdentifier = 'longIdentifierTest'; CompuMethod_1.Format = '%2.3'; CompuMethod_1.Units = 's';
将自定义计算方法添加到 ECU 描述对象。
add(descObj,CompuMethod_1);
获取新添加的计算方法的属性。
get(descObj,"CompuMethod","CompuMethod_1")
ans =
CompuMethod with properties:
Name: 'CompuMethod_1'
LongIdentifier: 'longIdentifierTest'
Format: '%2.3'
Units: 's'
Coefficients: [2 3]
ConversionType: 'LINEAR'
CompuVTabValues: [1×1 struct]
CustomData: ""
要修改计算方法的属性,请使用 set 函数。将计算方法的 ConversionType 字段更新为 TAB_VERB ,并定义 CompuVTabValues.。
set(descObj,"CompuMethod","CompuMethod_1",ConversionType="TAB_VERB"); set(descObj,"CompuMethod","CompuMethod_1",CompuVTabValues = struct('Literals',["false" "true"],'Values',[0 1]));
获取属性来查看修改的字段。
modifiedprop = get(descObj,"CompuMethod","CompuMethod_1")
modifiedprop =
CompuMethod with properties:
Name: 'CompuMethod_1'
LongIdentifier: 'longIdentifierTest'
Format: '%2.3'
Units: 's'
Coefficients: [2 3]
ConversionType: "TAB_VERB"
CompuVTabValues: [1×1 struct]
CustomData: ""
modifiedprop.CompuVTabValues
ans = struct with fields:
Literals: ["false" "true"]
Values: [0 1]
使用更新后的 ECU 描述对象生成 ASAP2 文件,并验证 ASAP2 文件是否包含计算方法 CompuMethod_1。
coder.asap2.export("ASAP2Demo",CustomEcuDescriptions=descObj);Following Characteristics or Measurements with unsupported data types are not exported in ASAP2 file. "ASAP2Demo_DW.ASAP2DemoModelRef_InstanceData"
删除计算方法
从描述对象中移除新添加的计算方法。
delete(descObj,"CompuMethod","CompuMethod_1");
创建并添加自定义特征
要向 ASAP2 文件添加新特性,请创建自定义特性。
Parameter_1 = coder.asap2.Characteristic; Parameter_1.Name = 'Custom_parameter1'; Parameter_1.LongIdentifier = 'longIdentifierParam'; Parameter_1.UpperLimit = 255; Parameter_1.LowerLimit = 0;
将自定义特性添加到 ECU 描述对象。
add(descObj,Parameter_1);
获取新添加的特性的属性。
get(descObj,"Characteristic","Custom_parameter1")
ans =
Characteristic with properties:
Name: 'Custom_parameter1'
LongIdentifier: 'longIdentifierParam'
Type: 'VALUE'
EcuAddress: '0x0000'
CompuMethodName: 'NO_COMPU_METHOD'
LowerLimit: 0
UpperLimit: 255
EcuAddressComment: ""
EcuAddressExtension: []
CalibrationAccess: 'Calibration'
DisplayIdentifier: ""
Format: ""
BitMask: []
AxisInfo: []
RecordLayout: ""
Dimensions: []
Export: 1
MaxRefresh: [1×1 struct]
SymbolLink: [1×1 struct]
CustomData: ""
要修改特征的属性,请使用 set 函数。更新特征的 UpperLimit 字段。
set(descObj,"Characteristic","Custom_parameter1",UpperLimit=128)
使用更新的 ECU 描述对象生成 ASAP2 文件,并验证 ASAP2 文件是否包含特性 Custom_parameter1。
coder.asap2.export("ASAP2Demo",CustomEcuDescriptions=descObj);Following Characteristics or Measurements with unsupported data types are not exported in ASAP2 file. "ASAP2Demo_DW.ASAP2DemoModelRef_InstanceData"
从描述对象中删除新添加的特征。
delete(descObj,"Characteristic","Custom_parameter1");
创建并添加自定义测量
要向 ASAP2 文件添加新测量,请创建自定义测量。
Signal_1 = coder.asap2.Measurement; Signal_1.Name = 'Custom_signal1'; Signal_1.LongIdentifier = 'longIdentifierSignal'; Signal_1.UpperLimit = 255; Signal_1.LowerLimit = 0;
将自定义测量添加到 ECU 描述对象。
add(descObj,Signal_1);
获取新添加的测量的属性。
get(descObj,"Measurement","Custom_signal1")
ans =
Measurement with properties:
Name: 'Custom_signal1'
LongIdentifier: 'longIdentifierSignal'
DataType: 'UBYTE'
EcuAddress: '0x0000'
CompuMethodName: ""
LowerLimit: 0
UpperLimit: 255
Raster: [1×1 struct]
EcuAddressComment: ""
EcuAddressExtension: []
CalibrationAccess: 'NoCalibration'
DisplayIdentifier: ""
Format: ""
BitMask: []
Dimensions: []
Export: 1
MaskData: [1×1 struct]
MaxRefresh: [1×1 struct]
SymbolLink: [1×1 struct]
CustomData: ""
要修改测量的属性,请使用 set 函数。更新测量的 CalibrationAccess 字段。
set(descObj,"Measurement","Custom_signal1",CalibrationAccess='Calibration')
使用更新的 ECU 描述对象生成 ASAP2 文件,并验证 ASAP2 文件是否包含名为 Custom_signal1 的测量值。
coder.asap2.export("ASAP2Demo",CustomEcuDescriptions=descObj);Following Characteristics or Measurements with unsupported data types are not exported in ASAP2 file. "ASAP2Demo_DW.ASAP2DemoModelRef_InstanceData"
从描述对象中删除新添加的测量。
delete(descObj,"Measurement","Custom_signal1");
创建并添加查找表参数
添加查找表参数。
LUT_Parameter = coder.asap2.Characteristic; LUT_Parameter.Name = "custom_lookup_table"; LUT_Parameter.Type = "MAP";
创建并添加轴信息到参数。
axis_data = coder.asap2.AxisInfo; axis_data(1).Name = 'BP3'; axis_data(2).Name = 'Bp4'; axis_data(1).CompuMethodName = 'ASAP2Demo_CM_double'; axis_data(2).CompuMethodName = 'ASAP2Demo_CM_double'; axis_data(1).MaxAxisPoints = '3'; axis_data(2).MaxAxisPoints = '3'; axis_data(1).AxisType = 'STD_AXIS'; axis_data(2).AxisType = 'STD_AXIS'; LUT_Parameter.AxisInfo = axis_data;
将查找表参数添加到描述对象。
add(descObj,LUT_Parameter)
使用更新后的 ECU 描述对象生成 ASAP2 文件,并验证 ASAP2 文件是否包含查找表参数 custom_lookup_table。
coder.asap2.export("ASAP2Demo",CustomEcuDescriptions=descObj);Following Characteristics or Measurements with unsupported data types are not exported in ASAP2 file. "ASAP2Demo_DW.ASAP2DemoModelRef_InstanceData"
创建并添加自定义组
添加、更新、过滤、查找和删除 ASAP2 文件中各组的 ECU 描述。
打开并构建示例模型
打开示例模型 ASAP2Demo
open_system("ASAP2Demo");
编译模型。
slbuild("ASAP2Demo");### Searching for referenced models in model 'ASAP2Demo'. ### Total of 2 models to build. ### Starting serial code generation build. ### Successfully updated the model reference code generation target for: ASAP2DemoModelRef ### Starting build procedure for: ASAP2Demo ### Successful completion of build procedure for: ASAP2Demo Build Summary Model reference code generation targets: Model Build Reason Status Build Duration ============================================================================================================ ASAP2DemoModelRef Target (ASAP2DemoModelRef.c) did not exist. Code generated and compiled. 0h 0m 7.3874s Top model targets: Model Build Reason Status Build Duration ============================================================================================================ ASAP2Demo Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 13.761s 2 of 2 models built (0 models already up to date) Build duration: 0h 0m 22.418s
为模型创建 ECU 描述对象。
descObj = coder.asap2.getEcuDescriptions("ASAP2Demo");获取描述对象中可用组的列表。
find(descObj,"Group")ans = 1×2 string
"ASAP2Demo" "ASAP2Demo.ASAP2DemoModelRef.ASAP2DemoModelRef"
过滤群组并获取将 Root 设置为 true 的群组列表。
find(descObj,"Group",Root=true)ans = "ASAP2Demo"
创建并添加自定义组
要向 ASAP2 文件添加新组,请创建自定义组。
GroupObj_GR1 = coder.asap2.Group; GroupObj_GR1.Name = 'CustomGroup_1'; GroupObj_GR1.LongIdentifier = 'New test group'; GroupObj_GR1.RefCharacteristic = ["ydata3", "ydata4"]; GroupObj_GR1.RefMeasurement = ["ASAP2Demo_Y.Out3", "ASAP2Demo_Y.Out3"]; GroupObj_GR1.Root = true;
将自定义组添加到 ECU 描述对象。
add(descObj,GroupObj_GR1);
获取组属性
使用此命令获取新添加的组的属性。
get(descObj,"Group","CustomGroup_1")
ans =
Group with properties:
Name: 'CustomGroup_1'
LongIdentifier: 'New test group'
RefCharacteristic: ["ydata3" "ydata4"]
RefMeasurement: ["ASAP2Demo_Y.Out3" "ASAP2Demo_Y.Out3"]
Root: 1
SubGroup: [1×0 string]
CustomData: [1×0 string]
更新组属性
要修改组的属性,请使用 set 函数。更新该组的 LongIdentifier 字段。
set(descObj,"Group","CustomGroup_1",LongIdentifier="Group 1 new long identifier")
使用更新的 ECU 描述对象生成 ASAP2 文件,并验证 ASAP2 文件是否包含组 CustomGroup_1。
coder.asap2.export("ASAP2Demo",CustomEcuDescriptions=descObj);Following Characteristics or Measurements with unsupported data types are not exported in ASAP2 file. "ASAP2Demo_DW.ASAP2DemoModelRef_InstanceData"
删除组
从描述对象中删除新添加的组。
delete(descObj,"Group","CustomGroup_1");
另请参阅
coder.asap2.AxisInfo | coder.asap2.Characteristic | coder.asap2.CompuMethod | coder.asap2.Function | coder.asap2.Group | coder.asap2.Measurement | coder.asap2.RecordLayout | coder.asap2.export | coder.asap2.getEcuDescriptions | coder.asap2.Group