InitializeConditions

Инициализируйте векторы состояния этой S-функции MATLAB

Необходимый

Нет

Язык

MATLAB

Синтаксис

InitializeConditions(s)

Аргументы

s

Образец Simulink.MSFcnRunTimeBlock класс, представляющий Блок Level-2 MATLAB S-function.

Описание

Simulink® engine вызывает этот необязательный метод в начале симуляции. Он должен инициализировать непрерывные и дискретные состояния, если таковые имеются, этого блока S-Function. В Level-2 S-функции MATLAB используйте ContStates или Dwork методы объекта во время выполнения для доступа к непрерывным и дискретным состояниям. Этот метод может также выполнить любые другие действия инициализации, которые требуются этой S-функции.

Примечание

Если у вас есть Simulink Coder™, и вы должны убедиться, что код инициализации в InitializeConditions функция запускается только один раз, затем перемещает этот код инициализации в Start способ. MathWorks рекомендует это изменение кода как лучшую практику.

Если эта S-функция находится в включенной подсистеме, настроенной на сброс состояний, механизм Simulink также вызывает этот метод, когда включенная подсистема перезапускает выполнение.

Механизм Simulink вызывает InitializeConditions перед вычислением входных сигналов S-функции. Поэтому, поскольку значения входного сигнала еще не доступны, InitializeConditions не следует использовать значения входного сигнала для установки начальных условий. Если вашей S-функции необходимо инициализировать внутренние значения с помощью входных сигналов блока, выполните инициализацию в Outputs.

Для примера в S-функции C MEX инициализирует вектор 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 //
}

Для Level-2 S-функции MATLAB используйте вектор DWork вместо вектора IWork в предыдущем примере.

Пример

Этот пример инициализирует как непрерывное, так и дискретное состояние до 1.0. Level-2 MATLAB S-функции сохраняют дискретные состояния в своих векторах DWork.

function InitializeConditions(s)

s.ContStates.Data(1) = 1;
s.Dwork(1).Data      = 1;

% endfunction
Введенный в R2012b