Main Content

상태를 사용하여 동작 모드 표현하기

상태는 반응 시스템의 동작 모드를 설명합니다. Stateflow® 차트에서 상태는 상태 천이 다이어그램을 만들기 위한 순차적 설계에 사용됩니다.

시뮬레이션 중에 상태는 활성화되거나 비활성화될 수 있습니다. 상태의 활동은 이벤트와 조건에 따라 달라집니다. 이벤트는 상태를 활성화하거나 비활성화하여 상태 천이 다이어그램의 실행을 이끕니다. 자세한 내용은 Stateflow 차트의 실행 항목을 참조하십시오.

시스템에서 여러 수준의 컴포넌트를 표현하려면 상위 상태 내에 하위 상태를 중첩하여 상태 계층 구조를 만듭니다. 자세한 내용은 Use State Hierarchy to Design Multilevel State Complexity 항목을 참조하십시오.

상호 배타적인 동작 모드를 모델링하려면 하위 상태 중 최대 하나가 동시에 활성화되도록 상태에서 배타적(OR) 분해를 활성화합니다. 동시에 실행되는 동작 모드를 구현하려면 모든 하위 상태가 동시에 활성화되도록 상태에서 병렬(AND) 분해를 활성화합니다. 자세한 내용은 상태 분해를 사용하여 배타적 모드 및 병렬 모드 정의하기 항목을 참조하십시오.

예를 들어 다음 차트에서 상태 PowerOnPowerOff는 공기 제어기 시스템의 켜기 모드와 끄기 모드를 나타냅니다. 상태 PowerOn에서 병렬 하위 상태 FAN1FAN2는 팬 한 쌍의 동작 모드를 나타냅니다. 상태 각각에는 OnOff라는 배타적인 하위 상태가 포함되어 있습니다. 이 예제에 대한 자세한 내용은 병렬 분해를 사용하여 동기 서브시스템 모델링하기 항목을 참조하십시오.

Chart that contains a hierarchy of exclusive and parallel states that represent the operating modes of an air controller system.

상태 만들기

Stateflow 차트에 상태를 추가하려면 다음을 수행하십시오.

  1. 차트를 엽니다.

  2. 객체 팔레트에서 상태 아이콘 을 클릭합니다.

  3. 차트 캔버스에서 새 상태의 위치를 클릭합니다.

  4. 상태의 레이블을 입력하고 상태 외부를 클릭합니다. 레이블은 상태의 이름과 상태가 시뮬레이션 중에 실행하는 선택적 동작을 지정합니다. 자세한 내용은 상태의 동작 정의하기 항목을 참조하십시오.

상태를 만든 후 Stateflow 편집기를 사용하여 상태의 크기, 위치, 내용을 변경할 수 있습니다.

  • 상태의 크기를 조정하려면 상태의 코너를 클릭하여 끌어서 놓습니다.

  • 상태를 이동하려면 상태의 내부를 클릭하여 끌어서 놓습니다.

  • 상태 레이블을 편집하려면 편집하려는 문자 위치 근처의 레이블 텍스트를 클릭합니다.

부모 상태는 모든 하위 상태를 수용할 만큼 그래픽적으로 충분히 커야 하므로 새 하위 상태를 끌어서 놓기 전에 부모 상태의 크기를 조정해야 할 수 있습니다. 또는 상위 상태를 서브차트로 변환할 수 있습니다. 자세한 내용은 Encapsulate Modal Logic by Using Subcharts 항목을 참조하십시오.

상태의 동작 정의하기

상태의 레이블은 상태의 이름과 상태가 시뮬레이션 중에 실행하는 선택적 동작을 지정합니다. 상태 레이블은 상태의 왼쪽 위 코너에 표시되며 다음과 같은 일반 형식으로 구성됩니다.

name
entry: entry_actions
during: during_actions
exit: exit_actions
on event_name: on_event_actions
on message_name: on_message_actions
bind: event_name, data_name

