Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

Stateflow 차트 생성 및 실행하기

Stateflow® 차트는 상태, 천이 및 데이터로 구성된 유한 상태 머신을 그래픽으로 표현한 것입니다. Stateflow 차트를 생성하여 MATLAB® 알고리즘 또는 Simulink® 모델이 외부 입력 신호, 이벤트 및 시간 기반 조건에 반응하는 방식을 정의할 수 있습니다.

예를 들어 이 Stateflow 차트는 반파 정류기의 기반이 되는 로직을 나타냅니다. 차트에는 OnOff 레이블이 지정된 2개의 상태가 있습니다. On 상태에서 차트 출력 신호 y는 입력값 x와 동일합니다. Off 상태에서 출력 신호는 0으로 설정됩니다. 입력 신호가 임계값 t0을 지나면 차트가 이들 상태 간에 천이합니다. 각 상태의 동작이 시뮬레이션의 각 시간 스텝에서 y의 값을 업데이트합니다.

Stateflow chart with two states.

이 예제에서는 Simulink에서 시뮬레이션하고 MATLAB에서 실행하기 위해 이 Stateflow 차트를 생성하는 방법을 보여줍니다.

Stateflow 차트 생성하기

Stateflow 편집기 열기

Stateflow 편집기는 상태 천이 다이어그램, 플로우 차트, 상태 천이 테이블 및 진리표를 설계하기 위한 그래픽 환경입니다. Stateflow 편집기를 열기 전에 요구 사항에 가장 적합한 차트 실행 모드를 결정합니다.

  • 주기적 또는 연속시간 Simulink 알고리즘을 위한 조건부, 이벤트 기반 및 시간 기반 로직을 모델링하려면 sfnew 함수를 사용해서 Simulink 모델에서 블록으로 시뮬레이션할 수 있는 Stateflow 차트를 만듭니다. MATLAB 명령 프롬프트에서 다음을 입력합니다.

    sfnew rectify     % create chart for simulation in a Simulink model

    Simulink가 rectify라는 모델을 만들며, 여기에는 빈 Stateflow Chart 블록이 포함되어 있습니다. Stateflow 편집기를 열려면 차트 블록을 더블 클릭하십시오.

  • MATLAB 응용 프로그램을 위해 재사용 가능한 상태 머신 및 타이밍 로직을 설계하려면 edit 함수를 사용해서 MATLAB 객체로 실행할 수 있는 독립 실행형 Stateflow 차트를 만듭니다. MATLAB 명령 프롬프트에서 다음을 입력합니다.

    edit rectify.sfx  % create chart for execution as a MATLAB object

    rectify.sfx 파일이 없을 경우, Stateflow 편집기는 rectify라는 이름의 빈 차트를 만듭니다.

Stateflow 편집기의 기본 컴포넌트는 차트 캔버스, 객체 팔레트, 기호 창입니다.

  • 차트 캔버스는 상태, 천이 및 다른 그래픽 요소를 조합하여 차트를 만드는 그리기 영역입니다.

  • 캔버스 왼쪽에 있는 객체 팔레트에는 차트에 그래픽 요소를 추가하는 데 사용할 수 있는 일련의 툴이 표시됩니다.

  • 캔버스 오른쪽의 기호 창에서는 새 데이터, 이벤트, 메시지를 차트에 추가하고 정의되지 않은 기호나 미사용 기호의 연결을 맺습니다.

Default view of the Stateflow Editor.

Stateflow 차트를 작성한 후에는 차트의 내용을 다른 실행 모드를 갖는 다른 차트로 복사할 수 있습니다. 예를 들어 MATLAB에서 실행할 차트를 생성하고 그 내용을 Simulink에서 시뮬레이션할 차트로 복사할 수 있습니다.

