Stateflow에서 서브시스템 스케줄링하기
이 예제에서는 Stateflow®에서 서브시스템 실행을 스케줄링하는 세 가지 방법을 보여줍니다. 이 모델은 다음 세 가지 시나리오를 다룹니다.
하나의 스텝에 여러 서브시스템이 실행되도록 스케줄링하기
하나의 스텝에 하나의 서브시스템이 여러 번 실행되도록 스케줄링하기
여러 서브시스템이 지정된 시간에 실행되도록 스케줄링하기
각 시나리오마다 다른 유형의 Stateflow 논리를 사용하여 서브시스템의 실행을 관리할 수 있습니다. 하나의 스텝에 여러 서브시스템이 실행되도록 스케줄링하려면 사다리 로직을 사용합니다. 사다리 로직 스케줄러 설계 패턴은 하나의 시간 스텝에 여러 Simulink® 서브시스템을 어떤 순서로 실행할지 지정할 수 있습니다. 하나의 스텝에 하나의 서브시스템이 여러 번 실행되도록 스케줄링하려면 루프 논리를 사용합니다. 루프 스케줄러 설계 패턴은 하나의 시간 스텝에 하나의 Simulink 서브시스템을 여러 번 실행할 수 있습니다. 여러 서브시스템이 지정된 시간에 실행되도록 스케줄링하려면 시간 논리를 사용합니다. 시간 논리 스케줄러 설계 패턴은 Simulink 서브시스템들이 지정된 시간에 실행되도록 스케줄링할 수 있습니다.
이 세 모델 모두 Stateflow 스케줄러를 통해 Simulink 모델에서 서브시스템 실행에 대한 제어를 확장하여, 실행 순서가 블록 연결과 샘플 시간 전파에 따라 묵시적으로 결정됩니다.
하나의 스텝에 여러 서브시스템이 실행되도록 스케줄링하기
이 예제 부분은 Stateflow에서 사다리 로직 스케줄러를 설계하는 방법을 보여줍니다.
open_system("sf_ladder_logic_scheduler")
Ladder Logic Scheduler
차트는 일련의 함수 호출 출력 이벤트를 브로드캐스트하여 3개의 Function-Call Subsystem(A1
, A2
, A3
)을 실행합니다. 각 시간 스텝 동안 다음 작업이 수행됩니다.
Simulink 모델이 1밀리초 펄스 생성기의 상승 에지에서
Edge to Function
차트를 활성화합니다.Edge to Function 차트가 함수 호출 출력 이벤트
call
을 브로드캐스트하여Ladder Logic Scheduler
차트를 활성화합니다.Ladder Logic Scheduler
차트가 순차적 사다리 로직을 사용하여 입력 신호u1
과u2
의 값에 따라 함수 호출 출력 이벤트를 브로드캐스트합니다.
차트는 각 조건을 순차적으로 평가합니다. 조건이 유효하면, 차트에서 send
연산자를 호출하여 출력 이벤트를 브로드캐스트합니다. 이에 해당하는 서브시스템은 출력값을 계산한 후 제어를 Ladder Logic Scheduler
차트로 반환합니다.
모델을 시뮬레이션하면 스코프에 각 Function-Call Subsystem의 입력값과 출력값이 표시됩니다. 각 시간 스텝 동안 Ladder Logic Scheduler
차트는 입력 신호 u1
과 u2
의 값에 따라 서브시스템을 실행합니다.
u1
이 양수이면, 차트는 서브시스템A1
을 실행하기 위한 함수 호출 출력 이벤트를 보냅니다. 이 서브시스템은u1
값에 이득3
을 곱한 후, 이 값을 Ladder Logic Scheduler 차트에 입력u2
로 다시 전달합니다. 제어는Ladder Logic Scheduler
차트의 그다음 조건에 반환됩니다.u2
가1
보다 크면, 차트는 서브시스템A2
를 실행하기 위한 함수 호출 출력 이벤트를 보냅니다. 이 서브시스템은u2
의 값을1
씩 줄입니다. 제어는Ladder Logic Scheduler
차트의 마지막 조건에 반환됩니다.u2
가2
보다 작으면, 차트는 서브시스템A3
을 실행하는 함수 호출 출력 이벤트를 보냅니다. 이 서브시스템은 입력값에 이득2
를 곱합니다.
스코프에서 수평한 부분은 서브시스템이 실행되지 않을 때의 시간 스텝을 나타냅니다.
하나의 스텝에 하나의 서브시스템이 여러 번 실행되도록 스케줄링하기
이 예제 부분은 Stateflow에서 루프 스케줄러를 설계하는 방법을 보여줍니다.
open_system("sf_loop_scheduler")
Loop Scheduler
차트는 함수 호출 출력 이벤트를 브로드캐스트하여 매 시간 스텝에서 Function-Call Subsystem A1
을 여러 번 실행합니다. 각 시간 스텝 동안 다음 작업이 수행됩니다.
Simulink 모델이 1밀리초 펄스 생성기의 상승 에지에서
Edge to Function
차트를 활성화합니다.Edge to Function
차트가 함수 호출 출력 이벤트call
을 브로드캐스트하여Loop Scheduler
차트를 활성화합니다.Loop Scheduler
차트가send
연산자를 호출하여 함수 호출 출력 이벤트A1
을 여러 번 브로드캐스트합니다.
이벤트 A1
의 각 브로드캐스트마다 서브시스템 A1
을 실행합니다. 서브시스템은 출력값을 계산한 후 제어를 Loop Scheduler
차트로 다시 반환합니다.
모델을 시뮬레이션하면 스코프에 각 시간 스텝에서의 y
값이 표시됩니다. 각 시간 스텝 동안 y
값이 25씩 증가하며 그 이유는 다음과 같습니다.
Loop Scheduler
차트 내 플로우 차트가 10회 반복되는for
루프를 구현합니다.for
루프의 각 반복마다, 차트가y
를 1(입력u1
의 상수 값)씩 증분합니다.차트가 서브시스템
A1
로 출력 이벤트를 브로드캐스트할 때마다 서브시스템이y
를 1.5씩 증분합니다.
서브시스템이 지정된 시간에 실행되도록 스케줄링하기
이 예제 부분은 Stateflow에서 시간 논리 스케줄러를 설계하는 방법을 보여줍니다.
open_system("sf_temporal_logic_scheduler")
이 예제에서, Temporal Logic Scheduler
차트는 2개의 상태를 포함하고 있으며, 이 두 상태는 시간 논리 연산자 every
에 의해 결정된 서로 다른 속도로 3개의 Function-Call Subsystem(A1
, A2
, A3
)이 실행되도록 스케줄링합니다.
FastScheduler
상태가 활성이면, 차트는 입력 이벤트 call
이 차트를 웨이크업 상태로 바꾸는 기본 속도의 일정 비율 속도로 여러 Simulink 서브시스템의 함수 호출을 스케줄링합니다.
차트가 기본 속도로 서브시스템
A1
을 실행하는 이벤트를 보냅니다.차트가 기본 속도의 절반 속도로 서브시스템
A2
를 실행하는 이벤트를 보냅니다.차트가 기본 속도의 1/4배 속도로 서브시스템
A3
을 실행하는 이벤트를 보냅니다.
SlowScheduler
상태가 활성이면, 차트는 A1
, A2
, A3
의 함수 호출을 기본 속도의 1/8배, 1/16배, 1/32배 속도로 스케줄링합니다.
차트는 call
이벤트가 100회 호출될 때마다 빠른 실행 모드와 느린 실행 모드 간에 번갈아 전환합니다.
모델을 시뮬레이션하면 스코프에 각 시간 스텝에서의 y 값이 표시됩니다. 값의 변화는 실행 속도의 차이를 보여줍니다.
차트가 서브시스템을 느린 속도로 실행할 때(예:
t=4.5
~t=4.6
,t=4.7
~t=4.8
,t=4.9
~t=5
), 값은 느리게 변화합니다.차트가 서브시스템을 빠른 속도로 실행할 때(예:
t=4.6
~t=4.7
,t=4.8
~t=4.9
), 값은 빠르게 변화합니다.