주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

For 루프

이 예제는 Simulink ® 블록, Stateflow ® 차트 및 MATLAB ® 함수 블록을 사용하여 for 루프 구조를 구현하는 방법을 보여줍니다.

C 구조

y1 = 0;
for(inx = 0; inx <10; inx++)
{
  y1 = u1[inx] + y1;
}

For 루프 모델링 패턴: For-Iterator Subsystem 블록

for 루프를 생성하는 한 가지 방법은 Simulink > Ports & Subsystems 라이브러리의 For Iterator Subsystem 블록을 사용하는 것입니다.

1. 열린 예시 모델 ex_for_loop_SL.

이 모델에는 시뮬레이션 시간 단계 동안 서브시스템의 내용을 반복적으로 실행하는 For Iterator Subsystem 블록이 포함되어 있습니다.

모델에서 다음 설정을 확인하십시오:

  • For Iterator 블록을 엽니다. 블록 파라미터 대화 상자에서 인덱스 모드 파라미터는 Zero-based이며, 반복 제한 파라미터는 10입니다.

  • Unit Delay 블록을 엽니다. 블록 파라미터 대화 상자에서 초기 조건 파라미터는 0입니다. 이 파라미터는 상태를 0으로 초기화합니다.

2. 모델을 구축하고 코드를 생성하려면 Ctrl+B를 누르십시오.

for 루프를 구현하는 코드는 ex_for_loop_SL.c 내의 ex_for_loop_SL_step 함수에 있습니다:

/* 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;
}

For 루프 모델링 패턴: Stateflow 차트

1. 열린 예시 모델 ex_for_loop_SF.

차트에는 For 루프 결정 패턴이 포함되어 있으며, 이는 차트 내부에서 마우스 오른쪽 버튼을 클릭하고 > 차트에 패턴 추가 > 루프 > for를 선택하여 추가할 수 있습니다.

2. 모델을 구축하고 코드를 생성하려면 Ctrl+B를 누르십시오.

for 루프를 구현하는 코드는 ex_for_loop_SF.c 내의 ex_for_loop_SF_step 함수에 있습니다:

/* 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' */
}

For 루프 모델링 패턴: MATLAB 함수 블록

1. 열린 예시 모델 ex_for_loop_ML.

MATLAB 함수 블록에는 이 함수가 포함되어 있습니다:

function y1 = fcn(u1)
 
y1 = 0;
 
for inx=1:10
    y1 = u1(inx) + y1 ;
end

2. 모델을 구축하고 코드를 생성하려면 Ctrl+B를 누르십시오.

for 루프를 구현하는 코드는 ex_for_loop_ML.c 내의 ex_for_loop_ML_step 함수에 있습니다:

/* 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' */
}

참고 항목

도움말 항목