이벤트를 브로드캐스트하여 병렬 상태 동기화하기
로컬 이벤트를 사용하면 하나의 상태가 동일한 Stateflow® 차트에서 천이나 또 다른 상태의 동작을 트리거할 수 있도록 병렬 상태를 조정할 수 있습니다. 한 상태에서 또 다른 상태로 이벤트를 브로드캐스트하려면, 다음과 같이 이벤트의 이름 및 활성 상태의 이름과 함께 send
연산자를 사용합니다.
send(eventName,stateName)
이벤트를 브로드캐스트하면 수신 상태와 해당 상태의 계층 구조에 포함된 모든 하위 상태에 이벤트가 적용됩니다.
주택 보안 시스템 모델링하기
이 예제에서는 로컬 이벤트를 주택 보안 시스템 설계의 일부로 사용하고 있습니다.
보안 시스템은 알람과 3개의 침입 방지 센서(문 센서, 창문 센서, 동작 감지기)로 구성되어 있습니다. 시스템에서 침입을 감지하면 알람을 비활성화할 수 있는 약간의 시간이 주어집니다. 알람이 비활성화되지 않으면 시스템은 경찰을 호출합니다.
차트는 다음과 같은 병렬 상태 중 하나를 사용하여 각 센서를 모델링합니다.
병렬 상태
Door
는 문 센서를 모델링합니다. 입력 신호D_mode
는 이 센서에 대해Active
모드와Disabled
모드 중에서 선택합니다. 센서가 활성화되면 입력 신호Door_sens
는 침입 발생 가능성을 나타냅니다.병렬 상태
Win
은 창문 센서를 모델링합니다. 입력 신호W_mode
는 이 센서에 대해Active
모드와Disabled
모드 중에서 선택합니다. 센서가 활성화되면 입력 신호Win_sens
는 침입 발생 가능성을 나타냅니다.병렬 상태
Motion
은 동작 감지기를 모델링합니다. 입력 신호M_mode
는 이 센서에 대해Active
모드와Disabled
모드 중에서 선택합니다. 센서가 활성화되면 입력 신호Mot_sens
는 침입 발생 가능성을 나타냅니다.
산발적인 거짓양성의 영향을 완화하기 위해 동작 감지기는 디바운싱 설계를 통합하여, 지속적인 양성 트리거 신호만이 알림을 생성하도록 합니다. 이와 반대로 문 센서와 창문 센서는 하나의 양성 트리거 신호를 침입으로 간주해서 즉각적으로 알림을 생성합니다.
Alarm
이라는 네 번째 병렬 상태는 알람 시스템의 작동 모드를 모델링합니다. 입력 신호 Alarm_active
는 알람에 대해 On
모드와 Off
모드 중에 선택합니다. 센서는 알람 서브시스템이 켜져 있는 동안에 침입을 감지할 경우, 로컬 이벤트 Alert
를 Alarm
상태로 브로드캐스트합니다. 상태 Alarm
의 On
하위 상태에서, 이벤트는 Idle
하위 상태에서 Pending
하위 상태로의 천이를 트리거합니다. Pending
이 활성화되면 알림음이 울리며 주거자에게 침입 발생 가능성을 알립니다. 실수로 알람이 울리는 경우 보안 시스템을 비활성화할 수 있는 약간의 시간이 주거자에게 주어집니다. 그 시간 동안 알람이 비활성화되지 않으면 시스템은 Idle
모드로 돌아가기 전에 경찰에게 도움을 요청합니다.
다른 Simulink 블록과의 조정
Stateflow 차트는 또한 이벤트를 통해 Simulink® 모델의 다른 블록과 통신할 수 있습니다.
출력 이벤트
출력 이벤트는 Stateflow 차트에서 발생하는 이벤트이지만 차트 밖에 있는 Simulink 블록에서 확인할 수 있습니다. 차트는 이 유형의 이벤트를 통해 모델에 있는 다른 블록에게 차트 내에서 발생한 이벤트에 대해 알릴 수 있습니다. 예를 들어 이 예제에서 출력 이벤트 Sound
와 call_police
가 경고음과 경찰 호출을 처리하는 외부 블록을 구동시킵니다. 차트는 로컬 이벤트 Alert
이 상태 Alarm
의 Pending
하위 상태로의 천이를 트리거하면 이러한 이벤트를 브로드캐스트합니다. 특히 Pending
하위 상태에서 entry 동작은 Sound
이벤트를 브로드캐스트합니다. 마찬가지로 Pending
에서 Idle
로의 천이에 대한 조건 동작은 call_police
이벤트를 브로드캐스트합니다. 각각의 경우 출력 이벤트를 브로드캐스트하는 동작은 다음과 같이 이벤트의 이름과 함께 send
연산자를 사용합니다.
send(eventName)
각 출력 이벤트는 차트에 있는 출력 포트에 매핑됩니다. 구성에 따라 해당되는 신호가 Triggered Subsystem 또는 Function-Call Subsystem을 제어할 수 있습니다. 출력 이벤트를 구성하려면 다음을 수행합니다.
모델링 탭의 설계 데이터 아래에서 기호 창과 속성 인스펙터를 선택합니다.
기호 창에서 출력 이벤트를 선택합니다.
속성 인스펙터에서 트리거를 다음 옵션 중 하나로 설정합니다.
Either edge
— 출력 이벤트 브로드캐스트로 인해, 나가는 신호가 0과 1 간에 전환됩니다.Function call
— 출력 이벤트 브로드캐스트로 인해 Simulink 함수 호출 이벤트가 발생합니다.
이 예제에서 출력 이벤트는 에지 트리거를 사용해서 Simulink 모델에 있는 한 쌍의 래치 서브시스템을 활성화합니다. 각 래치는 입력 신호에서 값의 변화를 감지하면 0의 출력으로 돌아가기 전에 잠깐 동안 값 1을 출력합니다.
입력 이벤트
입력 이벤트는 Simulink 블록에서 발생하지만 Stateflow 차트에서 확인할 수 있습니다. 이 유형의 이벤트를 통해 다른 Simulink 블록(다른 Stateflow 차트 포함)은 외부에서 발생한 이벤트를 특정 차트에 알릴 수 있습니다. 예를 들어 이 예제에서 입력 이벤트 sl_call
은 동작 감지기 디바운서의 시간 설정과 경찰 호출 전의 짧은 지연을 제어합니다. 각각의 경우, 이벤트는 시간 연산자 after
에 대한 호출 내부에서 발생하며, 이에 따라 차트가 일정 횟수의 이벤트를 수신한 이후 천이를 트리거합니다.
외부 Simulink 블록은 Stateflow 차트에 있는 트리거 포트에 연결된 신호를 통해 입력 이벤트를 전송합니다. 구성에 따라 입력 이벤트는 신호 값의 변경으로 인해 발생하거나 Simulink 블록에서의 함수 호출을 통해 발생합니다. 입력 이벤트를 구성하려면 다음을 수행합니다.
모델링 탭의 설계 데이터 아래에서 기호 창과 속성 인스펙터를 선택합니다.
기호 창에서 입력 이벤트를 선택합니다.
속성 인스펙터에서 트리거를 다음 옵션 중 하나로 설정합니다.
Rising
— 입력 신호가 0 또는 음수 값에서 양수 값으로 바뀌면 차트가 활성화됩니다.Falling
— 입력 신호가 양수 값에서 0 또는 음수 값으로 바뀌면 차트가 활성화됩니다.Either
— 입력 신호가 어느 방향으로 변하든지 간에 0을 지나면 차트가 활성화됩니다.Function
호출 — Simulink 블록에서 함수를 호출하면 차트가 활성화됩니다.
이 예제에서 Simulink Function-Call Generator 블록은 주기적인 함수 호출을 통해 입력 이벤트 sl_call
을 트리거하여 보안 시스템의 시간 설정을 제어합니다.
예제 살펴보기
이 예제에서 Stateflow 차트에는 여러 개의 Manual Switch 블록에서 오는 입력과 Display 블록에 연결된 한 쌍의 래치 서브시스템으로 가는 출력이 있습니다. 시뮬레이션 중에 다음과 같이 할 수 있습니다.
Switch 블록을 클릭하여 알람과 센서 서브시스템을 활성화하고 침입 감지를 트리거할 수 있습니다.
차트 애니메이션을 통해 차트 내 다양한 활성 상태가 강조 표시되는 것을 확인할 수 있습니다.
Scope 블록과 시뮬레이션 데이터 인스펙터에서 출력 신호를 확인할 수 있습니다.
예를 들어 알람과 센서 서브시스템을 켜고 센서 트리거를 끈 다음, 시뮬레이션을 시작한다고 가정하겠습니다. 시뮬레이션 중에 다음과 같은 동작을 수행합니다.
초가 되면 문 센서를 트리거합니다. 알람이 울리기 시작(
Sound = 1
)하므로 즉시 알람 시스템을 비활성화합니다. 문 센서 트리거를 끄고 알람을 다시 켭니다.초가 되어 창문 센서를 트리거하면 알람이 울리기 시작(
Sound = 0
)합니다. 이번에는 알람을 비활성화하지 않습니다. 초 정도가 되면 보안 시스템이 경찰을 호출(call_police = 1
)합니다.Sound
와call_police
신호는 80초마다 계속해서 0과 1로 전환됩니다.초가 되면 알람을 비활성화합니다.
Sound
와call_police
신호의 전환이 중단됩니다.
시뮬레이션 데이터 인스펙터에 수행된 동작에 대한 Sound
와 call_police
신호의 응답이 표시됩니다.