Main Content

활성 상태 데이터를 사용하여 차트 활동 모니터링하기

Stateflow® 차트에 차트 계층 구조와의 상관관계가 높은 데이터가 포함된 경우 활성 상태 데이터를 사용해서 설계를 간소화할 수 있습니다. 활성 상태 데이터를 사용하도록 설정하면 다음과 같은 작업이 가능합니다.

  • 수동 데이터 업데이트 시 차트 활동이 반영되지 않게 할 수 있습니다.

  • 시뮬레이션 데이터 인스펙터에서 차트 활동을 기록하고 모니터링할 수 있습니다.

  • 차트 활동 데이터를 사용해서 다른 서브시스템을 제어할 수 있습니다.

  • 차트 활동 데이터를 다른 Simulink® 블록으로 내보낼 수 있습니다.

자세한 내용은 계층 구조를 생성하여 시스템 복잡성 관리하기 항목을 참조하십시오.

활성 상태 데이터

활성 상태 데이터 출력값을 사용하면 일부 Stateflow 차트의 설계를 단순화할 수 있습니다. 예를 들어, 아래 신호등 모델의 경우 활성 상태가 기호 color의 값을 결정합니다. 활성 상태 데이터를 사용하도록 설정하면 Stateflow가 상태 활동을 추적하여 신호등의 색상을 제공할 수 있습니다. 더 이상 color를 명시적으로 업데이트할 필요가 없으므로 이 기호를 삭제하여 차트 설계를 단순화할 수 있습니다.

Chart modeling a traffic signal, with states called Red, Yellow, and Green. The value of the symbol color indicates which state is active.

Stateflow는 활성 상태 데이터를 출력 포트를 통해 Simulink에 제공하거나 로컬 데이터로서 차트에 제공합니다. 사용 가능한 다양한 활성 상태 데이터 모드가 다음 표에 나와 있습니다.

활동 모드데이터형설명
자체 활동부울활성 상태입니까?
자식 활동열거형어떤 자식 상태가 활성화되어 있습니까?
리프 상태 활동열거형어떤 리프 상태가 활성화되어 있습니까?

활성 상태 데이터를 사용하도록 설정하려면 모니터링할 상태를 선택합니다. 그런 다음, 속성 인스펙터에서 다음을 수행합니다.

  1. 모니터링을 위한 출력 만들기 체크박스를 선택합니다.

  2. 드롭다운 목록에서 활동 모드를 선택합니다.

  3. 활성 상태 데이터 기호에 대한 데이터 이름을 입력합니다.

  4. (선택 사항) 자식 또는 리프 상태 활동의 경우 활성 상태 데이터 유형에 대한 열거형 이름을 입력합니다.

기본적으로 Stateflow는 상태 활동을 출력 데이터로 보고합니다. 활성 상태 데이터 기호의 범위를 로컬 데이터로 변경하려면 기호 창을 사용하십시오.

활성 상태 데이터 예제

이 예제에서는 활성 상태 데이터를 사용해서 한 쌍의 신호등의 제어기 시스템을 모델링합니다.

Traffic Controller 차트 내부에는 신호등 제어 로직을 관리하는 두 개의 병렬 서브차트가 들어 있습니다. 두 서브차트는 Red, Yellow, Green의 세 가지 자식 상태로 구성된 동일한 계층 구조를 갖고 있습니다. 출력 데이터 Light1Light2는 서브차트의 활성 자식 상태에 대응합니다. 이들 신호는 다음을 수행합니다.

  • 애니메이션 신호등의 단계를 결정합니다.

  • 각 신호등에서 대기하는 차량의 수에 영향을 미칩니다.

  • 두 개의 신호등이 동시에 녹색이 될 수 없다는 것을 확인하는 Safety Assertion 서브시스템을 구동합니다.

Traffic Controller 차트 내의 서브차트를 확인하려면 차트 맨 아래 왼쪽 코너에 있는 화살표를 클릭하십시오.

Traffic Controller 서브차트 동작

각 교통 제어기는 Red에서 Green, Yellow로 변경되었다가, 다시 Red로 돌아가며 자식 상태를 순환합니다. 각각의 상태는 신호등 사이클의 한 단계에 해당합니다. 출력 신호 Light1Light2는 주어진 시간에서 어떤 상태가 활성화되는지 나타냅니다.

Chart modeling a traffic signal. The chart uses active state data to indicate which state is active.

빨간등

Red 상태가 활성화되면 신호등 사이클이 시작됩니다. 약간의 지연이 생기면 제어기가 교차로에서 대기 중인 차량을 확인합니다. 한 대 이상의 차량이 감지되거나 지정된 시간이 지나면 제어기는 greenLightRequesttrue로 설정하여 녹색등을 요청합니다. 요청 이후 제어기는 빨간등이 들어온 다른 신호등이 감지되기 전까지 잠시 동안 Red 상태를 유지합니다. 그런 다음 제어기는 Green으로 천이를 수행합니다.

녹색등

