Create and Add Custom Data Elements - MATLAB & Simulink (original) (raw)

Generate an ASAP2 file by adding custom characteristics, measurements, axis-points, functions, groups, record layouts, and CompuMethods. By default, an ASAP2 file contains the data elements present in model that were configured to export.

Using the Simulink® Coder™ you can:

Video - Customization of ASAP2 File

This video walks you through how to build a model and add, update, find, delete custom data elements in an ASAP2 file.

Customize an ASAP2 File

Add, update, filter, find, and remove ECU descriptions in an ASAP2 file.

Open and Build Example Model

Open the example model ASAP2Demo

open_system("ASAP2Demo");

Build the model.

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

Create the ECU description object for the model.

descObj = coder.asap2.getEcuDescriptions("ASAP2Demo");

Get the list of available computation methods in the description object.

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"

Filter the computation methods and get a list of computation methods that use rpm as the unit.

find(descObj,"CompuMethod",Units='rpm')

ans = 1×3 string "ASAP2DemoModelRef_CM_int16_rpm" "ASAP2Demo_CM_double_rpm" "ASAP2Demo_CM_single_rpm"

Create and Add Custom Computation Method

To add a new computation method to the ASAP2 file, create a custom computation method.

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';

Add the custom computation method to the ECU description object.

add(descObj,CompuMethod_1);

Get the properties of the newly added computation method.

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: ""

To modify a property of the computation method, use set function. Update the ConversionType field of the computation method to TAB_VERB and define the CompuVTabValues.

set(descObj,"CompuMethod","CompuMethod_1",ConversionType="TAB_VERB"); set(descObj,"CompuMethod","CompuMethod_1",CompuVTabValues = struct('Literals',["false" "true"],'Values',[0 1]));

Get the properties to see the modified fields.

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]

Generate the ASAP2 file using the updated ECU description object and verify that the ASAP2 file contains the computation method 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 Computation Method

Remove the newly added computation method from the description object.

delete(descObj,"CompuMethod","CompuMethod_1");

Create and Add Custom Characteristic

To add a new characteristic to the ASAP2 file, create a custom characteristic.

Parameter_1 = coder.asap2.Characteristic; Parameter_1.Name = 'Custom_parameter1'; Parameter_1.LongIdentifier = 'longIdentifierParam'; Parameter_1.UpperLimit = 255; Parameter_1.LowerLimit = 0;

Add the custom characteristic to the ECU description object.

add(descObj,Parameter_1);

Get the properties of the newly added characteristic.

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: ""

To modify a property of the characteristic, use set function. Update the UpperLimit field of the characteristic.

set(descObj,"Characteristic","Custom_parameter1",UpperLimit=128)

Generate the ASAP2 file using the updated ECU description object and verify that the ASAP2 file contains the characteristic 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"

Remove the newly added characteristic from the description object.

delete(descObj,"Characteristic","Custom_parameter1");

Create and Add Custom Measurement

To add a new measurement to the ASAP2 file, create a custom measurement.

Signal_1 = coder.asap2.Measurement; Signal_1.Name = 'Custom_signal1'; Signal_1.LongIdentifier = 'longIdentifierSignal'; Signal_1.UpperLimit = 255; Signal_1.LowerLimit = 0;

Add the custom measurement to the ECU description object.

Get the properties of the newly added measurement.

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: ""

To modify a property of the measurement, use set function. Update the CalibrationAccess field of the measurement.

set(descObj,"Measurement","Custom_signal1",CalibrationAccess='Calibration')

Generate the ASAP2 file using the updated ECU description object and verify that the ASAP2 file contains the measurement with name 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"

Remove the newly added measurement from the description object.

delete(descObj,"Measurement","Custom_signal1");

Create and Add Lookup Table Parameter

Add a lookup table parameter.

LUT_Parameter = coder.asap2.Characteristic; LUT_Parameter.Name = "custom_lookup_table"; LUT_Parameter.Type = "MAP";

Create and add axis information to the parameter.

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 the lookup table parameter to the description object.

add(descObj,LUT_Parameter)

Generate the ASAP2 file using the updated ECU description object and verify that the ASAP2 file contains the lookup table parameter 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"

Create and Add Custom Group

Add, update, filter, find, and remove ECU descriptions for groups in an ASAP2 file.

Open and Build Example Model

Open the example model ASAP2Demo

open_system("ASAP2Demo");

Build the model.

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

Create the ECU description object for the model.

descObj = coder.asap2.getEcuDescriptions("ASAP2Demo");

Get the list of available groups in the description object.

ans = 1×2 string "ASAP2Demo" "ASAP2Demo.ASAP2DemoModelRef.ASAP2DemoModelRef"

Filter the groups and get a list of groups that has Root set to true.

find(descObj,"Group",Root=true)

Create and Add Custom Group

To add a new group to the ASAP2 file, create a custom group.

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;

Add the custom group to the ECU description object.

add(descObj,GroupObj_GR1);

Get Group Properties

Get the properties of newly added group by using this command.

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]

Update Group Properties

To modify a property of the group, use set function. Update the LongIdentifier field of the group.

set(descObj,"Group","CustomGroup_1",LongIdentifier="Group 1 new long identifier")

Generate the ASAP2 file using the updated ECU description object and verify that the ASAP2 file contains the group 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 Group

Remove the newly added group from the description object.

delete(descObj,"Group","CustomGroup_1");

See Also

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

Topics