Калибровочный параметр - это значение, хранящееся в глобальной памяти, которое алгоритм считывает для использования в вычислениях, но не записывает. Параметры калибровки настраиваются, поскольку можно изменить сохраненное значение во время выполнения алгоритма. Параметры калибровки создаются таким образом, чтобы можно было:
Определите оптимальное значение параметра путем настройки параметров и контроля значений сигналов во время выполнения.
Эффективная адаптация алгоритма к различным условиям выполнения путем перезаписи значения параметра, хранящегося в памяти. Например, можно использовать один и тот же алгоритм управления для нескольких транспортных средств различной массы путем сохранения различных значений параметров в блоке управления двигателем каждого транспортного средства.
В Simulink ® создайте Simulink.Parameter объект для представления калибровочного параметра. Объект параметра используется для задания значений параметров блока, например параметра усиления блока усиления. Для управления представлением объекта параметра в созданном коде к объекту применяется класс хранения.
Чтобы сделать параметры блока доступными в сгенерированном коде по умолчанию, например для быстрого прототипирования, установите для параметра Поведение по умолчанию (см. раздел Поведение по умолчанию) значение Tunable. Дополнительные сведения см. в разделе Сохранение переменных в сгенерированном коде.
В этом примере показано, как создать настраиваемые данные параметров путем представления параметров блоков в качестве глобальных переменных в сгенерированном коде.
Настройка параметра блока с помощью объекта параметра
Открыть пример модели rtwdemo_paraminline и настройте его для отображения сгенерированных имен блоков.
load_system('rtwdemo_paraminline') set_param('rtwdemo_paraminline','HideAutomaticNames','off') open_system('rtwdemo_paraminline')

