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