상태 동작은 임의의 순서로 표시될 수 있습니다. 각 동작 유형에 대해 각 명령문을 별도의 줄에 입력하여 둘 이상의 명령문을 지정할 수 있습니다. 또는 동일한 줄에서 여러 명령문을 구분하려면 쉼표나 세미콜론을 사용합니다. 같은 명령문을 실행하는 entry, during, exit 동작을 결합할 수도 있습니다. 자세한 내용은 Eliminate Redundant Code by Combining State Actions 항목을 참조하십시오.

상태 이름 바로 뒤에 명령문을 추가하면 차트는 해당 명령문을 entry 동작과 during 동작의 결합으로 해석합니다.

상태 이름

상태 레이블은 상태의 이름으로 시작하고 그 뒤에 선택적으로 슬래시(/)가 옵니다. 상태 이름은 대/소문자를 구분하며 영숫자 문자와 밑줄 문자의 조합으로 구성됩니다. 자세한 내용은 Stateflow 객체 이름에 대한 지침 항목을 참조하십시오.

이름 충돌이 발생하지 않도록 형제 상태에 동일한 이름을 할당하지 않습니다. 각 상태의 전체 이름이 고유한 경우 여러 상태에 동일한 상태 이름을 사용할 수 있습니다. 상태의 전체 이름은 상태 계층 구조의 선조 이름이 순서대로 마침표로 구분되어 만들어집니다. 예를 들어 이전 예제에서 FAN1FAN2의 상태는 다음과 같은 고유한 전체 이름으로 식별됩니다.

  • PowerOn.FAN1.On

  • PowerOn.FAN1.Off

  • PowerOn.FAN2.On

  • PowerOn.FAN2.Off

entry 동작

entry 동작을 추가하려면 entry 또는 en을 입력하고 그 뒤에 콜론(:)과 하나 이상의 명령문을 입력합니다. 상태가 활성화되면 차트는 해당 명령문을 실행합니다. 예를 들어 다음 차트에서 상태 PowerOffentry 동작은 공기 제어기 시스템이 꺼지면 airflow의 값을 0으로 설정합니다. 자세한 내용은 Enter a Chart or State 항목을 참조하십시오.

State with entry action.

during 동작

during 동작을 추가하려면 during 또는 du를 입력하고 그 뒤에 콜론(:)과 하나 이상의 명령문을 입력합니다. 상태가 활성화되어 있고 다른 상태로의 유효한 천이가 없으면 차트는 해당 명령문을 실행합니다. 예를 들어 다음 차트에서 상태 PowerOnduring 동작은 공기 제어기 시스템이 켜져 있으면 airflow의 값을 계산합니다. 자세한 내용은 Stateflow 차트의 실행 항목을 참조하십시오.

State with during action.

exit 동작

exit 동작을 추가하려면 exit 또는 ex를 입력하고 그 뒤에 콜론(:)과 하나 이상의 명령문을 입력합니다. 상태가 활성화되어 있고 상태로부터의 천이가 발생하면 차트는 해당 명령문을 실행합니다. 예를 들어 다음 차트에서 상태 PowerOnexit 동작은 공기 제어기 시스템이 꺼지면 airflow의 값을 0으로 설정합니다. 자세한 내용은 상태에서 나가기(진출) 항목을 참조하십시오.

State with exit action.

on 동작

on 동작을 추가하려면 on을 입력하고 그 뒤에 이벤트나 메시지의 이름, 콜론(:), 하나 이상의 명령문을 입력합니다. 상태가 활성화되어 있고 지정된 이벤트나 메시지를 받으면 차트는 해당 명령문을 실행합니다. 자세한 내용은 Synchronize Model Components by Broadcasting Events 항목과 Communicate with Stateflow Charts by Sending Messages 항목을 참조하십시오.

둘 이상의 이벤트나 메시지에 대해 on 동작을 지정할 수 있습니다. 예를 들어 다음 상태에는 이벤트 E1E2에 대해 다른 on 동작이 포함되어 있습니다.

State with multiple on actions.

여러 이벤트가 동시에 발생하는 경우 해당 on 동작은 상태 레이블에 표시되는 순서대로 실행됩니다. 자세한 내용은 Stateflow 차트의 실행 항목을 참조하십시오.

