Задайте размер вектора режима блока
int_T ssSetNumModes(SimStruct *S, int_T nModes)
S
SimStruct, представляющий Блок s-function.
nModes
Размер вектора режима для блока представлен S
. Допустимыми значениями является 0
, положительное целое число или DYNAMICALLY_SIZED
.
Количество режимов, заданных nModes
или -1
, если DYNAMICALLY_SIZED
.
Устанавливает размер вектора режима блока к nModes
. Элементы вектора режима инициализируются к NULL
, пока значения не присвоены с помощью ssSetModeVectorValue
, или через указатель получил fromssGetModeVector
.
Если nModes
является DYNAMICALLY_SIZED
, можно задать истину (положительное целое число) ширина в mdlSetWorkWidths
; в противном случае используемая ширина является шириной сигнала, проходящего через блок. Используйте этот макрос в mdlInitializeSizes
, чтобы задать количество элементов int_T
в векторе режима. Механизм Simulink® выделяет вектор режима и инициализирует его элементы к 0. Если значение по умолчанию 0 не является соответствующим, можно установить элементы массива к другим начальным значениям в mdlInitializeConditions
. Используйте ssGetModeVector
, чтобы получить доступ к вектору режима.
Вектор режима, объединенный с обнаружением пересечения нулем, позволяет вам создавать блоки, которые имеют отличные рабочие режимы, в зависимости от текущей стоимости сигналов ввода или вывода. Например, рассмотрите блок, который выводит абсолютное значение его входного параметра. Такой блок действует в двух отличных режимах, в зависимости от того, положителен ли его входной параметр или отрицателен. Если входной параметр положителен, блок выводит неизменный входной параметр. Если входной параметр отрицателен, блок выводит отрицание входного параметра. Можно использовать обнаружение пересечения нулем, чтобы обнаружить, когда входной параметр изменяет знак, и обновите одноэлементный вектор режима соответственно (например, путем установки его элемента на 0 для отрицательного входного параметра и 1 для положительного входного параметра). Можно затем использовать вектор режима в mdlOutputs
, чтобы определить режим, в котором в настоящее время действует блок.
C, C++
Смотрите S-функцию sfun_zc.c
, используемый в sfcndemo_sfun_zc
и S-функции sfun_zc_sat.c
, используемый в sfcndemo_sfun_zc_sat
.