ssEnableSystemWithTid

Включите подсистему вызова функций, соединенную с этой S-функцией

Синтаксис

int_T ssEnableSystemWithTid(SimStruct *S, int_T element, int_T tid)

Аргументы

S

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

element

Индекс элемента выходного порта, соответствующего подсистеме вызова функций.

tid

ID задачи.

Возвращается

int_T1 если успешный; в противном случае, 0.

Описание

Используйте в mdlOutputs включить подсистему вызова функций, соединенную с S-функцией. Синтаксис вызова

if (!ssEnableSystemWithTid(S, element, tid)) {
  /* Error occurred which will be reported by the Simulink engine*/
  return;
}

Примечание

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

Эффект вызова этой функции зависит от установки Штатов при включении параметра блока Trigger подсистемы вызова функций. Если параметр устанавливается на reset, эта функция вызывает подсистему вызова функций, инициализируют метод и затем разрешать метод. Подсистема инициализирует и включает методы, в свою очередь вызывают инициализирование и включают методы любых блоков в подсистеме, которые имеют эти методы. Инициализируйте методы, сбрасывает состояния блоков, которые имеют состояния, например, блоки Integrator, к их начальным значениям. Таким образом, если состояния блока Trigger при включении опции установлены в reset, вызов этой функции эффективно сбрасывает состояния подсистемы вызова функций. Если состояния блока Trigger при включении опции установлены в held, эта функция просто вызывает подсистему, включают метод, не вызывая инициализировать метод и следовательно не сбрасывая его состояния.

Языки

C, C++

Пример

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

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

static void mdlInitializeSampleTimes(SimStruct *S)
{
    ssSetSampleTime(S, 0, 0.1);
    ssSetOffsetTime(S, 0, 0.0);

    /* Explicitly enable/disable function-call subsystem */
    ssSetExplicitFCSSCtrl(S,1);

    /* Call function-call subsystem on first element */
    ssSetCallSystemOutput(S,0);

    ssSetModelReferenceSampleTimeDefaultInheritance(S);

} /* End mdlInitializeSampleTimes */

mdlOutputs коллбэк показывают ниже. Это сначала использует ssEnableSystemWithTid включить подсистему вызова функций в начале симуляции. Подсистема вызова функций должна быть включена, прежде чем она сможет быть названа с помощью ssCallSystemWithTid. После того, как симуляция запустилась в течение 10 секунд, mdlOutputs коллбэк вызывает ssDisableSystemWithTid отключить подсистему вызова функций. Путем вызова ssEnableSystemWithTid снова, подсистема вызова функций повторно включена, и состояния сбрасываются.

static void mdlOutputs(SimStruct *S, int_T tid)
{
    real_T  *x = ssGetRealDiscStates(S);
    real_T  *y = ssGetOutputPortRealSignal(S,1);
    time_T   t = ssGetT(S); /* Simulation time */

    /* Enable function-call subsystem at start of simulation */
    if (t==0) {
        if (!ssEnableSystemWithTid(S,0,tid)) {
            return;
        }
    }
    
    /* Call function-call subsystem */
    if (!ssCallSystemWithTid(S,0,tid)) {
        return;
    }

    /* Disable/re-enable function-call subsystem when time = 10 */
    if (t==10) {
        if (!ssDisableSystemWithTid(S,0,tid)) {
            return;
        }
        if (!ssEnableSystemWithTid(S,0,tid)) {
            return;
        }
    }
    y[0] = x[0];

} /* End mdlOutputs */
Представлено до R2006a