На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).
В Редакторе данных модели (Model Data Editor) проверьте вкладку Параметры (Parameters).
В модели щелкните значок G1 Блок усиления. Редактор данных модели выделяет строку, соответствующую параметру усиления блока.
В столбце «Значение редактора данных модели» измените значение коэффициента усиления с 2 кому myGainParam.
Рядом с myGainParamнажмите кнопку действия (с тремя вертикальными точками) и выберите «Создать».
В диалоговом окне «Создание нового блока данных» установите для параметра «Значение» значение Simulink.Parameter(2). Щелкните Создать (Create). A Simulink.Parameter объект myGainParam сохраняет значение параметра, 2, в рабочем пространстве модели.
В диалоговом окне myGainParam на вкладке Создание кода щелкните Настроить в приложении Coder.
В редакторе сопоставлений кодов задайте класс хранения myGainParam кому ExportedGlobal. Этот класс хранения приводит к отображению объекта параметра в созданном коде в качестве настраиваемой глобальной переменной.
Кроме того, чтобы создать объект параметра и настроить модель, используйте следующие команды в командной строке:
set_param('rtwdemo_paraminline/G1','Gain','myGainParam') mws = get_param('rtwdemo_paraminline', 'modelworkspace'); mws.assignin('myGainParam',Simulink.Parameter(2)); cm = coder.mapping.utils.create('rtwdemo_paraminline'); setModelParameter(cm,'myGainParam','StorageClass','ExportedGlobal');
Используйте Редактор данных модели (Model Data Editor) для создания объекта параметра, myOtherGain, для G2 Блок усиления. Применить класс хранения ExportedGlobal.
Также можно использовать следующие команды в командной строке:
set_param('rtwdemo_paraminline/G2','Gain','myOtherGain') mws.assignin('myOtherGain',Simulink.Parameter(-2)); setModelParameter(cm,'myOtherGain','StorageClass','ExportedGlobal');
Создание и проверка кода
Создайте код из модели.
slbuild('rtwdemo_paraminline')
### Starting build procedure for: rtwdemo_paraminline ### Successful completion of build procedure for: rtwdemo_paraminline Build Summary Top model targets built: Model Action Rebuild Reason ==================================================================================================== rtwdemo_paraminline Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 9.502s
Созданный файл rtwdemo_paraminline.h содержит extern объявления глобальных переменных myGainParam и myOtherGain. Можно включить (#include), чтобы код мог считывать и записывать значение переменной во время выполнения.
file = fullfile('rtwdemo_paraminline_grt_rtw','rtwdemo_paraminline.h'); rtwdemodbtype(file,... 'extern real_T myGainParam;','Referenced by: ''<Root>/G2''',1,1)
extern real_T myGainParam; /* Variable: myGainParam
* Referenced by: '<Root>/G1'
*/
extern real_T myOtherGain; /* Variable: myOtherGain
* Referenced by: '<Root>/G2'
Файл rtwdemo_paraminline.c выделяет память для и инициализирует myGainParam и myOtherGain.
file = fullfile('rtwdemo_paraminline_grt_rtw','rtwdemo_paraminline.c'); rtwdemodbtype(file,... '/* Exported block parameters */','Referenced by: ''<Root>/G2''',1,1)
/* Exported block parameters */
real_T myGainParam = 2.0; /* Variable: myGainParam
* Referenced by: '<Root>/G1'
*/
real_T myOtherGain = -2.0; /* Variable: myOtherGain
* Referenced by: '<Root>/G2'
Сгенерированный алгоритм кода в модели step функции использует myGainParam и myOtherGain для расчетов.
rtwdemodbtype(file,... '/* Model step function */','/* Model initialize function */',1,0)
/* Model step function */
void rtwdemo_paraminline_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Gain: '<Root>/G1'
* Gain: '<Root>/G2'
* Inport: '<Root>/In1'
* Sum: '<Root>/Sum'
*/
rtwdemo_paraminline_Y.Out1 = myGainParam * rtwdemo_paraminline_U.In1 +
myOtherGain * -75.0;
}
Если для задания значения параметра блока используется числовая переменная, применить класс хранения к переменной невозможно. В качестве обходного решения можно преобразовать переменную в объект параметра, а затем применить к объекту класс хранения. Чтобы преобразовать переменную в объект параметра, выберите один из следующих методов:
На вкладке Параметры редактора данных модели (Model Data Editor Parameters) с параметром Изменить вид (Change view), установленным на Codeнайдите строку, соответствующую переменной. В столбце «Класс хранилища» в раскрывающемся списке выберите Convert to parameter object. Редактор данных модели преобразует переменную в объект параметра. Затем используйте столбец Класс хранения, чтобы применить класс хранения к объекту.
Этот метод можно также использовать в обозревателе моделей.
Используйте мастер объектов данных (см. раздел Создание объектов данных для модели с помощью мастера объектов данных). В мастере установите флажок Параметры. Мастер преобразует переменные в объекты. Затем примените классы хранения к объектам, например, используя Редактор данных модели (Model Data Editor) или Обозреватель моделей (Model Explorer).
В этом примере показано, как создать класс хранения, который дает калибровочный параметр в сгенерированном коде. Класс хранения вызывает каждый объект параметра (Simulink.Parameter), чтобы выглядеть как глобальная переменная со специальными украшениями, такими как ключевые слова и прагматики.
В созданном коде параметры калибровки должны отображаться как глобальные переменные, определенные в файле с именем calPrms.c и объявлены в calPrms.h. Определения переменных должны выглядеть следующим образом:
#pragma SEC(CALPRM) const volatile float param1 = 3.0F; const volatile float param2 = 5.0F; const volatile float param3 = 7.0F; #pragma SEC()
Переменные используют ключевые слова const и volatile. pragma #pragma SEC(CALPRM) управляет размещением переменных в памяти. Для реализации прагматики определения переменных должны отображаться в смежном блоке кода.
Кроме того, созданный код должен содержать ASAP2 (a2l) описание каждого параметра.
Теперь создайте пакет в текущей папке, скопировав пример пакета +SimulinkDemos. В пакете хранятся определения Parameter и Signal классы, которые позже используются для применения класса хранения к элементам данных в моделях. Позже в пакете также хранятся определения класса хранения и связанного раздела памяти.
Установите текущую папку MATLAB ® в доступное для записи расположение.
Копировать +SimulinkDemos в текущую папку. Назовите копию +myPackage.
copyfile(fullfile(matlabroot,... 'toolbox','simulink','simdemos','dataclasses','+SimulinkDemos'),... '+myPackage','f')
Навигация внутри +myPackage папка в файл Signal.m для редактирования определения Signal класс.
Раскомментируйте methods раздел, определяющий метод setupCoderInfo. В вызове функции useLocalCustomStorageClasses, заменить 'packageName' с 'myPackage'. По завершении раздел выглядит следующим образом:
methods
function setupCoderInfo(h)
% Use custom storage classes from this package
useLocalCustomStorageClasses(h, 'myPackage');
end
end % methodsСохраните и закройте файл.
Навигация внутри +myPackage папка в файл Parameter.m для редактирования определения Parameter класс. Раскомментируйте methods раздел, определяющий метод setupCoderInfo и заменить 'packageName' с 'myPackage'.
Сохраните и закройте файл.
Установите текущую папку в папку, содержащую папку пакета +myPackage.
Откройте конструктор классов настраиваемых хранилищ.
cscdesigner('myPackage')В конструкторе пользовательских классов хранения на вкладке «Разделы памяти» нажмите кнопку «Создать».
Для нового раздела памяти задайте свойства в соответствии с таблицей.
| Собственность | Стоимость |
|---|---|
| Имя | CalMem |
| Заявления окружают | Group of variables |
| Предварительный отчет | #pragma SEC(CALPRM) |
| Отчет о проводке | #pragma SEC() |
| Является констом | Выбрать |
| Волатильно | Выбрать |
Нажмите кнопку «Применить».
На вкладке Пользовательский класс хранилища нажмите кнопку Создать.
Для нового класса хранения задайте свойства в соответствии с таблицей.
| Собственность | Стоимость |
|---|---|
| Имя | CalParam |
| Для сигналов | Ясно |
| Объем данных | Exported |
| Файл заголовка | calPrms.h |
| Файл определения | calPrms.c |
| Раздел памяти | CalMem |
Нажмите кнопку ОК. В ответ на сообщение о сохранении изменений нажмите кнопку Да.
myPackage.ParameterЧтобы упростить применение класса хранения, используйте обозреватель моделей, чтобы изменить объект параметра по умолчанию с Simulink.Parameter кому myPackage.Parameter.
В командной строке откройте Обозреватель моделей.
daexplr
На панели «Иерархия моделей» обозревателя моделей выберите «Базовая рабочая область».
На панели инструментов Обозревателя моделей (Model Explorer) щелкните стрелку рядом с кнопкой Добавить параметр Simulink (Add Simulink Parameter). В раскрывающемся списке выберите Настроить списки классов.
В диалоговом окне Настроить списки классов в разделе Классы параметров установите флажок рядом с myPackage.Parameter. Нажмите кнопку ОК.
На панели инструментов Обозревателя моделей (Model Explorer) щелкните стрелку рядом с кнопкой Добавить параметр Simulink (Add Simulink Parameter). В раскрывающемся списке выберите myPackage Parameter.
A myPackage.Parameter появляется в базовой рабочей области. Этот объект можно удалить.
Теперь при использовании таких инструментов, как Редактор данных модели (Model Data Editor) для создания объектов параметров, Simulink создает myPackage.Parameter объекты вместо Simulink.Parameter объекты.
В примере модели rtwdemo_roll, BasicRollMode подсистема представляет контроллер PID. Сконфигурируйте параметры P, I и D в качестве параметров калибровки.
Откройте модель.
rtwdemo_roll
В модели перейдите в папку BasicRollMode подсистема.
В коллекции «Приложения» щелкните Встроенный кодер.
Под блок-схемой откройте Редактор данных модели (Model Data Editor), выбрав вкладку Редактор данных модели (Model Data Editor).
В Редакторе данных модели (Model Data Editor) выберите вкладку Параметры (Parameters) и обновите блок-схему.
Теперь таблица данных содержит строки, которые соответствуют переменным рабочего пространства, используемым блоками усиления (которые представляют параметры P, I и D контроллера).
В Редакторе данных модели (Model Data Editor) рядом с полем Содержимое фильтра (Filter contents) активизируйте Фильтр (Filter) с помощью кнопки выбора.
В модели выберите три блока усиления.
В поле Содержимое фильтра введите model workspace.
Переменные, используемые блоками усиления, находятся в рабочем пространстве модели.
В таблице данных выберите три строки и в столбце Класс хранилища для строки выберите Convert to parameter object.
Редактор данных модели преобразует переменные рабочего пространства в myPackage.Parameter объекты. Теперь можно применить класс хранения к объектам.
В столбце Класс хранилища для строки выберите CalParam.
Настройка модели для генерации a2l файлы. Выберите Параметры конфигурации > Создание кода > Интерфейс > ASAP2 интерфейс.
Создайте код из модели.
В отчете о создании кода проверьте calPrms.c файл. Файл определяет параметры калибровки.
/* Exported data definition */ #pragma SEC(CALPRM) /* Definition for custom storage class: CalParam */ const volatile real32_T dispGain = 0.75F; const volatile real32_T intGain = 0.5F; const volatile real32_T rateGain = 2.0F; #pragma SEC()
Файл calPrms.h объявляет параметры.
Проверка файла интерфейса rtwdemo_roll.a2l. Файл содержит информацию о каждом параметре, например, для dispGain.
/begin CHARACTERISTIC /* Name */ dispGain /* Long Identifier */ "" /* Type */ VALUE /* ECU Address */ 0x0000 /* @ECU_Address@dispGain@ */ /* Record Layout */ Scalar_FLOAT32_IEEE /* Maximum Difference */ 0 /* Conversion Method */ rtwdemo_roll_CM_single /* Lower Limit */ -3.4E+38 /* Upper Limit */ 3.4E+38 /end CHARACTERISTIC
Можно создать код, инициализирующий настраиваемый параметр со значением, вычисляемым из некоторых системных констант (макросов). Например, можно создать этот код, который инициализирует настраиваемый параметр totalVol со значением, вычисленным на основе макросов numVessels и vesInitVol:
#define numVessels 16 #define vesInitVol 18.2 double totalVol = numVessels * vesInitVol;
Этот метод инициализации сохраняет математическую связь между настраиваемым параметром и системными константами, что может сделать сгенерированный код более читаемым и простым в обслуживании. Чтобы создать этот код:
Создайте объекты параметров, представляющие системные константы.
numVessels = Simulink.Parameter(16); vesInitVol = Simulink.Parameter(18.2);
Настройка объектов для использования класса хранения Define, что дает макрос в сгенерированном коде.
numVessels.CoderInfo.StorageClass = 'Custom'; numVessels.CoderInfo.CustomStorageClass = 'Define'; vesInitVol.CoderInfo.StorageClass = 'Custom'; vesInitVol.CoderInfo.CustomStorageClass = 'Define';
Создайте другой объект параметра, представляющий настраиваемый параметр. Настройка объекта для использования класса хранения ExportedGlobal, что дает глобальную переменную в сгенерированном коде.
totalVol = Simulink.Parameter;
totalVol.CoderInfo.StorageClass = 'ExportedGlobal';Установка значения totalVol с помощью выражения numVessels * vesInitVol. Чтобы указать, что созданный код сохраняет выражение, используйте slexpr функция.
totalVol.Value = slexpr('numVessels * vesInitVol');Использовать totalVol для задания значений параметров блока в модели. Код, генерируемый на основе модели, инициализирует настраиваемый параметр значением, основанным на системных константах.
Дополнительные сведения и ограничения по использованию выражения для задания значения Simulink.Parameter см. раздел Задание значения переменной с помощью математического выражения.
Можно создать объект параметра в базовой рабочей области, рабочей области модели или словаре данных. Однако при завершении сессии MATLAB переменные в базовой рабочей области удаляются. Сведения об определении места хранения объектов параметров и других переменных, используемых моделью, см. в разделе Определение места хранения переменных и объектов для моделей Simulink.
Расположение объекта параметра может повлиять на размещение файла соответствующего определения данных в сгенерированном коде.
При размещении объекта параметра в базовой рабочей области или словаре данных генератор кода предполагает, что соответствующие данные параметра (например, глобальная переменная) принадлежат системе, из которой создается код, а не определенному компоненту в системе. Например, если модель в иерархии ссылок на модель использует объект параметра с классом хранения, отличным от Autoопределение данных появляется в коде, созданном для верхней модели в иерархии, а не в коде, созданном для модели, использующей объект.
Однако при использовании Embedded Coder ® некоторые классы хранения позволяют указать имя модели, которой принадлежит часть данных. При указании модели владельца данные определяются кодом, сгенерированным для этой модели. Дополнительные сведения о владении данными см. в разделе Управление размещением глобальных определений и деклараций данных в созданных файлах (встроенный кодер).
При размещении объекта параметра в рабочем пространстве модели генератор кода предполагает, что данные принадлежат модели. При создании кода из ссылочной иерархии, включающей содержащую модель, определение данных появляется в коде, созданном для содержащей модели.
Дополнительные сведения о владении данными см. в разделе Управление размещением глобальных определений и деклараций данных в созданных файлах (встроенный кодер).
Если применяется класс хранения, отличный от Auto для объекта параметра объект отображается в сгенерированном коде как глобальный символ. Поэтому в иерархии ссылок на модели два таких объекта в различных рабочих пространствах модели или словарях не могут иметь одинаковых имен. Имя каждого объекта должно быть уникальным в иерархии модели.
Однако при наличии встроенного кодера можно использовать класс хранения FileScope для предотвращения конфликтов имен между объектами параметров в различных рабочих пространствах модели. См. раздел Организация данных параметров в структуру с использованием класса хранилища Struct (встроенный кодер).
Если вы храните AUTOSAR.Parameter в рабочей области модели генератор кода игнорирует класс хранения, указанный для объекта.
При настройке значения параметра во время выполнения алгоритма выполняется мониторинг или захват значений выходного сигнала для анализа результатов настройки. Для представления сигналов в сгенерированном коде в качестве доступных данных можно использовать такие методы, как контрольные точки и классы хранения. См. раздел Сохранение переменных в сгенерированном коде.
Сгенерированный код можно настроить таким образом, чтобы он включал:
Интерфейс прикладного программирования (API) C для настройки параметров независимо от внешнего режима. Созданный код включает дополнительный код, чтобы можно было написать собственный код для доступа к значениям параметров. См. раздел Обмен данными между сгенерированным и внешним кодом с помощью C API.
API компилятора целевого языка для настройки параметров независимо от внешнего режима. См. раздел Функции параметров.
Рекомендуется задавать минимальные и максимальные значения для настраиваемых параметров.
Можно указать следующие минимальные и максимальные значения:
В диалоговом окне блока, использующем объект параметра. Этот метод используется для сохранения минимальной и максимальной информации в модели.
С помощью свойств Simulink.Parameter , который используется для установки значения параметра. Этот метод используется для хранения минимальной и максимальной информации вне модели.
Дополнительные сведения см. в разделе Указание минимального и максимального значений параметров блока.
| Цель | Соображения и дополнительная информация |
|---|---|
Применение квалификаторов типа склада const и volatile | Если у вас есть Embedded Coder, для создания квалификаторов типов хранения см. раздел Защита глобальных данных с помощью const и volative Type Qualifiers (Embedded Coder). |
Предотвращение конфликтов имен между параметрами в различных компонентах путем применения ключевого слова static | При наличии встроенного кодера используйте класс хранения |
Создать ASAP2 (a2l) описание |
Можно создать |
| Создание описания AUTOSAR XML (ARXML) | При наличии встроенного кодера можно создать файл ARXML, описывающий параметры калибровки, используемые моделями, настроенными для стандарта AUTOSAR. См. раздел Параметры калибровки и таблицы поиска модели AUTOSAR (блок AUTOSAR). |
| Сохранить данные таблицы поиска для калибровки | Для хранения данных таблицы поиска для калибровки в соответствии со стандартами ASAP2 или AUTOSAR (например, STD_AXIS, COM_AXIS или CURVE) можно использовать Однако применяются некоторые ограничения. Посмотрите Дополнительные сведения см. в разделах Определение ASAP2 информации для параметров и сигналов и Настройка таблиц поиска для измерений и калибровки AUTOSAR (блок AUTOSAR). |
| Использование pragmas для хранения данных параметров в определенных ячейках памяти | Если у вас есть лицензия Embedded Coder, для создания кода, включающего пользовательские прагматики, используйте классы хранения и разделы памяти. См. раздел Управление данными и размещением функций в памяти путем вставки прагматиков (встроенный кодер). |
Simulink.Breakpoint | Simulink.LookupTable | Simulink.Parameter