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), 값은 빠르게 변화합니다.