묵시적 이벤트(예: change, enter 또는 exit)와 시간 논리 연산자(예: after, at, before 또는 every)를 사용하여 상태에서 on 동작을 트리거할 수 있습니다. 자세한 내용은 Control Chart Behavior by Using Implicit Events 항목과 Control Chart Execution by Using Temporal Logic 항목을 참조하십시오.

bind 동작

bind 동작을 추가하려면 bind를 입력하고 그 뒤에 콜론(:)과 하나 이상의 이벤트 또는 데이터 객체의 이름을 입력합니다. 여러 이벤트와 데이터를 구분하려면 세미콜론이나 쉼표를 사용하거나 이벤트와 데이터를 별도의 줄에 입력합니다. 예를 들어 다음 차트에서 상태 A에는 이벤트 E와 데이터 객체 x를 상태에 바인딩하는 bind 동작이 포함되어 있습니다.

State with bind action that binds an event and a data object to the state.

bind 동작은 상태가 활성화되었는지 여부와 관계없이 적용됩니다. 다른 상태도 바인딩된 데이터를 읽거나 바인딩된 이벤트를 수신 대기할 수 있지만, 상태와 그 자식만 바인딩된 데이터의 값을 변경하거나 바인딩된 이벤트를 브로드캐스트할 수 있습니다. 그렇지 않으면 컴파일타임 오류가 발생합니다.

상태에 함수 호출 이벤트를 바인딩하면 이벤트가 호출하는 함수 호출 서브시스템도 바인딩됩니다. 함수 호출 서브시스템은 바인딩 상태가 활성 상태이면 활성화되고 바인딩 상태가 비활성 상태이면 비활성화됩니다. 자세한 내용은 Control Function-Call Subsystems by Using bind Actions 항목을 참조하십시오.

차트에 동일한 데이터나 이벤트를 여러 상태에 바인딩하는 동작이 포함되어 있는 경우 컴파일타임 오류가 발생합니다.

MATLAB®의 독립 실행형 Stateflow 차트에서는 bind 동작을 지원하지 않습니다.

상태 그룹화하기

하나의 단위로 작동하도록 상태의 그래픽 내용을 그룹화하여 차트 편집을 간소화할 수 있습니다. 예를 들어 그룹화된 상태를 이동하면 하위 상태, 천이, 해당 상태 내의 다른 그래픽 객체도 이동합니다. 상태를 그룹화하려면 상태를 마우스 오른쪽 버튼으로 클릭하고 상황별 메뉴에서그룹 및 서브차트 > 그룹을 선택합니다.

상태 내의 객체를 선택하거나 다른 그래픽 객체를 상태로 이동하려면 먼저 상태의 그룹화를 해제해야 합니다. 예를 들어 상태나 그래픽 함수를 그룹화된 상태로 이동하려고 하면 유효하지 않은 교차 오류가 발생합니다. 상태의 그룹화를 해제하려면 상태를 마우스 오른쪽 버튼으로 클릭하고 상황별 메뉴에서그룹 및 서브차트 > 그룹을 선택 해제합니다.

Stateflow 편집기에서 그룹화된 상태는 그룹화되지 않은 상태보다 어둡게 표시됩니다. 예를 들어 다음 차트에서 상태 FAN1은 그룹화되어 있지만 상태 FAN2는 그룹화되어 있지 않습니다.

Stateflow chart that contains a grouped state called FAN1 and an ungrouped state called FAN2.

상태 속성 지정하기

아래에 나열된 속성을 사용하면 상태가 Stateflow 차트의 다른 컴포넌트와 상호 작용하는 방식을 지정할 수 있습니다. 속성 인스펙터, 모델 탐색기 또는 상태 속성 대화 상자에서 이러한 속성을 수정할 수 있습니다.

속성 인스펙터를 사용하려면 다음을 수행하십시오.

  1. 모델링 탭의 설계 데이터 아래에서 속성 인스펙터를 선택합니다.

  2. Stateflow 편집기에서 상태를 선택합니다.

  3. 속성 인스펙터에서 상태 속성을 편집합니다.

모델 탐색기를 사용하려면 다음을 수행하십시오.

  1. 모델링 탭의 설계 데이터 아래에서 모델 탐색기를 선택합니다.

  2. 모델 계층 구조 창에서 상태를 선택합니다.

  3. 대화 상자 창에서 상태 속성을 편집합니다.

