Main Content

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

유한 상태 머신 모델링하기

Stateflow®유한 상태 머신 기반의 그래픽 프로그래밍 환경입니다. Stateflow를 통해 설계를 테스트하거나 디버그하고, 다양한 시뮬레이션 시나리오를 고려하고, 상태 머신에서 코드를 생성할 수 있습니다.

유한 상태 머신은 한 작동(상태) 모드에서 다른 작동 모드로 천이하는 동적 시스템을 표현한 것입니다. 상태 머신이 할 수 있는 일은 다음과 같습니다.

  • 복잡한 소프트웨어 설계 프로세스의 하이 레벨 시작 지점 역할을 합니다.

  • 작동 모드에 집중하고 한 모드에서 다음 모드로 넘어가기 위한 조건에 집중할 수 있게 해 줍니다.

  • 모델이 복잡해지더라도 모델을 분명하고 간결하게 설계할 수 있도록 돕습니다.

제어 시스템 설계는 복잡한 논리를 관리하기 위해 상태 머신에 크게 의존합니다. 응용 분야로는 항공기, 자동차, 로봇공학 제어 시스템 설계 등이 있습니다.

Stateflow 차트 예제

Stateflow 차트에서 상태, 천이 및 데이터를 조합하여 유한 상태 머신을 구현합니다. 다음 Stateflow 차트는 차량의 4단 자동 변속 시스템에서의 기어 변속 논리를 단순화하여 모델로 보여줍니다. 차트에서 각각의 기어 위치는 상태로 나타나며, first, second, third 또는 fourth라는 레이블이 붙어 있는 사각형으로 표시됩니다. 이들이 나타내는 기어와 마찬가지로 이러한 상태는 배타적이기 때문에 한 번에 한 상태만 활성화됩니다.

Stateflow chart with states labeled first, second, third, and fourth. The chart transitions between the states when the speed is higher or lower than a specified amount.

다이어그램 왼쪽의 화살표는 디폴트 천이를 나타내며 활성화될 첫 번째 상태를 나타냅니다. 차트를 실행하면 캔버스에 이 상태가 강조 표시됩니다. 다른 화살표는 상태 간에 발생 가능한 천이를 나타냅니다. 상태 머신의 동특성을 정의하기 위해 각 천이를 부울 조건 또는 트리거 이벤트와 연결합니다. 예를 들어 이 차트에서는 차량 속도를 모니터링하여 속도가 지정된 임계값을 넘어가면 다른 기어로 전환합니다. 시뮬레이션하는 동안 다른 상태가 활성화되면 차트의 강조 표시 부분이 변경됩니다.

Chart animation showing states and transitions activating.

이 차트는 엔진 속도, 토크 등 중요한 요인을 고려하지 않은 단순한 설계입니다. 이 Stateflow 차트를 MATLAB® 또는 Simulink®의 구성요소와 연결해서 더 포괄적이고 실제적인 모델을 생성할 수 있습니다. 다음 예제에서는 가능한 세 가지 접근 방식에 대해 설명합니다.

차트를 MATLAB 객체로 실행하기

이 예제는 자동 변속 시스템의 수정 버전으로 상태 계층 구조, 시간 논리 및 입력 이벤트를 포함합니다.

  • 계층 구조: 차트는 이전 예제의 4단 자동 변속 차트를 감싸는 상위 상태 gear_logic으로 구성되어 있습니다. 이 상위 상태는 차량의 속도와 가속도를 제어합니다. 실행하는 동안 gear_logic은 항상 활성화되어 있습니다.

  • 시간 논리: 상태 gear_logic에서 동작 on every(0.25,sec)는 차량의 속도를 결정합니다. 연산자 every는 MATLAB 타이머를 생성하는데, 이 타이머는 0.25초마다 차트를 실행하고 차트 데이터 speed를 업데이트합니다.

  • 입력 이벤트: 입력 이벤트 SpeedUp, CruiseSlowDown은 차트 데이터 delta의 값을 재설정합니다. 이 데이터는 차량이 각 실행 단계에서 가속할지 아니면 속도를 유지할지를 결정합니다.

직접 명령 창을 통해서 또는 스크립트를 사용해서 MATLAB에서 객체로 이 차트를 실행할 수 있습니다. 그래픽 사용자 인터페이스(GUI)를 통해 차트 상태를 제어하는 MATLAB 앱을 프로그래밍할 수도 있습니다. 예를 들어 아래 사용자 인터페이스는 버튼을 클릭하면 입력 이벤트를 차트로 전송합니다. 차트에서 MATLAB 함수 widgets는 인터페이스의 게이지와 램프 값을 제어합니다.

예제를 시작하려면 앱 디자이너 툴 스트립에서 실행을 클릭하십시오. 사용자 인터페이스 창을 닫기 전까지 예제가 계속 실행됩니다.

또는 Stateflow 편집기의 상태 차트 탭에서 실행을 클릭합니다. 차량 속도를 제어하려면 기호 창의 SpeedUp, SlowDown, Cruise 버튼을 사용합니다. 예제를 중지하려면 중지를 클릭합니다.

Stateflow 차트를 MATLAB 객체로 실행하는 것에 대한 자세한 내용은 MATLAB에서의 실행 항목을 참조하십시오.

차트를 로컬 이벤트가 포함된 Simulink 블록으로 시뮬레이션하기

이 예제는 더 복잡한 자동 변속 시스템 설계에 관한 것입니다. Stateflow 차트가 Simulink 모델에서 블록으로 표시됩니다. 모델의 다른 블록은 관련된 자동차 구성요소를 나타냅니다. 차트는 입력 및 출력 연결을 통해 데이터를 공유하면서 다른 블록과 연결됩니다. 차트를 열려면 shift_logic 블록 맨 아래 왼쪽 코너에 있는 화살표를 클릭합니다.

