Main Content

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

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

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

  • 차트 활동을 반영하려고 데이터를 수동으로 업데이트하는 것을 피할 수 있습니다.

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

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

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

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

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

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

2. 다음 활동 유형 중 하나를 선택합니다.

  • Self activity — 상태가 활성화되어 있는지 여부를 나타내는 부울 값

  • Child activity — 어떤 자식 상태가 활성화되어 있는지 나타내는 열거형 값

  • Leaf state activity — 어떤 리프 상태가 활성화되어 있는지 나타내는 열거형 값

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

4. (선택 사항) Child activity 또는 Leaf state activity의 경우 활성 상태 데이터형에 대한 열거형 이름을 입력합니다.

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

신호등 제어기 모델링하기

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

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

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

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

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

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

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

빨간등

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

녹색등

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

노란등

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

신호등 시간 설정

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

  • REDDELAY — 제어기가 교차로에 있는 차량을 확인하기까지 걸리는 시간입니다. 이 값은 제어기가 녹색등을 요청한 이후 신호등이 녹색으로 바뀌기까지 걸리는 최소 시간이기도 합니다. 디폴트 값은 6초입니다.

  • MAXREDDELAY — 제어기가 녹색등을 요청하기 전까지 차량 확인에 걸리는 최대 시간입니다. 디폴트 값은 360초입니다.

  • GREENDELAY — 신호등에 녹색이 유지되는 최대 시간 길이입니다. 디폴트 값은 180초입니다.

  • MINGREENDELAY — 신호등에 녹색이 유지되는 최소 시간입니다. 디폴트 값은 120초입니다.

  • YELLOWDELAY — 신호등에 노란색이 유지되는 시간입니다. 디폴트 값은 15초입니다.

예제 살펴보기

  1. 왼쪽 아래 코너에 있는 화살표를 클릭하여 차트를 엽니다.

  2. 기호 창에서 greenLightRequested를 선택합니다. 그런 다음, 속성 인스펙터기록 아래에서 신호 데이터 기록을 선택합니다.

  3. greenLightLocked, Light1, Light2에 대해 이전 단계를 반복합니다.

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

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

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

시뮬레이션 동안 차트 활동을 추적할 때는 시뮬레이션 데이터 인스펙터에서 확대/축소 및 커서 버튼을 사용할 수 있습니다. 예를 들어 다음은 시뮬레이션의 첫 300초 동안의 주요 모멘트입니다.

  • $t = 0$ — 시뮬레이션 시작 시, 두 신호등 모두 빨간색입니다. Light1Light2Red이고, greenLightRequestedfalse이고, greenLightLockedfalse입니다.

  • $t = 6$ — 6초(REDDELAY의 디폴트 값) 후에 양쪽 거리에 대기하는 차량이 있습니다. 따라서 두 신호등 모두 녹색등을 요청합니다. Light1Light2는 여전히 Red이고, greenLightRequestedtrue이고, greenLightLockedfalse입니다.

  • $t = 12$ — 다시 6초(REDDELAY의 디폴트 값)가 지난 후에 Light 1은 녹색이 되고, 녹색등 요청을 취소하고, greenLightLockedtrue로 설정합니다. 그러면 Light 2가 녹색등을 요청합니다. Light1Green이고, Light2Red이고, greenLightRequestedfalse가 되었다가 true가 되고, greenLightLockedtrue입니다.

  • $t = 132$ — 120초(MINGREENDELAY의 디폴트 값) 후에 Light 1은 노란색으로 바뀝니다. Light1Yellow이고, Light2Red이고, greenLightRequestedtrue이고, greenLightLockedtrue입니다.

  • $t = 147$ — 15초(YELLOWDELAY의 디폴트 값) 후에 Light 1은 빨간색으로 바뀌고 greenLightLockedfalse로 설정합니다. 그러면 Light 2는 녹색으로 바뀌고, 녹색등 요청을 취소하고, greenLightLockedtrue로 설정합니다. Light1Red이고, Light2Green이고, greenLightRequestedfalse이고, greenLightLockedfalse가 되었다가 true가 됩니다.

  • $t = 153$ — 6초(REDDELAY의 디폴트 값) 후에 Light 1은 녹색등을 요청합니다. Light1Red이고, Light2Green이고, greenLightRequestedtrue이고, greenLightLockedtrue입니다.

  • $t = 267$ — Light 2는 120초(MINGREENDELAY의 디폴트 값) 동안 녹색으로 켜진 후에 노란색으로 바뀝니다. Light1Red이고, Light2Yellow이고, greenLightRequestedtrue이고, greenLightLockedtrue입니다.

  • $t = 282$ — 15초(YELLOWDELAY의 디폴트 값) 후에 Light 2는 빨간색으로 바뀌고 greenLightLockedfalse로 설정합니다. 그러면 Light 1은 녹색으로 바뀌고, 녹색등 요청을 취소하고, greenLightLockedtrue로 설정합니다. Light1Green이고, Light2Red이고, greenLightRequestedfalse이고, greenLightLockedfalse가 되었다가 true가 됩니다.

  • $t = 288$ — 6초(REDDELAY의 디폴트 값) 후에 Light 2는 녹색등을 요청합니다. Light1Green이고, Light2Red이고, greenLightRequestedtrue이고, greenLightLockedtrue입니다.

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

관련 항목