Укажите размер вектора режима блока
int_T ssSetNumModes(SimStruct *S, int_T nModes)
SSimStruct представляет S-функциональный блок.
nModesРазмер вектора режима для блока, представленного S. Допустимые значения: 0, положительное целое число или DYNAMICALLY_SIZED.
Количество режимов, указанных nModes, или -1 если DYNAMICALLY_SIZED.
Устанавливает размер вектора режима блока равным nModes. Элементы вектора режима инициализируются в NULL до назначения значений с помощью ssSetModeVectorValue или через указатель, полученный изssGetModeVector.
Если 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.