Можно настроить поля файла ASAP2 при помощи генератора кода любым из этих способов:
Создайте объект из базового класса.
obj = coder.asap2.UserCustomizeBase;
Измените поля объекта.
obj.HeaderComment = 'Header comment'; obj.ModParComment = 'Mod Par comment'; obj.ModCommonComment = 'Mod Common comment'; obj.ASAP2FileName = 'File name'; obj.ByteOrder = 'BYTEORDER MSB_LAST';
Передайте объект функции, которая генерирует файл ASAP2.
coder.asap2.export(modelName,'CustomizationObject',obj);
Выведите из базового класса coder.asap2.UserCustomizeBase. Можно поместить производный файл куда угодно в путь MATLAB.
Чтобы отредактировать раздел Header, используйте writeHeader функция.
Используйте writeHardwareInterface функционируйте, чтобы отредактировать раздел аппаратного интерфейса, состоящий из MOD_PAR и MOD_COMMON поля файла ASAP2.
Чтобы добавить текст в начале файла ASAP2, используйте writeFileHead функция.
Чтобы добавить текст в конце файла ASAP2, используйте writeFileTail функция.
Например, код для генерации производного класса TestASAP2Customization может выглядеть так код:
classdef TestASAP2Customization < coder.asap2.UserCustomizeBase % Customization class for asap2 file methods function header = writeHeader(obj) header = sprintf([' /begin HEADER ' 'test Header text' '\n',... 'header test comments from user\n',... ' /end HEADER']); end function hardwareInterface = writeHardwareInterface(obj) hardwareInterface = sprintf([' /begin MOD_PAR "' 'UserDefined' '"\n',... ' test comments from user\n',... ' /end MOD_PAR\n\n',... ' /begin MOD_COMMON "' 'UserDefined MOD_COMMON' '"\n',... ' user defined values for MOD_COMMON\n',... ' ' obj.ByteOrder '\n',... ' /end MOD_COMMON']); end function fileTail = writeFileTail(obj) fileTail = sprintf(['/* This File can be used for ' ,... 'calibration .*/\n'... '/* EOF ',obj.ASAP2FileName, '*/']); end function fileHeader = writeFileHead(obj) fileHeader = sprintf(['/******************************************************************************\n',... ' This is a a2l file which can be used for calibration with INCA or CANAPE\n',... ' ******************************************************************************/' ]); end end end
Создайте объект из производного класса. Например, эта команда создает объект из TestASAP2Customization.
obj = TestASAP2Customization;
Передайте объект функции, которая генерирует файл ASAP2.
coder.asap2.export(modelName,'CustomizationObject',obj);
В сгенерированных файлах ASAP2 методы расчета переводят электронный блок управления (ECU), внутреннее представление количеств измерения и калибровки в физическую модель ориентировало представление. Используя Simulink® Программное обеспечение Coder™, можно настроить имена методов расчета. Можно обеспечить имена, которые более интуитивны, улучшая удобочитаемость файла ASAP2 или имена, которые удовлетворяют организационные требования.
Чтобы настроить имена методов расчета, используйте MATLAB® функция getCompuMethodName, который задан в .matlabroot/toolbox/rtw/targets/asap2/asap2/user/getCompuMethodName.m
getCompuMethodName функционируйте создает имя метода расчета. Прототип функции
cmName = getCompuMethodName(dataTypeName, cmUnits)
где имя типа данных, сопоставленного с методом расчета, dataTypeName модули, как задано в cmUnitsUnit свойство Simulink.Parameter or Simulink.Signal объект (например, rpm или m/s), и возвращает созданное имя метода расчета.cmName
Созданное имя значения по умолчанию, возвращенное функцией, имеет формат
<localPrefix><datatype>_<cmUnits>
где
<local_Prefix> локальный префикс, CM_, заданный в .matlabroot/toolbox/rtw/targets/asap2/asap2/user/getCompuMethodName.m
<datatype> и <cmUnits> аргументы, которые вы задали к getCompuMethodName функция.
Специальные символы используются в не поддерживаются в имени метода расчета в файле ASAP2. Специальные символы преобразованы как показано в этой таблицеcmUnits
| Специальный символ | Преобразование |
|---|---|
| % | _percent_ |
| - | _dash_ |
| / | _per_ |
| * | _into_ |
| ° | _deg_ |
Например, если вы вызываете getCompuMethodName функция с аргумент dataTypeName'int16' и аргумент cmUnits'm/s', и затем сгенерируйте файл ASAP2 для модели под названием myModel, имя метода расчета появляется в сгенерированном файле можно следующим образом:
/begin COMPU_METHOD /* Name of CompuMethod */ myModel_CM_int16_m_per_s /* Units */ "m/s" ... /end COMPU_METHOD
Начиная в релизе R2021b, можно сгруппировать характеристические и объекты измерения в файле ASAP2 на основе их свойств. По умолчанию сгенерированный файл ASAP2 содержит GROUPS и SUB_GROUPS на основе подсистем, существующих в модели.
Откройте sldemo_fuelsys модель.
open_system("sldemo_fuelsys")Создайте модель.
Сгенерируйте файл ASAP2 при помощи Generate Calibration Files инструмент или
coder.asap2.export("sldemo_fuelsys")Можно найти элементы данных сгруппированными на основе архитектуры модели. Топ-модель отнесена как GROUP и подсистемы в модели отнесены как SUB_GROUPS. Сгенерированный файл содержит эти линии.
/begin GROUP
/* Name */ sldemo_fuelsys
/* Long identifier */ "sldemo_fuelsys"
/* Root */ ROOT
/begin SUB_GROUP
rtB.es_o
sldemo_fuelsys_Dashboard
sldemo_fuelsys_Engine_Gas_Dynamics
sldemo_fuelsys_Throttle_Command
sldemo_fuelsys_To_Controller
sldemo_fuelsys_To_Plant
sldemo_fuelsys_fuel_rate_control
/end SUB_GROUP
/end GROUPСледующие оперативные группы штаба scalar объекты группе под названием GROUP_TYPE_SCALAR в файле ASAP2.
coder.asap2.export("sldemo_fuelsys",'CustomizeGroupsBy',{'SCALAR'})
Таким образом можно также сгруппировать объекты типа array. И интерполяционные таблицы в MAP, CURVE, CUBOID, CUBE_4, и CUBE_5 на основе размерностей таблицы.
Откройте sldemo_fuelsys модель.
open_system("sldemo_fuelsys")Создайте модель.
Сгенерируйте файл ASAP2.
coder.asap2.export("sldemo_fuelsys","IncludeAllRecordLayouts",true)
Можно найти RecordLayouts.a2l файл сгенерирован с файлом ASAP2. Проверьте следующую линию в файле ASAP2, который включает файл размещений записи.
/include "RecordLayouts.a2l"
Сгенерированный RecordLayouts.a2l файл содержит размещения записи всех типов данных, существующих в модели.
Примечание
Файл ASAP2 требует что RecordLayouts.a2l файл находится в той же папке.
coder.asap2.export("sldemo_fuelsys","IncludeAllRecordLayouts",false) не генерирует отдельный файл размещений записи, но включает размещения записи типов данных экспортируемых объектов данных в файле ASAP2.
/begin RECORD_LAYOUT Scalar_FLOAT32_IEEE
FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_FLOAT64_IEEE
FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
...Совет
В файле ASA2P, чтобы сохранить форму интерполяционной таблицы, которая используется в качестве аргумента модели, это, рекомендуют иметь блок LookUp Table в модели, на которую ссылаются, и передать Lookup table object от топ-модели как значение параметров экземпляра.