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 способ.

Примечание

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

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

  • Любая S-функция, если модель работает в режиме Rapid 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);
          }
      }
Введенный в R2016a