상태 속성 대화 상자를 사용하려면 다음을 수행하십시오.

  1. Stateflow 편집기에서 상태를 마우스 오른쪽 버튼으로 클릭합니다.

  2. 속성을 선택합니다.

  3. 속성 대화 상자에서 상태 속성을 편집합니다.

Stateflow.State 객체를 사용하여 프로그래밍 방식으로 상태 속성을 수정할 수도 있습니다. Stateflow 프로그래밍 인터페이스에 대한 자세한 내용은 Overview of the Stateflow API 항목을 참조하십시오.

이름

상태의 이름입니다. 이 속성은 읽기 전용입니다. 모델 탐색기와 상태 속성 대화 상자에서 상태 이름 하이퍼링크를 클릭하면 Stateflow 편집기가 상태를 전경으로 가져옵니다.

실행 순서

병렬(AND) 상태의 실행 순서입니다. 이 속성은 배타적(OR) 상태의 경우 표시되지 않습니다. 자세한 내용은 병렬 상태의 실행 순서 항목을 참조하십시오.

모니터링을 위한 출력 만들기

상태에 대한 활성 상태 데이터 출력 포트를 만들지 여부입니다. Monitor State Activity Through Active State Data 항목을 참조하십시오.

함수 인라인 옵션

생성 코드에서의 상태 함수 모양입니다. 옵션은 다음과 같습니다.

  • 자동 — 생성 코드에서의 상태 함수 모양이 내부 계산에 따라 결정됩니다.

  • 인라인 — 함수가 재귀의 일부가 아닌 한 상태 함수에 대한 호출이 코드로 대체됩니다.

  • 함수 — 상태 함수가 별도의 정적 함수로 구현됩니다.

자세한 내용은 Inline State Functions in Generated Code (Simulink Coder) 항목을 참조하십시오. 속성 인스펙터에서는 이 속성을 사용할 수 없습니다.

레이블

상태의 레이블입니다. 자세한 내용은 상태의 동작 정의하기 항목을 참조하십시오. 속성 인스펙터에서는 이 속성을 사용할 수 없습니다.

자체 활동 기록

신호 기록을 활성화할지 여부입니다. 신호 기록은 시뮬레이션 중에 상태의 자체 활동을 MATLAB 작업 공간에 저장합니다. 자세한 내용은 Log Simulation Output for States and Data 항목을 참조하십시오.

기록 이름

상태 활동을 기록하는 데 사용되는 신호 이름입니다.

  • 상태의 이름을 사용하려면 상태 이름 사용을 선택합니다.

  • 다른 이름을 지정하려면 사용자 지정을 선택하고 사용자 지정 기록 이름을 입력합니다.

기록할 마지막 데이터 점 개수

기록되는 데이터 점 개수를 지정된 최댓값으로 제한할지 여부입니다. 예를 들어 최대 데이터 점 개수를 5000으로 설정하면 차트는 시뮬레이션으로 생성된 마지막 5000개의 데이터 점만 기록합니다.

데시메이션

지정된 데시메이션 간격을 사용해 샘플을 건너뛰어서 기록되는 데이터의 양을 제한할지 여부입니다. 예를 들어 데시메이션 간격을 2로 설정하면 차트는 샘플을 하나씩 걸러 기록합니다.

테스트 지점

시뮬레이션 중에 플로팅 스코프를 통해 모니터링하기 위해 상태를 테스트 지점으로 설정할지 여부입니다. 테스트 지점 값을 MATLAB 작업 공간에 기록할 수도 있습니다. 자세한 내용은 Monitor Test Points in Stateflow Charts 항목을 참조하십시오.

설명

상태에 대한 설명입니다.

문서 링크

상태에 대한 온라인 문서 링크입니다. MATLAB 명령 창에 웹 URL 주소를 입력하거나 문서를 HTML 파일 또는 텍스트로 표시하는 MATLAB 명령을 입력할 수 있습니다. 문서 링크 하이퍼링크를 클릭하면 Stateflow가 링크를 실행하여 문서를 표시합니다.

참고 항목

객체

관련 항목