Можно передать параметры S-функции в начале и во время симуляции, с помощью поля S-параметров-функции диалогового окна Block Parameters. Такие параметры называются параметрами диалогового окна, чтобы отличить их от параметров периода выполнения, созданных S-функцией, чтобы упростить генерацию кода (см., Создают и Параметры периода выполнения S-функции Обновления).
Примечание
Вы не можете использовать Model Explorer, диалоговое окно 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-function upgrades needed, механизм Simulink выпускает диагностику каждый раз, когда это сталкивается с S-функцией, которой не удается задать приспособляемость всех ее параметров.
mdlCheckParameters
метод позволяет вам подтвердить изменения в настраиваемых параметрах во время симуляции. Механизм вызывает mdlCheckParameters
метод каждый раз, когда вы изменяете значения параметров во время цикла симуляции. Этот метод должен проверять параметры диалогового окна S-функции, чтобы гарантировать, что изменения допустимы.
Дополнительный mdlProcessParameters
метод коллбэка позволяет S-функции обрабатывать изменения в настраиваемых параметрах. Механизм вызывает этот метод, только если допустимые изменения параметра произошли в предыдущем временном шаге. Типичное использование этого метода должно выполнить расчеты, которые зависят только от значений параметров и следовательно должны быть вычислены только, когда значения параметров изменяются. Метод может кэшировать результаты расчетов параметра в векторах работы или, предпочтительно, как параметры периода выполнения (см., Создают и Параметры периода выполнения S-функции Обновления).
В S-функции C используйте макрос
в ssSetSFcnParamTunable
mdlInitializeSizes
задавать приспособляемость каждого параметра диалогового окна 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-function mdlCheckParameters
метод, чтобы подтвердить изменения и затем mdlProcessParameters
S-функций метод, чтобы дать S-функции шанс обработать параметры в некотором роде. Механизм также вызывает эти методы при выполнении в режиме external mode, но это передает необработанные изменения в цели S-функции. Таким образом, если важно, чтобы ваш параметр процесса S-функции изменился, необходимо создать файл Компилятора выходного языка (TLC), который встраивает S-функцию, включая ее код обработки параметра, во время процесса генерации кода. Для получения информации о встраивании S-функций см. “S-функции Встраивания” в документации Компилятора Выходного языка Simulink Coder™.