실행하는 동안 Stateflow 객체가 상호 작용하는 방식
실행하는 동안 Stateflow® 객체는 상호 작용하여 실제 동작을 시뮬레이션합니다. 이 예에서는 호텔 체크인 프로세스를 통해 Stateflow 차트의 일반적인 그래픽 객체와 비그래픽 객체가 실행 중 상호 작용하는 방식을 설명합니다.
호텔 체크인 프로세스 모델
이 모델에는 Hotel
이라는 Stateflow 차트가 포함되어 있습니다. 차트는 다음으로 토글할 수 있는 4개의 Manual Switch (Simulink) 블록으로부터 입력 이벤트를 수신합니다.
호텔 체크인
룸서비스 호출
화재 경보 작동
화재 경보 이후 경보 해제 신호 전송
Mux (Simulink) 블록이 이러한 입력 이벤트를 입력으로 구성된 하나의 벡터로 결합하여 차트 맨 위에 있는 트리거 포트에 연결합니다.
또한 차트는 Multiport Switch (Simulink) 블록으로부터 room_type
이라는 입력 신호를 수신합니다. 이 신호의 값은 사용자가 머물고자 하는 객실 유형에 해당합니다. 가능한 옵션은 고급 스위트 룸의 경우 "Executive"
, 패밀리 스위트 룸의 경우 "Family"
, 싱글 룸의 경우 "Single"
입니다.
시뮬레이션하는 동안 룸서비스 요금을 포함한 총 결제 금액이 Display (Simulink) 블록에 표시됩니다.
Hotel
차트에는 상태 및 이력 연결점과 같은 그래픽 객체와 데이터 또는 이벤트와 같은 비그래픽 객체가 포함됩니다. 이 차트의 객체에 레이블을 지정하는 이미지를 보려면 Stateflow Objects 항목을 참조하십시오.
시뮬레이션을 시작하면 입력 이벤트 중 하나에서 상승 에지 또는 하강 에지를 감지할 때까지 차트를 웨이크업 상태로 만들지 않습니다.
Manual Switch 블록을 토글하면 차트가 웨이크업 상태가 되도록 입력 이벤트가 트리거됩니다. 차트가 웨이크업 상태인 동안에는 Multiport Switch 블록에서 차트 입력 room_type
에 대한 값을 읽고 유효한 상태 또는 천이 동작을 수행한 다음 새로운 fee
값을 Display 블록에 출력합니다.
차트는 가능한 모든 실행 단계를 완료한 후 슬립 상태로 돌아가 다음 입력 이벤트를 기다립니다.
차트 초기화
시뮬레이션을 시작하고 입력 이벤트 중 하나를 트리거합니다. 이 동작은 호텔에 들어와 프런트 데스크에서 멈추어 선 것에 해당합니다.
차트 속성 초기화 시 차트 실행(진입)이 비활성화되어 있기 때문에 차트는 입력 이벤트 중 하나에서 상승 에지 또는 하강 에지를 감지할 때까지 슬립 상태를 유지합니다. 감지되면 차트가 웨이크업 상태가 되고 차트의 디폴트 천이를 실행합니다. 상태 Check_in
으로의 디폴트 천이가 발생하여 해당 상태가 활성화됩니다. 그다음 하위 상태 Front_desk
로의 디폴트 천이가 발생하여 해당 상태가 활성화됩니다. 그러면 차트가 슬립 상태로 전환됩니다. 자세한 내용은 Execution of a Chart at Initialization 항목과 Enter a Chart or State 항목을 참조하십시오.
상태 간 천이
하위 상태 Front_desk
가 활성화되어 있는 동안 입력 이벤트 check_in
을 트리거합니다. 이 동작은 호텔 체크인에 해당합니다. 가방을 들고 프런트 데스크에서 객실로 이동하여 가방을 내려놓습니다.
차트에서 check_in
이벤트는 하위 상태 Front_desk
에서 하위 상태 Checked_in
으로 나가는 천이를 방지합니다. 이벤트를 트리거하면 천이가 유효해집니다. Front_desk
의 exit 동작은 로컬 데이터 객체 move_bags
의 값을 1로 설정하고 하위 상태 Front_desk를 비활성화합니다. 그러면 Checked_in
이 활성 상태가 되고 entry 동작이 move_bags
를 0으로 설정합니다. 자세한 내용은 How Stateflow Charts Respond to Events, Exit a State, Enter a Chart or State 항목을 참조하십시오.
디폴트 천이 경로 평가
차트는 Checked_in
상태에서 entry
동작을 실행한 후 디폴트 천이 경로를 평가하여 하위 상태를 파악합니다. 활성화되는 하위 상태는 객실 유형에 해당합니다. 고급 스위트 룸을 선택한 경우 기본요금은 1,500달러입니다. 패밀리 스위트 룸을 선택한 경우 기본요금은 1,000달러입니다. 싱글 룸을 선택한 경우 기본요금은 500달러입니다.
차트는 다음 순서로 디폴트 천이 경로의 분기를 테스트합니다.
차트 입력
room_type
이"Executive"
인 경우 상단 천이가 유효합니다. 조건 동작은 차트 출력fee
를 1500으로 설정하고 하위 상태Executive_suite
를 활성화합니다.차트 입력
room_type
이"Family"
인 경우 중간 천이가 유효합니다. 조건 동작은 fee를 1000으로 설정하고 하위 상태Family_suite
를 활성화합니다.그 외에, 차트 입력
room_type
이"Single"
인 경우 하단 천이가 유효합니다. 조건 동작은 fee를 500으로 설정하고 하위 상태Single_room
을 활성화합니다.
자세한 내용은 Order of Execution for a Set of Flow Charts 항목을 참조하십시오.
배타적 하위 상태가 있는 상태 실행
차트 입력 room_type
의 값이 "Executive"
인 동안 입력 이벤트 check_in
을 트리거하면 하위 상태 Executive_suite
가 활성화됩니다. 이 하위 상태는 고급 스위트 룸에 머무르는 것에 해당합니다. 고급 스위트 룸에는 별도의 침실 공간과 식당 공간이 있어서 항상 스위트 룸의 한 공간에만 있을 수 있습니다. 고급 스위트 룸에 도착하면 가장 먼저 침실로 들어갑니다. 룸서비스를 주문하면 식당 공간으로 들어가 식사를 합니다. 식당 공간에서 음식을 치우고 싶을 때 룸서비스를 다시 주문한 다음 침실로 돌아갑니다.
상태 Executive_suite
는 배타적(OR) 분해를 가집니다. 이 상태는 두 가지 하위 상태인 Bedroom
과 Dining_area
를 가집니다. Executive_suite
가 처음 활성 상태가 되면 Bedroom
으로의 디폴트 천이가 발생하여 해당 하위 상태가 활성화됩니다. 입력 이벤트 room_service
의 브로드캐스트는 Bedroom
에서 Dining_area
로의 천이를 트리거하여 Bedroom
은 비활성 상태가 되고 Dining_area
는 활성 상태가 됩니다. room_service
의 후속 브로드캐스트는 Dining_area
에서 Bedroom
으로 다시 천이를 트리거하여 Bedroom
은 활성 상태가 되고 Dining_area
는 비활성 상태가 됩니다. 자세한 내용은 Enter a Chart or State 항목을 참조하십시오.
병렬 하위 상태가 있는 상태 실행
차트 입력 room_type
의 값이 "Family"
인 동안 입력 이벤트 check_in
을 트리거하면 하위 상태 Family_suite
가 활성화됩니다. 이 하위 상태는 패밀리 스위트 룸에 머무르는 것에 해당합니다. 가족이 스위트 룸에 도착하면 가족 구성원은 두 개의 침실에서 시간을 보낼 수 있습니다. 예를 들어 자녀가 두 번째 침실에서 잠을 자는 동안 부모는 첫 번째 침실에서 영화를 볼 수 있습니다.
상태 Family_suite
는 병렬(AND) 분해를 가집니다. 이 상태는 두 가지 하위 상태인 First_bedroom
과 Second_bedroom
을 가집니다. Family_suite
가 활성 상태가 되면 각 상태의 오른쪽 상단 코너에 있는 숫자로 표시된 실행 순서에 따라 병렬 상태가 웨이크업 상태가 됩니다. 하위 상태는 동시에 활성 상태를 유지합니다. 자세한 내용은 Execution Order for Parallel States 항목과 Enter a Chart or State 항목을 참조하십시오.
상태 동작에서 함수 호출
하위 상태 Checked_in
이 활성화되어 있는 동안 입력 이벤트 room_service
를 트리거합니다. 이 동작은 룸서비스를 부르는 것에 해당합니다. 호텔 숙박료는 객실 유형과 룸서비스 요청 횟수에 따라 다릅니다.
차트가 입력 이벤트 room_service
에서 상승 에지 또는 하강 에지를 감지하면 Checked_In
상태가 이 이벤트에 대해 on
동작을 실행합니다. 상태는 로컬 데이터 객체 service
를 증가시키고 MATLAB® 함수 expenses
를 호출합니다. 이 함수는 룸서비스의 총 요청 수를 입력으로 사용하고 현재 호텔 숙박료를 출력으로 반환합니다. 자세한 내용은 Control Chart Execution by Using Event Actions in a Superstate 항목을 참조하십시오.
이력 연결점이 있는 상태 실행
하위 상태 Checked_in
이 활성화되어 있는 동안 입력 이벤트 fire_alarm
을 트리거합니다. 이는 화재 경보 작동에 해당합니다. 경보가 울리면 건물 밖으로 나와 지정된 대기 공간에서 대기합니다. 그런 다음 입력 이벤트 all_clear
를 트리거합니다. 이는 호텔 내부의 이전 위치로 돌아갈 수 있도록 경보 해제 신호를 전송하는 것에 해당합니다.
차트가 fire_alarm
에 대한 이벤트 브로드캐스트를 수신하면 Check_in
에서 Waiting_area
로의 천이가 발생합니다. Check_in
, Checked_in
, Executive_suite
의 이력 연결점은 이들 각 상태에서의 마지막 활성 하위 상태를 기록합니다. 활성 상태는 가장 안쪽에 있는 하위 상태부터 시작하여 계층 구조의 오름차순으로 비활성 상태가 됩니다. Check_in
이 비활성 상태가 되면 Waiting_area
가 활성 상태가 됩니다.
차트가 all_clear
에 대한 이벤트 브로드캐스트를 수신하면 천이가 Waiting_area
에서 Check_in
의 이전 활성 하위 상태로 발생합니다. Check_in
부터 시작하여 Check_in
의 하위 상태가 계층 구조의 내림차순으로 활성화되기 전에 Waiting_area
는 비활성 상태가 됩니다.
자세한 내용은 How Stateflow Charts Respond to Events, Exit a State, Enter a Chart or State 항목을 참조하십시오.
참고 항목
Manual Switch (Simulink) | Mux (Simulink) | Multiport Switch (Simulink) | Display (Simulink)