主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

创建并添加自定义数据元素

通过添加自定义特征、测量、轴点、函数、组、记录布局和 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");

另请参阅

| | | | | | | | |

主题