Укажите размеры рабочих векторов и создайте параметры времени выполнения, необходимые для данной S-функции C MEX
Нет
C, C++
#define MDL_SET_WORK_WIDTHS
void mdlSetWorkWidths(SimStruct *S)
S
SimStruct представляет S-функциональный блок.
Модуль Simulink ® вызывает этот необязательный метод, чтобы разрешить этой S-функции устанавливать размеры векторов состояния и работы, необходимых для хранения глобальных данных и создания параметров времени выполнения (см. Создание и обновление параметров времени выполнения S-функции). Механизм вызывает этот метод после определения ширины входного порта, ширины выходного порта и времени выборки S-функции. Это позволяет S-функции масштабировать векторы состояния и работы на основе количества и размеров входов и выходов и/или количества выборок. Этот метод определяет состояние и размеры рабочего вектора с помощью макросовssGetNumContStates, ssSetNumDiscStates, ssSetNumRWork, ssSetNumIWork, ssSetNumPWork, ssSetNumModes, и ssSetNumNonsampledZCs.
S-функция C-MEX должна реализовать этот метод только в том случае, если она не знает размеры всех необходимых ей рабочих векторов, когда механизм вызывает функцию mdlInitializeSizes способ. Если эта S-функция реализует mdlSetWorkWidths, он должен инициализировать размеры любых рабочих векторов, которые ему необходимы DYNAMICALLY_SIZED в mdlInitializeSizesдаже для тех, чей точный размер он знает в тот момент. Затем S-функция должна указать фактический размер в mdlSetWorkWidths. Этот метод допустим только для моделирования и должен быть заключен в #if defined(MATLAB_MEX_FILE) заявление.
Полный пример S-функции C MEX с использованием векторов DWork см. в файле sfun_rtwdwork.c используется в модели Simulink sfcndemo_sfun_rtwdwork.