Инициализируйте векторы состояния этой S-функции MATLAB
Нет
MATLAB
InitializeConditions(s)
s Экземпляр Simulink.MSFcnRunTimeBlock класс, представляющий блок Level-2 MATLAB S-function.
Механизм Simulink® вызывает этот дополнительный метод в начале симуляции. Это должно инициализировать непрерывные и дискретные состояния, если таковые имеются, этого Блока s-function. На Уровне 2 S-функция MATLAB используйте ContStates или Dwork методы объекта периода выполнения, чтобы получить доступ к непрерывным и дискретным состояниям. Этот метод может также выполнить любые другие действия инициализации, которых требует эта S-функция.
Если у вас есть Simulink Coder™, и необходимо гарантировать что код инициализации в InitializeConditions функция запущена только однажды, затем переместите этот код инициализации в Start метод. MathWorks рекомендует это изменение кода как лучшую практику.
Если эта S-функция находится в активированной подсистеме, сконфигурированной, чтобы сбросить состояния, механизм Simulink также вызывает этот метод, когда активированная подсистема перезапускает выполнение.
Механизм Simulink вызывает InitializeConditions до вычисления входных сигналов S-функции. Поэтому, поскольку значения входного сигнала еще не доступны, InitializeConditions не должен использовать значения входного сигнала, чтобы установить начальные условия. Если ваша S-функция должна инициализировать внутренние значения с помощью входных сигналов блока, выполните инициализацию в Outputs.
Например, в S-функции MEX C, инициализирует вектор IWork одним элементом в mdlInitializeSizes метод.
ssSetNumIWork(S, 1);
Вектор IWork содержит флаг, указывающий, были ли начальные значения заданы. Инициализируйте значение флага в mdlInitializeCondition метод.
static void mdlInitializeConditions(SimStruct *S)
{
/* The mdlInitializeConditions method is called when the simulation
start and every time an enabled subsystem is re-enabled.
Reset the IWork flag to 1 when values need to be reinitialized.*/
ssSetIWorkValue(S, 0, 1);
}Проверяйте значение флага вектора IWork в mdlOutputs метод, чтобы определить, должны ли начальные значения быть установлены. Поскольку механизм вычислил входные значения в этой точке в симуляции, mdlOutputs метод может использовать их, чтобы инициализировать внутренние значения.
static void mdlOutputs(SimStruct *S, int_T tid)
{
// Initialize values if the IWork vector flag is true. //
if (ssGetIWorkValue(S, 0) == 1) {
// Enter initialization code here //
}
// Remainder of mdlOutputs function //
}Для Уровня 2 S-функция MATLAB используйте вектор DWork вместо вектора IWork в предыдущем примере.
Этот пример инициализирует и непрерывное и дискретное состояние к 1,0. Уровень 2 S-функции MATLAB хранят дискретные состояния в своих векторах DWork.
function InitializeConditions(s) s.ContStates.Data(1) = 1; s.Dwork(1).Data = 1; % endfunction
StartВыходные параметры , Simulink.RunTimeBlock, Simulink.MSFcnRunTimeBlock, mdlInitializeConditions