상태 및 천이 추가하기

  1. 객체 팔레트에서 상태 아이콘 을 클릭하고 포인터를 차트 캔버스로 이동합니다. 디폴트 천이를 가진 상태가 나타납니다. 상태를 배치하려면 캔버스에서 원하는 위치를 클릭합니다. 텍스트 프롬프트에서 상태 이름으로 On을 입력하고 상태 동작으로 y = x를 입력합니다.

    Chart with one state, On.

  2. 다른 상태를 추가합니다. On 상태를 마우스 오른쪽 버튼으로 클릭하고 끕니다. 파란색 그래픽 큐가 상태를 가로 또는 세로로 정렬하도록 도와줍니다. 새로운 상태의 이름이 Off로 변경됩니다. 상태를 더블 클릭하고 상태 동작을 y = 0으로 수정합니다.

    Chart with two states, On and Off.

  3. 두 상태를 다시 정렬하고 두 상태 사이의 공간에서 잠시 멈춥니다. 파란색 천이 큐가 상태를 연결할 수 있는 여러 가지 방법을 나타냅니다. 천이를 추가하려면 적절한 큐를 클릭합니다.

    또는 한 상태의 가장자리를 클릭하여 다른 상태의 가장자리로 끌어 천이를 그립니다.

    Chart with the two states joined by transitions.

  4. 각 천이를 더블 클릭하고 적절한 천이 조건을 x<t0 또는 x>=t0으로 입력합니다. 조건이 대괄호 안에 표시됩니다.

    Chart with transition conditions.

  5. 차트를 정리합니다.

    • 명확성을 개선하려면 각 천이 레이블을 해당 천이 위 또는 아래의 편리한 위치로 이동합니다.

    • 차트의 그래픽 요소를 정렬하고 크기를 조정하려면 형식 탭에서 자동 정렬을 클릭하거나 Ctrl+Shift+A를 누릅니다.

    • 캔버스에 맞도록 차트의 크기를 조정하려면 스페이스바를 누르거나 화면에 맞춤 아이콘 을 클릭합니다.

정의되지 않은 기호 연결 맺기

차트를 실행하기 전에 차트에서 사용되는 각 기호를 정의하고 범위(예: 입력 데이터, 출력 데이터 또는 로컬 데이터)를 지정해야 합니다. 기호 창에서 정의되지 않은 기호에는 빨간색 오류 배지 가 표시됩니다. 유형 열에는 차트에서의 사용 정보에 기반하여 정의되지 않은 각 기호에 대해 제안된 범위가 표시됩니다.

  1. 기호 창을 엽니다.

    • Simulink 모델에서 차트를 작성하는 경우 모델링 탭의 설계 데이터 아래에서 기호 창을 선택합니다.

    • MATLAB에서 실행할 독립 실행형 차트를 작성하는 경우 상태 차트 탭에서 데이터 추가 > 기호 창을 선택합니다.

  2. 기호 창에서 정의되지 않은 기호 연결 맺기 를 클릭합니다.

    • Simulink 모델에서 차트를 작성하는 경우 Stateflow 편집기는 xt0 기호를 입력 데이터 로 연결을 맺고 y를 출력 데이터 로 연결을 맺습니다.

    • MATLAB에서 실행할 독립 실행형 차트를 작성하는 경우 Stateflow 편집기는 t0, xy를 로컬 데이터 로 연결을 맺습니다.

    Before and after views of the Symbols pane resolving the undefined symbols t0, x, and y.

  3. 임계값 t0이 시뮬레이션 중에 변경되지 않으므로 범위를 상수 데이터로 변경합니다. 유형 열에서 t0 옆의 데이터 유형 아이콘을 클릭하고 상수 데이터를 선택합니다.

  4. 임계값 t0의 값을 설정합니다. 열에서 t0 옆의 빈 항목을 클릭하고 값을 0으로 입력합니다.

  5. Stateflow 차트를 저장합니다.

이제 차트를 Simulink에서 시뮬레이션에 사용하거나 MATLAB에서 실행할 준비가 되었습니다.

차트를 Simulink 블록으로 시뮬레이션하기

