이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
시간 논리를 사용해서 차트 동작 스케줄링하기
Stateflow® 차트의 동작을 시뮬레이션 시간 측면에서 정의하려면 시간 논리 연산자를 차트의 상태 및 천이 동작에 포함시킵니다. 시간 논리 연산자는 어떤 상태가 활성 상태를 유지하거나 부울 조건이 true를 유지할 수 있는 시간의 길이를 나타내는 내장 함수입니다. 시간 논리를 통해 다음 항목의 시간 설정을 제어할 수 있습니다.
상태 간 천이
함수 호출
변수 값 변경
자세한 내용은 동작을 사용하여 차트 작동 방식 정의하기 항목을 참조하십시오.
시간 논리 연산자
절대시간 시간 논리의 가장 일반적인 연산자는 after
, elapsed
, duration
입니다.
연산자 | 구문 | 설명 |
---|---|---|
| 관련 상태가 활성화된 이후로 시뮬레이션 시간 | |
| 관련 상태가 활성화된 이후로 경과한 시뮬레이션 시간을 초 단위로 반환합니다. | |
| 부울 조건 |
각 연산자는 다음과 같은 상황이 발생할 때마다 관련 타이머를 0으로 초기화합니다.
연산자가 포함된 상태가 재활성화됩니다.
연산자가 포함된 천이를 위한 소스 상태가 재활성화됩니다.
duration
연산자의 부울 조건이false
가 됩니다.
참고
일부 연산자(예: after
)는 이벤트 기반 시간 논리 및 초(sec
), 밀리초(msec
), 마이크로초(usec
) 단위의 절대시간 시간 논리를 지원합니다. 자세한 내용은 Control Chart Execution by Using Temporal Logic 항목을 참조하십시오.
시간 논리 예제
이 예제에서는 시간 논리를 사용해서 보일러 내부 온도를 조절하는 Bang-Bang Controller를 모델링합니다.
이 예제는 Stateflow 차트와 Simulink® 서브시스템으로 구성되어 있습니다. Bang-Bang Controller 차트에서는 현재 보일러 온도와 기준점을 비교해 보일러를 켤 것인지 결정합니다. Boiler Plant Model 서브시스템은 제어기 상태에 따라 온도를 높이거나 낮추는 보일러 내부의 동특성을 모델링합니다. 시뮬레이션의 다음 단계를 위해 보일러 온도가 Controller 차트로 다시 들어갑니다.
Bang-Bang Controller 차트는 다음을 위해 시간 논리 연산자 after
를 사용합니다.
보일러가 켜지고 꺼지는 사이에 뱅뱅 순환 시간 설정을 조정합니다.
보일러 작동 모드에 따라 다른 속도로 점멸하는 상태 LED를 제어합니다.
보일러 및 LED 서브시스템의 동작을 결정하는 타이머는 제어기 시뮬레이션을 차단하거나 방해하지 않고 다른 타이머와 독립적으로 작동합니다.
뱅뱅 순환 시간 설정
Bang-Bang Controller 차트에는 보일러의 두 가지 작동 모드(On
및 Off
)를 나타내는 한 쌍의 하위 상태가 포함되어 있습니다. 차트는 활성 상태 출력 데이터 boiler
를 사용해서 활성화된 하위 상태를 나타냅니다.
On
및 Off
하위 상태 사이의 천이에 있는 레이블은 Bang-Bang Controller의 동작을 정의합니다.
천이 | 레이블 | 설명 |
---|---|---|
On 에서 Off 로 천이 | after(20,sec) | On 상태에서 20초가 지난 후 Off 상태로 천이됩니다. |
Off 에서 On 으로 천이 | after(40,sec)[cold()] | 보일러 온도가 그래픽 함수 cold() 에 의해 정의된 기준점 이하로 떨어지면 Off 상태에서 40초가 지난 후 On 상태로 천이됩니다. |
On 에서 Off 로 천이 | turnOff | 보일러 온도가 기준점 이상이어서 On 상태 내부 천이 논리에서 보일러 끄기를 요청하면 Off 상태로 천이됩니다. |
이러한 천이 동작으로 인해 뱅뱅 순환 시간 설정은 보일러 현재 온도에 따라 달라집니다. 시뮬레이션이 시작되고 보일러가 차가울 때, 제어기는 Off
상태에서는 40초, On
상태에서는 20초의 시간을 소요합니다. 시간이 t = 478초가 되면 보일러 온도가 기준점에 도달합니다. 그때부터 보일러는 Off
상태에서 손실된 열만 보충합니다. 이때 제어기는 Off
상태에서는 40초, On
상태에서는 4초의 시간을 소요합니다.
상태 LED 시간 설정
Off
상태에는 동작 after(5,sec)
의 보호를 받는 자가 루프 천이가 포함된 하위 상태 Flash
가 포함되어 있습니다. 이러한 천이로 인해 Off
상태가 활성화되면 하위 상태에서는 entry 동작을 실행하고 5초 간격으로 그래픽 함수 flash_LED
를 호출합니다. 함수는 출력 기호 LED
의 값을 0과 1 간에 전환합니다.
On
상태는 그래픽 함수 flash_LED
를 유형 en,du
의 상태 동작으로 호출합니다. On
상태가 활성화되면 시뮬레이션 시간 스텝마다(여기서는 1초 간격) 함수를 호출하여 출력 기호 LED
의 값을 0과 2 간에 전환합니다.
이러한 동작으로 인해 상태 LED 시간 설정은 보일러 작동 모드에 따라 달라집니다. 예를 들면 다음과 같습니다.
t = 0초 ~ t = 40초일 때는 보일러가 꺼지고
LED
신호가 5초 간격으로 0과 1 간에 전환됩니다.t = 40초 ~ t = 60초일 때는 보일러가 켜지고
LED
신호가 1초 간격으로 0과 2 간에 전환됩니다.t = 60초 ~ t = 100초일 때는 보일러가 다시 한번 꺼지고
LED
신호가 5초 간격으로 0과 1 간에 전환됩니다.
예제 살펴보기
추가적인 시간 논리를 사용해서 보일러 온도가 기준점에 도달했을 때 뱅뱅 순환 시간 설정이 변경되는 방식을 조사할 수 있습니다.
elapsed
연산자와duration
연산자를 호출하는 새로운 상태 동작을 입력합니다.On
상태에서는Timer1
을On
상태가 활성화되어 있는 시간의 길이라고 정의합니다.en,du,ex: Timer1 = elapsed(sec)
Off
상태에서는Timer2
를 보일러 온도가 기준점 이상이 되는 시간의 길이라고 정의합니다.en,du,ex: Timer2 = duration(temp>=reference)
레이블
en,du,ex
는 해당되는 상태가 활성화될 때 이러한 동작이 발생한다는 것을 나타냅니다.기호 창에서 정의되지 않은 기호 연결 맺기
를 클릭합니다. Stateflow 편집기는 기호
Timer1
과Timer2
를 출력 데이터로서 연결을 맺습니다.
Timer1
및Timer2
에 대해 로깅을 사용하도록 설정합니다. 기호 창에서 각각의 기호를 선택합니다. 그런 다음, 속성 인스펙터의 기록 아래에서 신호 데이터 기록을 선택합니다.시뮬레이션 탭에서 실행
을 클릭합니다.
시뮬레이션 탭의 결과 검토 아래에서 데이터 인스펙터
를 클릭합니다.
시뮬레이션 데이터 인스펙터에서 신호
boiler
와Timer1
을 동일한 축 세트에 표시합니다. 플로팅에 다음과 같은 내용이 표시됩니다.뱅뱅 순환의
On
단계는 일반적으로 보일러가 차가울 때는 20초, 보일러가 따뜻할 때는 4초간 지속됩니다.보일러가 기준 온도에 처음으로 도달하면 순환이 중간에 중지되고 제어기의
On
상태가 18초 동안만 지속됩니다.보일러가 따뜻하고 처음 순환이 후속 순환에 비해 약간 짧은 경우에는 제어기의
On
상태가 3초 동안만 지속됩니다.
시뮬레이션 데이터 인스펙터에서 신호
boiler
와Timer2
를 동일한 축 세트에 표시합니다. 플로팅에 다음과 같은 내용이 표시됩니다.보일러가 따뜻해지면 뱅뱅 순환의
Off
단계에서 일반적으로 9초가 지나면 냉각됩니다.보일러가 기준 온도에 처음으로 도달했을 때는 두 배의 시간(19초)이 지나야 냉각됩니다.
짧은 순환과 긴 냉각 시간은 On
상태에 포함된 하위 상태 계층 구조의 결과입니다. 보일러가 기준 온도에 처음으로 도달하면 HIGH
에서 NORM
로의 천이에 의해 제어기가 추가 시간 스텝 동안 켜진 상태로 유지되기 때문에 보일러는 일반적인 상태보다는 따뜻한 상태가 됩니다. 이후 순환에서는 이력 연결점 으로 인해
On
단계가 활성 NORM
하위 상태로 시작됩니다. 보일러가 기준 온도에 도달하면 제어기가 즉시 꺼지면서 보일러가 냉각됩니다.