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