Green 상태가 활성화되면 제어기는 greenLightRequestfalse로 설정하여 녹색등 요청을 취소합니다. 제어기가 greenLightLockedtrue로 설정하여 다른 신호등에 녹색등이 들어오지 않게 합니다. 약간의 시간이 지나면 제어기는 다른 제어기의 녹색등 요청을 확인합니다. 요청이 수신되거나 지정된 시간이 지나면 제어기가 Yellow 상태로 천이됩니다.

노란등

Red 상태로 천이되기 전까지 제어기는 지정된 시간 동안 Yellow 상태를 유지합니다. Yellow 상태가 비활성화되면 제어기는 greenLightLockedfalse로 설정하여, 다른 신호등이 안전하게 녹색등으로 바뀔 수 있음을 나타냅니다. 그런 다음 신호등 사이클이 다시 시작됩니다.

신호등 시간 설정

신호등 사이클의 시간 설정을 정의하는 몇 가지 파라미터가 있습니다. 이러한 파라미터 값을 변경하려면 Traffic Controller 차트를 더블 클릭한 다음, 블록 파라미터 대화 상자에 새로운 값을 입력하십시오.

파라미터사전 설정 값설명
REDDELAY6초제어기가 교차로에 있는 차량 확인을 시작하기까지 걸리는 시간입니다. 또한 제어기가 녹색등을 요청한 이후 신호등이 녹색등으로 바뀌기까지 걸리는 최소 시간입니다.
MAXREDDELAY360초제어기가 녹색등을 요청하기 전 차량 확인에 걸리는 최대 시간입니다.
GREENDELAY180초신호등에 녹색등이 유지되는 최대 시간입니다.
MINGREENDELAY120초신호등에 녹색등이 유지되는 최소 시간입니다.
YELLOWDELAY15초신호등에 노란등이 유지되는 시간입니다.

예제 살펴보기

  1. greenLightRequested, greenLightLocked, Light1, Light2에 대해 로깅을 사용하도록 설정합니다. 기호 창에서 각각의 기호를 선택합니다. 그런 다음, 속성 인스펙터기록 아래에서 신호 데이터 기록을 선택합니다.

  2. 시뮬레이션 탭에서 실행 을 클릭합니다.

  3. 시뮬레이션 탭의 결과 검토 아래에서 데이터 인스펙터 를 클릭합니다.

  4. 시뮬레이션 데이터 인스펙터에서, 기록된 신호를 개별 축에 표시합니다. 부울 신호 greenLightRequestedgreenLightLocked가 숫자형 값 0 또는 1로 표시됩니다. 상태 활동 신호 Light1Light2Green, Yellow, Red, None 값과 함께 열거형 데이터로 표시됩니다.

Simulation Data Inspector showing the output of the chart.

시뮬레이션 동안 차트 활동을 추적할 때는 시뮬레이션 데이터 인스펙터에서 확대/축소 및 커서 버튼을 사용할 수 있습니다. 예를 들어, 다음 표에는 시뮬레이션의 첫 300초 동안의 활동이 상세하게 나와 있습니다.

시간설명Light 1Light2greenLightRequestedgreenLightLocked
t = 0시뮬레이션 시작 시, 두 신호등이 모두 빨간등입니다.RedRedfalsefalse
t = 66초(REDDELAY) 후에 양쪽 거리에 대기하는 차량이 있습니다. greenLightRequested = true가 설정되면서 두 신호등 모두 녹색등을 요청합니다.RedRedtruefalse
t = 12

다시 6초(REDDELAY)가 지난 후에 다음과 같은 동작이 수행됩니다.

  • greenLightLocked = truegreenLightRequested = false가 설정되면서 Light 1이 녹색등으로 바뀝니다.

  • greenLightRequested = true가 설정되면서 Light 2가 녹색등을 요청합니다.

GreenRedfalse, 그 다음 truetrue
t = 132

120초(MINGREENDELAY) 후에 Light 1이 노란등으로 바뀝니다.

YellowRedtruetrue
t = 147

15초(YELLOWDELAY) 후에 다음과 같은 동작이 수행됩니다.

  • greenLightLocked = false가 설정되면서 Light 1이 빨간등으로 바뀝니다.

  • greenLightLocked = truegreenLightRequested = false가 설정되면서 Light 2가 녹색등으로 바뀝니다.

RedGreenfalsefalse, 그 다음 true
t = 153

6초(REDDELAY) 후에, greenLightRequested = true가 설정되면서 Light 1이 녹색등을 요청합니다.

RedGreentruetrue
t = 267

Light 2가 녹색등으로 바뀐 지 120초(MINGREENDELAY) 후에 노란등으로 바뀝니다.

RedYellowtruetrue
t = 282

15초(YELLOWDELAY) 후에 다음과 같은 동작이 수행됩니다.

  • greenLightLocked = false가 설정되면서 Light 2가 빨간등으로 바뀝니다.

  • greenLightLocked = truegreenLightRequested = false가 설정되면서 Light 1이 녹색등으로 바뀝니다.

GreenRedfalsefalse, 그 다음 true
t = 288

6초(REDDELAY) 후에, greenLightRequested = true가 설정되면서 Light 2가 녹색등을 요청합니다.

GreenRedtruetrue

시뮬레이션이 t = 1000초에 끝날 때까지 사이클이 반복됩니다.

관련 항목