Можно передать параметры S-функции в начале и во время моделирования, с помощью поля S-параметров-функции диалогового окна Block Parameters. Такие параметры называются параметрами диалогового окна, чтобы отличить их от параметров периода выполнения, созданных S-функцией, чтобы упростить генерацию кода (см., Создают и Параметры периода выполнения S-функции Обновления).
Вы не можете использовать Образцовый Проводник, диалоговое окно S-function Block Parameters или маску, чтобы настроить параметры исходной S-функции, i. e., S-функция, которая имеет выходные параметры, но никакие входные параметры, в то время как моделирование запускается. Для получения дополнительной информации смотрите Мелодию и Эксперимент с Блочными Значениями параметров.
Механизм Simulink® хранит значения параметров диалогового окна в S-функции структура SimStruct
. Используйте методы обратного вызова S-функции и макросы SimStruct
, чтобы получить доступ и проверить параметры и использовать их, чтобы вычислить S-функцию вывод. Чтобы использовать диалоговые параметры в вашей S-функции C, выполните следующие шаги, когда вы создадите S-функцию:
Определите порядок, в котором параметры должны быть заданы в диалоговом окне блока.
В функции mdlInitializeSizes
используйте макрос
, чтобы сказать механизм Simulink, сколько параметров S-функция принимает. Задайте ssSetNumSFcnParams
S
в качестве первого аргумента и количества параметров диалогового окна в качестве второго аргумента. Если ваша 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
, содержащий параметр. Можно использовать
, чтобы получить тип данных параметра. Также можно использовать ssGetDTypeIdFromMxArray
ssGetSFcnParamDataType
, чтобы получить тип данных параметра путем определения индекса параметра.
Например, в
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-параметров-функции диалогового окна 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-параметров-функции диалогового окна S-Function Block Parameters. Первое соответствует первому ожидаемому параметру,
BASE_ADDRESS_PRM(S)
. Второе соответствует следующему ожидаемому параметру и так далее.
Функция
mdlInitializeSizes
содержит этот оператор.
ssSetNumSFcnParams(S, 4);
Настраиваемые параметры
Диалоговые параметры могут быть или настраиваемыми или ненастраиваемыми. Настраиваемый параметр является параметром, который может изменить пользователь, в то время как моделирование запускается.
Примечание
Параметры диалогового окна являются настраиваемыми по умолчанию. Тем не менее, это - хорошая методика программирования, чтобы установить приспособляемость каждого параметра, даже те, которые являются настраиваемыми. Если вы включаете необходимые обновления S-функции диагностики моделирования, механизм Simulink выпускает диагностику каждый раз, когда это сталкивается с S-функцией, которой не удается задать приспособляемость всех ее параметров.
Метод mdlCheckParameters
позволяет вам подтвердить изменения в настраиваемых параметрах во время моделирования. Механизм вызывает метод mdlCheckParameters
каждый раз, когда вы изменяете значения параметров во время цикла моделирования. Этот метод должен проверить параметры диалогового окна S-функции, чтобы гарантировать, что изменения допустимы.
Дополнительный метод обратного вызова mdlProcessParameters
позволяет S-функции обрабатывать изменения в настраиваемых параметрах. Механизм вызывает этот метод, только если допустимые изменения параметра произошли в предыдущем временном шаге. Типичное использование этого метода должно выполнить вычисления, которые зависят только от значений параметров и следовательно должны быть вычислены только, когда значения параметров изменяются. Метод может кэшировать результаты вычислений параметра в векторах работы или, предпочтительно, как параметры периода выполнения (см., Создают и Параметры периода выполнения S-функции Обновления).
Используя настраиваемые параметры в S-функции C
В S-функции C используйте макро-ssSetSFcnParamTunable
в mdlInitializeSizes
, чтобы задать приспособляемость каждого параметра диалогового окна S-функции. Код ниже взят от функции mdlInitializeSizes
в примере sfun_runtime1.c
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 */
Примечание
Стандартная программа mdlInitializeSizes
S-функции вызывает метод mdlCheckParameters
, чтобы гарантировать, что начальные значения параметров допустимы.
Настройка параметров в режиме external mode
Когда вы настройки параметров во время моделирования, механизм Simulink вызывает S-функцию метод mdlCheckParameters
, чтобы подтвердить изменения и затем метод mdlProcessParameters
S-функций, чтобы дать S-функции шанс обработать параметры в некотором роде. Механизм также вызывает эти методы при выполнении в режиме external mode, но это передает необработанные изменения в цели S-функции. Таким образом, если важно, чтобы ваш параметр процесса S-функции изменился, необходимо создать файл Компилятора выходного языка (TLC), который встраивает S-функцию, включая ее код обработки параметра, во время процесса генерации кода. Для получения информации о встраивании S-функций см. “S-функции Встраивания” в документации Компилятора Выходного языка Simulink Coder™.
Смотрите также
Похожие темы
Была ли эта тема полезной?