Simulink 모델 내에서 차트를 시뮬레이션하려면 입력 및 출력 포트를 통해 모델의 다른 블록에 차트 블록을 연결합니다. MATLAB 명령 창에서 차트를 실행하려면 차트를 MATLAB 객체로 실행하기 항목을 참조하십시오.

  1. Simulink 편집기로 돌아가려면 캔버스 맨 위의 탐색 막대에서 Simulink 모델의 이름(수정)을 클릭합니다. 탐색 막대가 표시되지 않으면 객체 팔레트 맨 위에 있는 탐색 막대 표시/숨기기 아이콘 을 클릭합니다.

  2. 모델에 소스를 추가합니다.

    • Simulink Sources 라이브러리에서 Sine Wave (Simulink) 블록을 추가합니다.

    • Sine Wave 블록을 더블 클릭하고 샘플 시간을 0.2로 설정합니다.

    • Sine Wave 블록의 출력을 Stateflow 차트의 입력에 연결합니다.

    • 신호의 레이블을 x로 지정합니다.

  3. 모델에 싱크를 추가합니다.

    • Simulink Sinks 라이브러리에서 두 개의 입력 포트가 있는 Scope (Simulink) 블록을 추가합니다.

    • Sine Wave 블록의 출력을 Scope 블록의 첫 번째 입력에 연결합니다.

    • Stateflow 차트의 출력을 Scope 블록의 두 번째 입력에 연결합니다.

    • 신호의 레이블을 y로 지정합니다.

  4. Simulink 모델을 저장합니다.

    In a Simulink model, a Sine Wave block creates an input signal for the chart. A Scope block plots the input and output of the chart.

  5. 모델을 시뮬레이션하려면 실행 을 클릭합니다. 시뮬레이션 중에 Stateflow 편집기는 차트 애니메이션을 통해 활성 상태와 천이를 강조 표시합니다.

  6. 모델을 시뮬레이션한 후 Scope 블록을 더블 클릭합니다. 스코프에 차트에 대한 입력 및 출력 신호의 그래프가 표시됩니다.

    Scope block showing the input and output of the chart.

    시뮬레이션 결과는 정류기가 음수 입력값을 필터링했음을 보여줍니다.

차트를 MATLAB 객체로 실행하기

MATLAB 명령 창에서 차트를 실행하려면 차트 객체를 생성하고 객체의 step 함수를 호출합니다. Simulink 모델 내부에서 차트를 시뮬레이션하려면 차트를 Simulink 블록으로 시뮬레이션하기 항목을 참조하십시오.

  1. 차트 정의를 포함하는 sfx 파일의 이름을 함수로 사용하여 차트 객체 r을 생성합니다. 차트 데이터 x의 초기값을 이름-값 쌍으로 지정합니다.

    r = rectify(x=0);
  2. 차트 실행을 위해 입력 및 출력 데이터를 초기화합니다. 벡터 X에는 사인파의 입력값이 포함됩니다. 벡터 Y는 빈 누산기입니다.

    T = 0:0.2:10;
    X = sin(T);
    Y = [];
  3. step 함수를 여러 번 호출하여 차트 객체를 실행합니다. 벡터 X의 개별 값을 차트 데이터 x로 전달합니다. 벡터 Y에서 y의 결과 값을 수집합니다. 실행 중에 Stateflow 편집기는 차트 애니메이션을 통해 활성 상태와 천이를 강조 표시합니다.

    for i = 1:51
        step(r,x=X(i));
        Y(i) = r.y;
    end
  4. MATLAB 작업 공간에서 차트 객체 r을 삭제합니다.

    delete(r)
  5. 차트 실행 결과를 검토합니다. 예를 들어 stairs 함수를 호출하여 XY의 값을 비교하는 계단 그래프를 만들 수 있습니다.

    ax1 = subplot(2,1,1);
    stairs(ax1,T,X,color="#0072BD")
    title(ax1,"x")
    
    ax2 = subplot(2,1,2);
    stairs(ax2,T,Y,color="#D95319")
    title(ax2,"y")

    MATLAB figure showing the input and output of the chart.

    실행 결과는 정류기가 음수 입력값을 필터링했음을 보여줍니다.

관련 항목