ssEnableSystemWithTid

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

Синтаксис

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

Аргументы

S

SimStruct, представляющий блок S-Function.

element

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

tid

Идентификатор задачи.

Возвраты

Система координат int_T 1 в случае успеха; в противном случае 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 */

The 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