이 차트에서는 상태 계층 구조, 병렬 처리, 활성 상태 데이터, 로컬 이벤트, 시간 논리가 결합됩니다.

  • 계층 구조: 상태 gear_state에는 4단 자동 변속 차트의 수정된 버전이 포함되어 있습니다. 상태 selection_state에는 작동의 유지 상태, 상단 기어 변속, 하단 기어 변속 모드를 나타내는 하위 상태가 포함되어 있습니다. 상단 또는 하단 기어 변속이 필요한 경우에 이러한 상태가 활성화됩니다.

  • 병렬 처리: 병렬 상태인 gear_stateselection_state는 파선 테두리가 있는 사각형으로 표시됩니다. 이러한 상태는 포함된 하위 상태가 켜지고 꺼져도 동시에 작동됩니다.

  • 활성 상태 데이터: 출력 값 gear는 시뮬레이션하는 동안 기어 선택을 반영합니다. 차트는 gear_state의 활성 하위 상태에서 이 값을 생성합니다.

  • 로컬 이벤트: 이 차트에서는 부울 조건 대신에 로컬 이벤트 UPDOWN을 사용해서 기어 변속을 트리거합니다. 이런 이벤트는 차량 속도가 선택된 기어의 작동 범위를 초과했을 때 selection_statesend 명령에 의해 발생합니다. Simulink 함수 calc_th는 선택된 기어 및 엔진 속도에 근거해서 작동 범위의 경계값을 결정합니다.

  • 시간 논리: 빠른 연속 기어 변속을 막기 위해 selection_state는 시간 논리 연산자 after를 사용해서 UPDOWN 이벤트의 브로드캐스트를 지연시킵니다. 상태에서는 사전 지정된 일정 시간 TWAIT보다 긴 시간 동안 기어 변속이 필요한 경우에만 이런 이벤트 중 하나를 브로드캐스트합니다.

모델 시뮬레이션을 실행하는 방법은 다음과 같습니다.

  1. User Inputs 블록을 더블 클릭합니다. 신호 편집기 대화 상자의 활성 시나리오 목록에서 미리 정의된 브레이크-스로틀(Brake-to-throttle) 프로파일을 선택합니다. 디폴트 프로파일은 Passing Maneuver입니다.

  2. 실행을 클릭합니다. Stateflow 편집기에서 시뮬레이션하는 동안 차트 애니메이션이 활성 상태를 강조 표시합니다. 애니메이션 속도를 늦추려면 디버그 탭의 애니메이션 속도 드롭다운 목록에서 느림(Slow)을 선택합니다.

  3. Scope 블록에서 시뮬레이션 결과를 검토합니다. 각 스코프에는 시뮬레이션하는 동안 입력 신호 그래프가 표시됩니다.

차트를 시간 조건이 포함된 Simulink 블록으로 시뮬레이션하기

이 예제는 차량 변속 시스템 모델링의 또 다른 대안을 보여줍니다. Stateflow 차트가 Simulink 모델에서 블록으로 표시됩니다. 모델의 다른 블록은 관련된 자동차 구성요소를 나타냅니다. 차트는 입력 및 출력 연결을 통해 데이터를 공유하면서 다른 블록과 연결됩니다. 차트를 열려면 Gear_logic 블록 맨 아래 왼쪽 코너에 있는 화살표를 클릭합니다.

이 차트에서는 상태 계층 구조, 활성 상태 데이터, 시간 논리가 결합됩니다.

  • 계층 구조: 이 모델에는 상위 상태 gear에 포함된 4단 자동 변속 차트가 있습니다. 상위 상태는 차량 및 엔진 속도를 모니터링하여 기어 변속을 트리거합니다. 상태 gear의 상단 왼쪽 코너에 나열된 동작은 선택된 기어의 작동 임계값과 부울 조건 updown의 값을 결정합니다. 레이블 en,du는 상태가 처음 활성화될 때(en = entry)와 상태가 활성화되어 있는 동안(du = during) 모든 후속 시간 스텝에서 상태 동작이 실행됨을 나타냅니다.

  • 활성 상태 데이터: 출력 값 gear는 시뮬레이션하는 동안 기어 선택을 반영합니다. 차트는 gear의 활성 하위 상태에서 이 값을 생성합니다.

  • 시간 논리: 빠른 연속 기어 변속을 막기 위해 부울 조건 updown은 시간 논리 연산자 duration을 사용해서 기어 변속을 제어합니다. 차량 속도가 선택된 기어의 작동 범위를 초과하여 사전 지정된 일정 시간 TWAIT(단위: 초)보다 길어질 때 조건이 유효합니다.

모델 시뮬레이션을 실행하는 방법은 다음과 같습니다.

  1. User Inputs 블록을 더블 클릭합니다. 신호 편집기 대화 상자의 활성 시나리오 목록에서 미리 정의된 브레이크-스로틀(Brake-to-throttle) 프로파일을 선택합니다. 디폴트 프로파일은 Passing Maneuver입니다.

  2. 실행을 클릭합니다. Stateflow 편집기에서 시뮬레이션하는 동안 차트 애니메이션이 활성 상태를 강조 표시합니다. 애니메이션 속도를 늦추려면 디버그 탭의 애니메이션 속도 드롭다운 목록에서 느림(Slow)을 선택합니다.

  3. Scope 블록에서 시뮬레이션 결과를 검토합니다. 스코프에는 시뮬레이션하는 동안 선택된 기어의 그래프가 표시됩니다.

다음 단계