Можно передать параметры в S-функцию в начале и во время симуляции, используя поле параметров S-функции диалогового окна Параметров блоков. Такие параметры называются параметрами диалогового окна, чтобы отличить их от параметров во время выполнения, созданных S-функцией для облегчения генерации кода (см. Создание и обновление параметров во время выполнения S-функции).
Примечание
Вы не можете использовать Model Explorer, диалоговое окно Блок S-function Parameters или маску, чтобы настроить параметры исходной S-функции, то есть S-функции, которая имеет выходы, но нет входов, во время симуляции. Для получения дополнительной информации смотрите Настройка и Эксперимент с Параметрами блоков значениями.
Simulink® двигатель хранит значения параметров диалогового окна в S-функции SimStruct
структура. Используйте методы и SimStruct
коллбэка S-функции макросы для доступа и проверки параметров и использования их для вычисления выхода S-функции. Чтобы использовать параметры диалога в вашей S-функции C, выполните следующие шаги при создании S-функции:
Определите порядок, в котором параметры должны быть заданы в диалоговом окне блока.
В mdlInitializeSizes
function, использовать
макрос, чтобы сообщить движку 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 является первой позицией) в качестве второго аргумента. The 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-Function Parameters диалогового окна Блок S-function 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. Первый соответствует первому ожидаемому параметру, BASE_ADDRESS_PRM(S)
. Второй соответствует следующему ожидаемому параметру и так далее.
The mdlInitializeSizes
функция содержит этот оператор.
ssSetNumSFcnParams(S, 4);
Параметры диалогового окна могут быть как настраиваемыми, так и неотключаемыми. Настраиваемый параметр является параметром, который пользователь может изменить во время симуляции.
Примечание
Параметры диалогового окна настраиваются по умолчанию. Тем не менее, это хорошая методика программирования, чтобы задать настраиваемость каждого параметра, даже тех, которые настраиваются. Если вы включите S-function upgrades needed диагностики симуляции, механизм Simulink выдает диагностику каждый раз, когда он встречается с S-функцией, которая не задает настраиваемость всех ее параметров.
The mdlCheckParameters
метод позволяет вам подтвердить изменения настраиваемых параметров во время симуляции. Механизм вызывает mdlCheckParameters
метод всякий раз, когда вы изменяете значения параметров во время цикла симуляции. Этот метод должен проверить параметры диалогового окна S-функции, чтобы убедиться, что изменения действительны.
Необязательный mdlProcessParameters
метод коллбэка позволяет S-функции обрабатывать изменения настраиваемых параметров. Механизм вызывает этот метод только в том случае, если на предыдущем временном шаге произошли допустимые изменения параметра. Типичным использованием этого метода является выполнение расчетов, которые зависят только от значений параметров и, следовательно, должны вычисляться только при изменении значений параметров. Метод может кэшировать результаты расчетов параметров в рабочих векторах или, предпочтительно, в качестве параметров во время выполнения (см. Создание и обновление параметров выполнения S-функции).
В функции C S используйте макрос
в 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-функцию mdlCheckParameters
метод для проверки изменений, а затем S-функций 'mdlProcessParameters
метод, чтобы дать S-функции шанс обработать параметры каким-либо образом. Двигатель также вызывает эти методы при запуске во режиме external mode, но он передает необработанные изменения в цель S-функции. Таким образом, если важно, чтобы ваш S-function обработал изменение параметра, вам нужно создать файл Target Language Compiler (TLC), который вводит S-функцию, включая ее код обработки параметров, в процессе генерации кода. Для получения информации о встраивании S-функций смотрите «Встраивание S-функций» в документации Simulink Coder™ Target Language Compiler.