В этом примере показано, как реализовать for
построение цикла при помощи блоков Simulink, диаграмм Stateflow и блоков MATLAB function.
y1 = 0; for(inx = 0; inx <10; inx++) { y1 = u1[inx] + y1; }
Один метод для создания for
цикл должен использовать В блоке Subsystem Итератора от библиотеки Simulink> Ports и Subsystems.
1. Открытая модель ex_for_loop_SL
в качестве примера.
Модель содержит Для блока Subsystem Итератора, который повторяет выполнение содержимого подсистемы во время шага времени симуляции.
Наблюдайте следующие настройки в модели:
Откройте блок For Iterator. В диалоговом окне Block Parameters параметром Режима индексации является Zero-based
и предельный параметр Итерации равняется 10.
Откройте блок Unit Delay. В диалоговом окне Block Parameters параметр Начальных условий 0. Этот параметр инициализирует состояние, чтобы обнулить.
2. Чтобы создать модель и сгенерировать код, нажмите Ctrl+B.
Код, реализующий for
цикл находится в ex_for_loop_SL_step
функция в ex_for_loop_SL.c
:
/* External inputs (root inport signals with default storage) */ ExternalInputs U; /* External outputs (root outports fed by signals with default storage) */ ExternalOutputs Y; /* Model step function */ void ex_for_loop_SL_step(void) { int32_T rtb_y1; int32_T s1_iter; /* Outputs for Iterator SubSystem: '<Root>/For Iterator Subsystem' incorporates: * ForIterator: '<S1>/For Iterator' */ for (s1_iter = 0; s1_iter < 10; s1_iter++) { /* Sum: '<S1>/Add' incorporates: * Inport: '<Root>/u1' * MultiPortSwitch: '<S1>/Index Vector' * UnitDelay: '<S1>/Unit Delay' */ rtb_y1 = U.u1[s1_iter] + DWork.UnitDelay_DSTATE; /* Update for UnitDelay: '<S1>/Unit Delay' */ DWork.UnitDelay_DSTATE = rtb_y1; } /* End of Outputs for SubSystem: '<Root>/For Iterator Subsystem' */ /* Outport: '<Root>/y1' */ Y.y1 = rtb_y1; }
1. Открытая модель ex_for_loop_SF
в качестве примера.
График содержит For
шаблон решения цикла, который вы добавляете путем щелчка правой кнопкой в графике>, Добавляет Шаблон в Графике> Цикл> Для.
2. Чтобы создать модель и сгенерировать код, нажмите Ctrl+B.
Код, реализующий for
цикл находится в ex_for_loop_SF_step
функция в ex_for_loop_SF.c
:
/* External inputs (root inport signals with default storage) */ ExternalInputs U; /* External outputs (root outports fed by signals with default storage) */ ExternalOutputs Y; /* Model step function */ void ex_for_loop_SF_step(void) { int32_T inx; /* Chart: '<Root>/Chart' */ for (inx = 0; inx < 10; inx++) { /* Outport: '<Root>/y1' incorporates: * Inport: '<Root>/u1' */ Y.y1 += U.u1[inx]; } /* End of Chart: '<Root>/Chart' */ }
1. Открытая модель ex_for_loop_ML
в качестве примера.
Блок MATLAB function содержит эту функцию:
function y1 = fcn(u1) y1 = 0; for inx=1:10 y1 = u1(inx) + y1 ; end
2. Чтобы создать модель и сгенерировать код, нажмите Ctrl+B.
Код, реализующий for
цикл находится в ex_for_loop_ML_step
функция в ex_for_loop_ML.c
:
/* Exported block signals */ real_T u1[10]; /* '<Root>/u1' */ real_T y1; /* '<Root>/MATLAB Function' */ /* Model step function */ void ex_for_loop_ML_step(void) { int32_T inx; /* MATLAB Function: '<Root>/MATLAB Function' incorporates: * Inport: '<Root>/u1' */ y1 = 0.0; for (inx = 0; inx < 10; inx++) { y1 += u1[inx]; } /* End of MATLAB Function: '<Root>/MATLAB Function' */ }