ssEnableSystemWithTid

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

Синтаксис

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

Аргументы

S

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

element

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

tid

ID задачи.

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

1 int_T, если успешный; в противном случае, 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, эта функция вызывает подсистему вызова функций, инициализируют метод и затем разрешать метод. Подсистема инициализирует и включает методы, в свою очередь вызывают инициализирование и включают методы любых блоков в подсистеме, которые имеют эти методы. Инициализируйте методы, сбрасывает состояния блоков, которые имеют состояния, например, блоки Интегратора, к их начальным значениям. Таким образом, если состояния блока 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