Задайте размеры векторов работы и создайте параметры периода выполнения, требуемые этой S-функцией MEX C
Нет
C, C++
#define MDL_SET_WORK_WIDTHS
void mdlSetWorkWidths(SimStruct *S)
S
SimStruct, представляющий Блок s-function.
Механизм 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-функции MEX C с помощью векторов DWork смотрите файл sfun_rtwdwork.c
, используемый в модели Simulink sfcndemo_sfun_rtwdwork
.