ssSetSkipContStatesConsistencyCheck

Попросите, чтобы механизм Simulink пропустил непрерывную проверку на непротиворечивость состояния

Синтаксис

void ssSetSkipContStatesConsistencyCheck(SimStruct *S,boolean_T v)

Аргументы

S

SimStruct, представляющий Блок s-function.

v

Булево значение (boolean_T), говоря Simulink® пропустить непрерывную проверку на непротиворечивость состояния.

Описание

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

По умолчанию Simulink наблюдает непрерывные изменения состояния в S-функциях. Это выдает предупреждения для изменений, когда вы не используете макрос ssSetSolverNeedsReset. Если вы используете макрос ssSetSolverNeedsReset правильно, у вас не должно быть Simulink, наблюдают непрерывные изменения состояния в S-функциях и может поэтому ускорить S-функцию и улучшать производительность симуляции. Чтобы сказать Simulink прекращать наблюдать непрерывные изменения состояния, используйте макрос ssSetSkipContStatesConsistencyCheck. Используйте этот макрос если S-функция:

  • Никогда не изменяет состояние.

  • Изменяет состояние, но использует макрос ssSetSolverNeedsReset, чтобы сбросить решатель.

Чтобы пропустить проверки, используйте ssSetSkipContStatesConsistencyCheck(S,1) в методе mdlInitializeSizes.

Примечание

По причинам производительности непрерывная проверка на непротиворечивость состояния выполняется только в симуляциях режима Accelerator и нормальном. В частности, Simulink не выполняет непрерывные проверки на непротиворечивость состояния для:

  • S-функции в блоке Model, который находится в Режиме Accelerator

  • Любая S-функция, если модель запускается в Быстром Режиме Accelerator

Языки

C, C++

Пример

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

static void mdlInitializeSizes(SimStruct *S)
{
	: 
	: <snip> 
	:    ssSetSkipContStatesConsistencyCheck(SimStruct S,1);
	: 
	: <snip> 
	:
static void mdlOutputs(SimStruct *S, int_T tid)
} /* end mdlInitializeSizes */

static void mdlOutputs(SimStruct *S, int_T tid)
   {
   
        /* Change states in major time step only */
        if ( ssIsMajorTimeStep(S) && YourConditionsForStateChange ) {
           double *x = ssGetContStates(S);
            /* reset the states */
             for (i=0; i<nContStates; i++) {
                 x[i] = 0.0;
             }
            /* Ask the Simulink engine to reset the solver. */
             ssSetSolverNeedsReset(S);
          }
      }

Смотрите также

ssSetSolverNeedsReset, ssIsMajorTimeStep

Введенный в R2016a