주요 콘텐츠

Stateflow에서 서브시스템 스케줄링하기

이 예제에서는 Stateflow®에서 서브시스템 실행을 스케줄링하는 세 가지 방법을 보여줍니다. 이 모델은 다음 세 가지 시나리오를 다룹니다.

  1. 하나의 스텝에 여러 서브시스템이 실행되도록 스케줄링하기

  2. 하나의 스텝에 하나의 서브시스템이 여러 번 실행되도록 스케줄링하기

  3. 여러 서브시스템이 지정된 시간에 실행되도록 스케줄링하기

각 시나리오마다 다른 유형의 Stateflow 논리를 사용하여 서브시스템의 실행을 관리할 수 있습니다. 하나의 스텝에 여러 서브시스템이 실행되도록 스케줄링하려면 사다리 로직을 사용합니다. 사다리 로직 스케줄러 설계 패턴은 하나의 시간 스텝에 여러 Simulink® 서브시스템을 어떤 순서로 실행할지 지정할 수 있습니다. 하나의 스텝에 하나의 서브시스템이 여러 번 실행되도록 스케줄링하려면 루프 논리를 사용합니다. 루프 스케줄러 설계 패턴은 하나의 시간 스텝에 하나의 Simulink 서브시스템을 여러 번 실행할 수 있습니다. 여러 서브시스템이 지정된 시간에 실행되도록 스케줄링하려면 시간 논리를 사용합니다. 시간 논리 스케줄러 설계 패턴은 Simulink 서브시스템들이 지정된 시간에 실행되도록 스케줄링할 수 있습니다.

이 세 모델 모두 Stateflow 스케줄러를 통해 Simulink 모델에서 서브시스템 실행에 대한 제어를 확장하여, 실행 순서가 블록 연결과 샘플 시간 전파에 따라 묵시적으로 결정됩니다.

하나의 스텝에 여러 서브시스템이 실행되도록 스케줄링하기

이 예제 부분은 Stateflow에서 사다리 로직 스케줄러를 설계하는 방법을 보여줍니다.

open_system("sf_ladder_logic_scheduler")

A model with two charts named Edge to Function and Ladder Logic Scheduler. The Ladder Logic Scheduler chart has two inputs named u1 and u2 and an output named y. Additionally, the Ladder Logic Scheduler chart triggers three subsystems named A1, A2, and A3 with output events.

Ladder Logic Scheduler 차트는 일련의 함수 호출 출력 이벤트를 브로드캐스트하여 3개의 Function-Call Subsystem(A1, A2, A3)을 실행합니다. 각 시간 스텝 동안 다음 작업이 수행됩니다.

  1. Simulink 모델이 1밀리초 펄스 생성기의 상승 에지에서 Edge to Function 차트를 활성화합니다.

  2. Edge to Function 차트가 함수 호출 출력 이벤트 call을 브로드캐스트하여 Ladder Logic Scheduler 차트를 활성화합니다.

  3. Ladder Logic Scheduler 차트가 순차적 사다리 로직을 사용하여 입력 신호 u1u2의 값에 따라 함수 호출 출력 이벤트를 브로드캐스트합니다.

A chart that only contains junctions. If an input named u1 is greater than 0, the chart triggers the A1 subsystem with an event. If an input named u2 is greater than 1, the chart also triggers the A2 subsystem with an event. Finally, if u2 is greater than 2, the chart also triggers the A3 subsystem with an event.

차트는 각 조건을 순차적으로 평가합니다. 조건이 유효하면, 차트에서 send 연산자를 호출하여 출력 이벤트를 브로드캐스트합니다. 이에 해당하는 서브시스템은 출력값을 계산한 후 제어를 Ladder Logic Scheduler 차트로 반환합니다.

