Можно передать параметры S-функции в начале и во время моделирования, используя поле S-параметров в диалоговом окне «Параметры блока». Такие параметры называются диалоговыми параметрами, чтобы отличать их от параметров времени выполнения, созданных S-функцией, чтобы облегчить генерацию кода (см. Создание и обновление параметров времени выполнения S-функции).
Примечание
Обозреватель моделей, диалоговое окно Параметры блока S-функции (S-function Block Parameters) или маска не могут использоваться для настройки параметров исходной S-функции, т.е. S-функции, которая имеет выходы, но не имеет входов, во время выполнения моделирования. Дополнительные сведения см. в разделе Настройка и эксперимент со значениями параметров блока.
Модуль Simulink ® сохраняет значения параметров диалогового окна в S-функции.SimStruct структура. Используйте методы обратного вызова S-функции и SimStruct макросы для доступа и проверки параметров и их использования для вычисления выходных данных S-функции. Чтобы использовать диалоговые параметры в C S-функции, выполните следующие шаги при создании S-функции:
Определите порядок указания параметров в диалоговом окне блока.
В mdlInitializeSizes , используйте макро, чтобы сообщить подсистеме Simulink, сколько параметров принимает S-функция. Определить ssSetNumSFcnParamsS в качестве первого аргумента и количество параметров диалогового окна в качестве второго аргумента. Если функция S реализует mdlCheckParameters способ, mdlInitializeSizes подпрограмма должна вызывать mdlCheckParameters для проверки достоверности исходных значений параметров. Например, mdlInitializeSizes функция в sfun_runtime1.c начинается со следующего кода.
ssSetNumSFcnParams(S, NPARAMS); /* Number of expected parameters */
#if defined(MATLAB_MEX_FILE)
if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) {
mdlCheckParameters(S);
if (ssGetErrorStatus(S) != NULL) {
return;
}
} else {
return; /* Parameter mismatch reported by the Simulink engine*/
}
#endifДоступ к параметрам диалогового окна в S-функции с помощью ssGetSFcnParam макро.
Определить S в качестве первого аргумента и относительное положение параметра в списке, введенном в диалоговом окне (0 - первая позиция) в качестве второго аргумента. ssGetSFcnParam макрос возвращает указатель на mxArray содержащий параметр. Вы можете использовать для получения типа данных параметра. Кроме того, можно использовать ssGetDTypeIdFromMxArrayssGetSFcnParamDataType для получения типа данных параметра путем указания индекса параметра.
Например, в sfun_runtime1.c, следующее #define операторы в начале S-функции задают порядок трех параметров диалогового окна и получают доступ к их значениям в диалоговом окне блока.
#define SIGNS_IDX 0 #define SIGNS_PARAM(S) ssGetSFcnParam(S,SIGNS_IDX) /* First parameter */ #define GAIN_IDX 1 #define GAIN_PARAM(S) ssGetSFcnParam(S,GAIN_IDX) /* Second parameter */ #define OUT_IDX 2 #define OUT_PARAM(S) ssGetSFcnParam(S,OUT_IDX) /* Third parameter */
При выполнении моделирования необходимо указать параметры в поле S-Function parameters диалогового окна S-Function Block Parameters в том же порядке, в котором они были определены на шаге 1. В качестве значения параметра можно ввести любое допустимое выражение MATLAB ®, включая литеральные значения, имена переменных рабочей области, вызовы функций или арифметические выражения. Модуль Simulink вычисляет выражение и передает его значение S-функции.
В качестве другого примера следующий код является частью S-функции драйвера устройства. Используются четыре входных параметра: BASE_ADDRESS_PRM, GAIN_RANGE_PRM, PROG_GAIN_PRM, и NUM_OF_CHANNELS_PRM. Код использует #define в верхней части S-функции, чтобы связать определенные входные аргументы с именами параметров.
/* Input Parameters */ #define BASE_ADDRESS_PRM(S) ssGetSFcnParam(S, 0) #define GAIN_RANGE_PRM(S) ssGetSFcnParam(S, 1) #define PROG_GAIN_PRM(S) ssGetSFcnParam(S, 2) #define NUM_OF_CHANNELS_PRM(S) ssGetSFcnParam(S, 3)
При выполнении моделирования введите четыре имени или значения переменных в поле S-function parameters диалогового окна S-Function Block Parameters. Первый соответствует первому ожидаемому параметру, BASE_ADDRESS_PRM(S). Второй соответствует следующему ожидаемому параметру и так далее.
mdlInitializeSizes функция содержит этот оператор.
ssSetNumSFcnParams(S, 4);
Параметры диалога могут быть настраиваемыми или не настраиваемыми. Настраиваемый параметр - это параметр, который пользователь может изменить во время выполнения моделирования.
Примечание
Параметры диалогового окна по умолчанию настраиваются. Тем не менее, рекомендуется устанавливать настраиваемость каждого параметра, даже настраиваемого. Если включить необходимые обновления S-функции диагностики моделирования, модуль Simulink будет выполнять диагностику всякий раз, когда он встретит S-функцию, которая не сможет задать настраиваемость всех своих параметров.
mdlCheckParameters позволяет проверить изменения настраиваемых параметров во время моделирования. Двигатель вызывает mdlCheckParameters при каждом изменении значений параметров во время цикла моделирования. Этот метод должен проверять параметры диалогового окна S-функции, чтобы убедиться, что изменения действительны.
Дополнительное mdlProcessParameters метод обратного вызова позволяет S-функции обрабатывать изменения настраиваемых параметров. Механизм вызывает этот метод только в том случае, если на предыдущем шаге времени произошли допустимые изменения параметров. Типичным использованием этого способа является выполнение вычислений, которые зависят только от значений параметров и, следовательно, должны вычисляться только при изменении значений параметров. Метод может кэшировать результаты вычислений параметров в рабочих векторах или, предпочтительно, в качестве параметров времени выполнения (см. Создание и обновление параметров времени выполнения S-функции).
В C S-функции используйте макрос в ssSetSFcnParamTunablemdlInitializeSizes для указания настраиваемости каждого параметра диалогового окна S-функции. Код ниже взят из mdlInitializeSizes функция в примере sfun_runtime1.c. Код сначала устанавливает три параметра диалогового окна S-функции перед вызовом mdlCheckParameters. Если проверка параметров пройдена, задается возможность настройки трех параметров диалогового окна S-функции.
ssSetNumSFcnParams(S, 3); /* Three dialog box parameters*/
#if defined(MATLAB_MEX_FILE)
if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) {
mdlCheckParameters(S);
if (ssGetErrorStatus(S) != NULL) {
return;
}
} else {
return; /* Parameter mismatch reported by the Simulink engine*/
}
#endif
ssSetSFcnParamTunable(S,GAIN_IDX,true); /* Tunable */
ssSetSFcnParamTunable(S,SIGNS_IDX,false); /* Not tunable */
ssSetSFcnParamTunable(S,OUT_IDX,false); /* Not tunable */Примечание
S-функция mdlInitializeSizes подпрограмма вызывает mdlCheckParameters чтобы убедиться, что исходные значения параметров являются действительными.
При настройке параметров во время моделирования модуль Simulink вызывает S-функцию mdlCheckParameters метод для проверки изменений, а затем S-функций mdlProcessParameters способ предоставления S-функции возможности каким-либо образом обработать параметры. Механизм также вызывает эти методы при работе во внешнем режиме, но передает необработанные изменения цели S-функции. Таким образом, если необходимо изменить параметр процесса S-функции, необходимо создать файл TLC (Target Language Compiler), который встроил бы S-функцию, включая ее код обработки параметров, во время процесса создания кода. Сведения о встраивании S-функций см. в разделе «Встраивание S-функций» в документации компилятора языка Simulink Coder™ Target.