모델을 시뮬레이션하면 스코프에 각 Function-Call Subsystem의 입력값과 출력값이 표시됩니다. 각 시간 스텝 동안 Ladder Logic Scheduler 차트는 입력 신호 u1u2의 값에 따라 서브시스템을 실행합니다.

  1. u1이 양수이면, 차트는 서브시스템 A1을 실행하기 위한 함수 호출 출력 이벤트를 보냅니다. 이 서브시스템은 u1 값에 이득 3을 곱한 후, 이 값을 Ladder Logic Scheduler 차트에 입력 u2로 다시 전달합니다. 제어는 Ladder Logic Scheduler 차트의 그다음 조건에 반환됩니다.

  2. u21보다 크면, 차트는 서브시스템 A2를 실행하기 위한 함수 호출 출력 이벤트를 보냅니다. 이 서브시스템은 u2의 값을 1씩 줄입니다. 제어는 Ladder Logic Scheduler 차트의 마지막 조건에 반환됩니다.

  3. u22보다 작으면, 차트는 서브시스템 A3을 실행하는 함수 호출 출력 이벤트를 보냅니다. 이 서브시스템은 입력값에 이득 2를 곱합니다.

스코프에서 수평한 부분은 서브시스템이 실행되지 않을 때의 시간 스텝을 나타냅니다.

하나의 스텝에 하나의 서브시스템이 여러 번 실행되도록 스케줄링하기

이 예제 부분은 Stateflow에서 루프 스케줄러를 설계하는 방법을 보여줍니다.

open_system("sf_loop_scheduler")

A model with two charts named Edge to Function 1 and Loop Scheduler. The Loop Scheduler chart uses output events to trigger a subsystem named A4.

Loop Scheduler 차트는 함수 호출 출력 이벤트를 브로드캐스트하여 매 시간 스텝에서 Function-Call Subsystem A1을 여러 번 실행합니다. 각 시간 스텝 동안 다음 작업이 수행됩니다.

  1. Simulink 모델이 1밀리초 펄스 생성기의 상승 에지에서 Edge to Function 차트를 활성화합니다.

  2. Edge to Function 차트가 함수 호출 출력 이벤트 call을 브로드캐스트하여 Loop Scheduler 차트를 활성화합니다.

  3. Loop Scheduler 차트가 send 연산자를 호출하여 함수 호출 출력 이벤트 A1을 여러 번 브로드캐스트합니다.

The Loop Scheduler chart, which only contains junctions. The junctions form a loop that, on each iteration, sends an event to the A1 subsystem and increments an output named y.

이벤트 A1의 각 브로드캐스트마다 서브시스템 A1을 실행합니다. 서브시스템은 출력값을 계산한 후 제어를 Loop Scheduler 차트로 다시 반환합니다.

모델을 시뮬레이션하면 스코프에 각 시간 스텝에서의 y 값이 표시됩니다. 각 시간 스텝 동안 y 값이 25씩 증가하며 그 이유는 다음과 같습니다.

  • Loop Scheduler 차트 내 플로우 차트가 10회 반복되는 for 루프를 구현합니다.

  • for 루프의 각 반복마다, 차트가 y를 1(입력 u1의 상수 값)씩 증분합니다.

  • 차트가 서브시스템 A1로 출력 이벤트를 브로드캐스트할 때마다 서브시스템이 y를 1.5씩 증분합니다.

A Scope block graph that shows the value of the output named y increasing in a series of steps and plateaus.

서브시스템이 지정된 시간에 실행되도록 스케줄링하기

이 예제 부분은 Stateflow에서 시간 논리 스케줄러를 설계하는 방법을 보여줍니다.

open_system("sf_temporal_logic_scheduler")

A model with two charts named Edge to Function 2 and Temporal Logic Scheduler. A 1-millisecond pulse block triggers the Edge to Function 2 block, which in turn uses a function-call input event to trigger the Temporal Logic Scheduler chart

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

A Scope block graph that shows how the output named y changes over time.

참고 항목

도움말 항목