주요 콘텐츠

시간 논리를 사용하여 차트 실행 제어하기

시간 논리는 시간의 측면에서 차트 실행을 제어합니다. 상태 동작과 천이에서는 다음 두 가지 유형의 시간 논리를 사용할 수 있습니다.

  • 이벤트 기반 시간 논리는 반복 이벤트를 추적합니다. 명시적 이벤트 또는 묵시적 이벤트를 기준 이벤트로 사용할 수 있습니다.

  • 절대시간 시간 논리는 상태가 활성화된 이후에 경과한 시간을 추적합니다. 절대시간 시간 논리 연산자의 시간 설정은 Stateflow® 차트의 유형에 따라 달라집니다.

    • Simulink® 모델의 차트는 시뮬레이션 시간의 관점에서 절대시간 시간 논리를 정의합니다.

    • MATLAB®의 독립 실행형 차트는 절대시간 시간 논리를 1밀리초의 정밀도로 제한되는 wall-clock 시간의 관점에서 정의합니다.

시간 논리 연산자

시간 논리에 따라 Stateflow 차트의 동작을 정의하려면 이 표에 나열된 연산자를 사용하십시오. 이러한 연산자는 다음과 같은 경우에 나타날 수 있습니다.

  • 상태 on 동작

  • 상태에서 시작된 천이 경로의 동작

각 시간 논리 연산자에는 동작이 표시되거나 천이 경로가 시작되는 상태인 관련 상태가 있습니다. 관련 상태가 다시 활성화될 때마다 Stateflow 차트는 각 연산자가 사용하는 카운터를 재설정합니다.

연산자구문설명
after

after(n,E)

n은 양의 정수이거나 양의 정수 값으로 평가되는 표현식입니다.

E는 연산자의 기준 이벤트입니다.

관련 상태가 활성화된 후 이벤트 E가 최소 n번 이상 발생한 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

상태가 활성화된 후 E의 세 번째 브로드캐스트부터 시작하여 차트가 이벤트 E의 브로드캐스트를 처리할 때 상태 메시지를 표시합니다.

on after(3,E):
   disp("ON");

상태가 활성화된 후 E의 다섯 번째 브로드캐스트부터 시작하여 차트가 이벤트 E의 브로드캐스트를 처리할 때 관련 상태에서 천이됩니다.

after(5,E)

after(n,tick)

n은 양의 정수이거나 양의 정수 값으로 평가되는 표현식입니다.

관련 상태가 활성화된 후 차트가 최소 n번 이상 웨이크업 상태가 된 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

Simulink 모델의 Stateflow 차트에 입력 이벤트가 있는 경우 묵시적 이벤트 tick은 지원되지 않습니다. 자세한 내용은 묵시적 이벤트를 사용하여 차트 동작 제어하기 항목을 참조하십시오.

상태가 활성화된 후 차트가 적어도 일곱 번째로 웨이크업 상태가 될 때 관련 상태에서 천이되지만, 변수 temp가 98.6보다 큰 경우에만 천이됩니다.

after(7,tick)[temp > 98.6]

after(n,sec)

after(n,msec)

after(n,usec)

n은 양의 실수이거나 양의 실수 값으로 평가되는 표현식입니다.

관련 상태가 활성화된 후 최소 n단위의 시간이 경과한 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

Simulink 모델의 차트에서는 시간을 초(sec), 밀리초(msec) 또는 마이크로초(usec)로 지정합니다.

MATLAB의 독립 실행형 차트에서는 시간을 초(sec) 단위로 지정합니다. 연산자는 차트를 웨이크업 상태로 만들기 위한 묵시적 이벤트를 생성하는 MATLAB timer 객체를 만듭니다. MATLAB timer 객체의 정밀도는 1밀리초로 제한됩니다. 자세한 내용은 Events in Standalone Charts 항목을 참조하십시오.

최소 12.3초 동안 관련 상태가 활성화되어 있을 때 시작하여 차트가 웨이크업 상태가 될 때마다 temp 변수를 LOW로 설정합니다.

on after(12.3,sec):
   temp = LOW;
at

at(n,E)

n은 양의 정수이거나 양의 정수 값으로 평가되는 표현식입니다.

E는 연산자의 기준 이벤트입니다.

관련 상태가 활성화된 후 이벤트 E가 정확히 n번 발생한 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

상태가 활성화된 후 차트가 이벤트 E의 세 번째 브로드캐스트를 처리할 때 상태 메시지를 표시합니다.

on at(3,E):
   disp("ON");

상태가 활성화된 후 차트가 이벤트 E의 다섯 번째 브로드캐스트를 처리할 때 관련 상태에서 천이됩니다.

at(5,E)

at(n,tick)

n은 양의 정수이거나 양의 정수 값으로 평가되는 표현식입니다.

관련 상태가 활성화된 후 차트가 정확히 n번 웨이크업 상태가 된 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

Simulink 모델의 Stateflow 차트에 입력 이벤트가 있는 경우 묵시적 이벤트 tick은 지원되지 않습니다. 자세한 내용은 묵시적 이벤트를 사용하여 차트 동작 제어하기 항목을 참조하십시오.

상태가 활성화된 후 차트가 일곱 번째로 웨이크업 상태가 될 때 관련 상태에서 천이되지만, 변수 temp가 98.6보다 큰 경우에만 천이됩니다.

at(7,tick)[temp > 98.6]

at(n,sec)

n은 양의 실수이거나 양의 실수 값으로 평가되는 표현식입니다.

관련 상태가 활성화된 후 정확히 n초가 경과한 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

at를 절대시간 시간 논리 연산자로 사용하는 것은 MATLAB의 독립 실행형 차트에서만 지원됩니다. 연산자는 차트를 웨이크업 상태로 만들기 위한 묵시적 이벤트를 생성하는 MATLAB timer 객체를 만듭니다. MATLAB timer 객체의 정밀도는 1밀리초로 제한됩니다. 자세한 내용은 Events in Standalone Charts 항목을 참조하십시오.

상태가 정확히 12.3초 동안 활성화되어 있었던 경우 temp 변수를 HIGH로 설정합니다.

on at(12.3,sec):
   temp = HIGH;
before

before(n,E)

n은 양의 정수이거나 양의 정수 값으로 평가되는 표현식입니다.

E는 연산자의 기준 이벤트입니다.

관련 상태가 활성화된 이후 이벤트 En회 미만 발생한 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

시간 논리 연산자 before는 Simulink 모델의 Stateflow 차트에서만 지원됩니다.

상태가 활성화된 후 차트가 이벤트 E의 첫 번째 브로드캐스트와 두 번째 브로드캐스트를 처리할 때 상태 메시지를 표시합니다.

on before(3,E):
   disp("ON");

이벤트 E에 대해 5회 미만의 브로드캐스트 동안 상태가 활성화되어 있었던 경우에 한하여, 차트가 이벤트 E의 브로드캐스트를 처리할 때 관련 상태에서 천이됩니다.

before(5,E)

before(n,tick)

n은 양의 정수이거나 양의 정수 값으로 평가되는 표현식입니다.

관련 상태가 활성화된 이후 차트가 n회 미만 웨이크업 상태가 된 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

Simulink 모델의 Stateflow 차트에 입력 이벤트가 있는 경우 묵시적 이벤트 tick은 지원되지 않습니다. 자세한 내용은 묵시적 이벤트를 사용하여 차트 동작 제어하기 항목을 참조하십시오.

시간 논리 연산자 before는 Simulink 모델의 Stateflow 차트에서만 지원됩니다.

변수 temp가 98.6보다 크고 상태가 활성화된 이후 차트가 7회 미만 웨이크업 상태가 된 경우에 한하여, 차트가 웨이크업 상태일 때 관련 상태에서 천이됩니다.

before(7,tick)[temp > 98.6]

before(n,sec)

before(n,msec)

before(n,usec)

n은 양의 실수이거나 양의 실수 값으로 평가되는 표현식입니다.

관련 상태가 활성화된 이후 n단위의 시간보다 적게 경과한 경우 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

시간을 초(sec), 밀리초(msec) 또는 마이크로초(usec)로 지정합니다.

시간 논리 연산자 before는 Simulink 모델의 Stateflow 차트에서만 지원됩니다.

12.3초 미만 동안 관련 상태가 활성화되어 있었던 경우에 한하여, 차트가 웨이크업 상태가 될 때마다 temp 변수를 MED로 설정합니다.

on before(12.3,sec):
   temp = MED;
every

every(n,E)

n은 양의 정수이거나 양의 정수 값으로 평가되는 표현식입니다.

E는 연산자의 기준 이벤트입니다.

관련 상태가 활성화된 이후 이벤트 En번째 발생할 때마다 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

상태가 활성화된 후 차트가 이벤트 E의 세 번째 브로드캐스트를 처리할 때마다 상태 메시지를 표시합니다.

on every(3,E):
   disp("ON");

상태가 활성화된 후 차트가 이벤트 E의 다섯 번째 브로드캐스트를 처리할 때마다 관련 상태에서 천이됩니다.

every(5,E)

every(n,tick)

n은 양의 정수이거나 양의 정수 값으로 평가되는 표현식입니다.

관련 상태가 활성화된 이후 차트가 n번째 웨이크업 상태가 될 때마다 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

Simulink 모델의 Stateflow 차트에 입력 이벤트가 있는 경우 묵시적 이벤트 tick은 지원되지 않습니다. 자세한 내용은 묵시적 이벤트를 사용하여 차트 동작 제어하기 항목을 참조하십시오.

변수 temp가 98.6보다 큰 경우에 한하여 상태가 활성화된 이후 일곱 번째 tick 이벤트마다 관련 상태에서 천이됩니다.

every(7,tick)[temp > 98.6]

every(n,sec)

n은 양의 실수이거나 양의 실수 값으로 평가되는 표현식입니다.

관련 상태가 활성화된 이후 n초마다 true를 반환합니다. 그 외에는 연산자가 false를 반환합니다.

every를 절대시간 시간 논리 연산자로 사용하는 것은 MATLAB의 독립 실행형 차트에서만 지원됩니다. 연산자는 차트를 웨이크업 상태로 만들기 위한 묵시적 이벤트를 생성하는 MATLAB timer 객체를 만듭니다. MATLAB timer 객체의 정밀도는 1밀리초로 제한됩니다. 자세한 내용은 Events in Standalone Charts 항목을 참조하십시오.

상태가 활성화되는 12.3초마다 temp변수를 5씩 증가시킵니다.

on every(12.3,sec):
   temp = temp+5;
temporalCount

temporalCount(E)

E는 연산자의 기준 이벤트입니다.

관련 상태가 활성화된 이후 이벤트 E가 발생하는 횟수를 반환합니다.

temporalCount를 이벤트 기반 시간 논리 연산자로 사용하는 것은 Simulink 모델의 Stateflow 차트에서만 지원됩니다.

차트가 이벤트 E의 브로드캐스트를 처리할 때마다 배열 M의 연속 요소에 액세스합니다.

on E:
   y = M(temporalCount(E));
temporalCount(tick)

관련 상태가 활성화된 이후 차트가 웨이크업 상태가 된 횟수를 반환합니다.

Simulink 모델의 Stateflow 차트에 입력 이벤트가 있는 경우 묵시적 이벤트 tick은 지원되지 않습니다.

temporalCount를 이벤트 기반 시간 논리 연산자로 사용하는 것은 Simulink 모델의 Stateflow 차트에서만 지원됩니다.

입력 데이터 u의 값을 배열 M의 연속 요소에 저장합니다.

en,du:
   M(temporalCount(tick)+1) = u;

temporalCount(sec)

temporalCount(msec)

temporalCount(usec)

관련 상태가 활성화된 이후 경과한 시간 길이를 반환합니다.

시간을 초(sec), 밀리초(msec) 또는 마이크로초(usec)로 지정합니다.

상태가 활성화된 이후 경과한 시간(단위: 밀리초)을 저장합니다.

en,du:
   y = temporalCount(msec);
elapsed

elapsed(sec)

관련 상태가 활성화된 이후 경과한 시간 길이를 반환합니다.

temporalCount(sec)와 동일합니다.

상태가 활성화된 이후의 경과한 시간(초)을 저장합니다.

en,du:
   y = elapsed(sec);
etelapsed(sec)를 실행하는 또 다른 방법입니다.

차트가 이벤트 E의 브로드캐스트를 처리할 때, 관련 상태에서 천이되며 상태가 활성화된 이후의 경과 시간을 표시합니다.

E{disp(et);}
count

count(C)

Ctrue 또는 false로 평가되는 표현식입니다.

조건식 Ctrue가 되고 관련 상태가 활성화된 이후 차트가 웨이크업 상태가 된 횟수를 반환합니다.

Stateflow 차트는 조건식 Cfalse가 되거나 관련 상태가 비활성화된 경우 count 연산자의 값을 재설정합니다.

Simulink 모델의 차트에서 count의 값은 스텝 크기에 따라 달라질 수 있습니다. 모델에 대해 솔버 또는 스텝 크기를 변경하면 count 연산자를 통해 생성되는 결과에 영향을 줍니다.

변수 x가 5회 이상의 차트 실행 동안 2보다 크거나 같았던 경우 관련 상태에서 천이됩니다.

[count(x>=2) > 5]

변수 x가 5보다 커진 이후의 차트 실행 횟수를 저장합니다.

en,du:
   y = count(x>5);
duration

duration(C)

duration(C,sec)

duration(C,msec)

duration(C,usec)

  • Ctrue 또는 false로 평가되는 표현식입니다.

조건식 Ctrue가 되고 관련 상태가 활성화된 이후 경과한 시간 길이를 반환합니다.

시간을 초(sec), 밀리초(msec) 또는 마이크로초(usec)로 지정합니다. 디폴트 단위는 초입니다.

Stateflow 차트는 조건식 Cfalse가 되거나 관련 상태가 비활성화된 경우 duration 연산자의 값을 재설정합니다.

시간 논리 연산자 duration은 MATLAB의 독립 실행형 차트에서 지원되지 않습니다.

변수 x가 0.1초 이상 0보다 크거나 같을 때 상태를 천이합니다.

[duration(x>=0) > 0.1]

변수 x가 5보다 크고 상태가 활성화된 이후의 밀리초 수를 저장합니다.

en,du:
   y = duration(x>5,msec);

따옴표를 사용하여 키워드 'tick', 'sec', 'msec', 'usec'를 묶을 수 있습니다. 예를 들어, after(5,'tick')after(5,tick)과 같습니다.

참고

시간 논리 연산자 after, at, before, every는 임계값 n과 정수형 내부 카운터를 비교합니다. n이 2의 정수 거듭제곱이 아닌 기울기나 0이 아닌 편향으로 정의된 고정소수점 숫자인 경우, 비교 시 반올림으로 인해 예상치 못한 결과를 얻을 수 있습니다. 자세한 내용은 Relational Operations for Fixed-Point Data 항목을 참조하십시오.

시간 논리 예제

시간 지연 정의하기

이 예제는 연속시간 차트에서 두 개의 절대시간 지연을 정의하는 방법을 보여줍니다.

차트의 실행은 다음 단계를 따릅니다.

  1. 차트가 웨이크업 상태가 되면 상태 Input이 먼저 활성화됩니다.

  2. 5.33밀리초의 시뮬레이션 시간 후에 Input에서 Output으로의 천이가 발생합니다.

  3. 상태 Input이 비활성화되고 상태 Output이 활성화됩니다.

  4. 10.5밀리초의 시뮬레이션 시간 후에 Output에서 Input으로의 천이가 발생합니다.

  5. 상태 Output이 비활성화되고 상태 Input이 활성화됩니다.

시뮬레이션이 끝날 때까지 2~5단계를 반복합니다.

차트에 이산 샘플 시간이 있는 경우, 차트의 모든 동작은 이 샘플 시간의 정수 배수에서 발생합니다. 예를 들어, Simulink® 솔버에서 0.1초 크기의 고정 스텝을 사용하는 경우, 상태 Input에서 상태 Output으로의 첫 번째 천이는 t = 0.1초에서 발생합니다. 이 동작은 솔버가 정확히 t = 5.33밀리초에 차트를 웨이크업 상태로 만들지 않기 때문에 발생합니다. 대신, 솔버는 0.1초의 정수 배수(예: t = 0.0 및 0.1초)에 차트를 활성화합니다.

경과 시간 감지하기

이 예제에서 Step (Simulink) 블록은 Stateflow 차트에 단위 계단 입력을 제공합니다.

차트는 입력 u가 1이 되는 시점을 확인합니다.

  • t = 2초 이전에 입력이 1이면 Start에서 Fast로의 천이가 발생합니다.

  • t = 2초와 t = 5초 사이에 입력이 1이면 Start에서 Medium으로의 천이가 발생합니다.

  • t = 5초 이후에 입력이 1이면 Start에서 Slow로의 천이가 발생합니다.

활성화된 서브시스템에서 절대시간 시간 논리 사용하기

조건부 실행 서브시스템에 있는 차트에서 절대시간 시간 논리를 사용할 수 있습니다. 서브시스템이 비활성화되면 차트가 비활성 상태가 되고 차트가 슬립 상태인 동안 시간 논리 연산자가 일시 중지됩니다. 연산자는 서브시스템이 다시 활성화되고 차트가 웨이크업 상태가 될 때까지 시뮬레이션 시간을 계속 계산하지 않습니다.

이 모델에는 활성화할 때의 상태 파라미터가 held로 설정된 활성화된 서브시스템이 있습니다.

서브시스템에는 after 연산자를 사용하여 천이를 트리거하는 차트가 포함되어 있습니다.

Signal Editor (Simulink) 블록은 다음 특성이 있는 입력 신호를 제공합니다.

  • 신호는 t = 0에 서브시스템을 활성화합니다.

  • 신호는 t = 2에 서브시스템을 비활성화합니다.

  • 신호는 t = 6에 서브시스템을 다시 활성화합니다.

아래 그래프는 차트에서 경과한 총 시간을 보여줍니다. 입력 신호가 시간 t = 0에 서브시스템을 활성화하면 상태 A가 활성화됩니다. 시스템이 활성화되어 있는 동안에는 경과 시간이 증가합니다. 서브시스템이 t = 2에 비활성화되면 차트가 슬립 상태가 되고 경과 시간이 더 이상 증가하지 않습니다. 2 < t < 6 중에는 시스템이 비활성화되어 있으므로 경과 시간이 2초로 고정되어 유지됩니다. 차트가 t = 6에 웨이크업 상태가 되면 경과 시간이 다시 증가하기 시작합니다.

상태 A에서 상태 B로의 천이는 시뮬레이션 시간이 아니라 상태 A가 활성 상태인 동안 경과한 시간에 따라 결정됩니다. 그러므로 상태 A에서의 경과 시간이 5초가 되는 t = 9에 천이가 발생합니다. 천이가 발생하면 출력값 y가 0에서 1로 변경됩니다.

이 모델 동작은 Enable 블록 파라미터 활성화할 때의 상태held로 설정한 서브시스템에만 적용됩니다. 파라미터를 reset으로 설정하면 서브시스템이 다시 활성화될 때 차트가 완전히 재초기화됩니다. 디폴트 천이가 실행되고 모든 시간 논리 카운터가 0으로 재설정됩니다.

천이에서 이벤트 기반 시간 논리의 표기법

Simulink 모델의 Stateflow 차트에서 연산자 after, at, before는 천이에서 이벤트 기반 시간 논리를 표현하기 위한 두 가지 다른 표기법을 지원합니다.

  • 트리거 표기법은 시간 논리 연산자에 대한 기준 이벤트에 따라서만 달라지는 천이를 정의합니다. 트리거 표기법이 따르는 구문은 다음과 같습니다.

    temporalLogicOperator(n,E)[C]
    여기서 각각은 다음과 같습니다.

    • temporalLogicOperator는 부울 시간 논리 연산자입니다.

    • n은 연산자의 발생 횟수입니다.

    • E는 연산자의 기준 이벤트입니다.

    • C는 선택적 조건식입니다.

    트리거 표기법을 사용하는 경우, 차트가 기준 이벤트 E의 브로드캐스트를 처리할 때만 천이가 발생할 수 있습니다.

  • 조건부 표기법은 기준 이벤트와 비기준 이벤트에 따라 달라지는 천이를 정의합니다. 조건부 표기법이 따르는 구문은 다음과 같습니다.

    F[temporalLogicOperator(n,E) && C]
    여기서 각각은 다음과 같습니다.

    • temporalLogicOperator는 부울 시간 논리 연산자입니다.

    • n은 연산자의 발생 횟수입니다.

    • E는 연산자의 기준 이벤트입니다.

    • F는 선택적 비기준 이벤트입니다.

    • C는 선택적 조건식입니다.

    조건부 표기법을 비기준 이벤트 F와 함께 사용하는 경우, 차트가 F의 브로드캐스트를 처리할 때만 천이가 발생할 수 있습니다. 비기준 이벤트를 생략하면 차트가 명시적 이벤트나 묵시적 이벤트를 처리할 때 천이가 발생할 수 있습니다.

    MATLAB의 독립 실행형 차트에서는 시간 논리 연산자에 대한 조건부 표기법이 지원되지 않습니다.

예를 들어 이 천이 레이블은 트리거 표기법을 사용하여, 상태가 활성화된 후 E의 다섯 번째 브로드캐스트부터 시작해 차트가 기준 이벤트 E의 브로드캐스트를 처리하는 순간 관련 상태로부터 천이됨을 나타냅니다.

after(5,E)

반면 이 천이 레이블은 조건부 표기법을 사용하여, 차트가 E의 브로드캐스트를 처리하고 있지 않는 경우에도 기준 이벤트 E의 브로드캐스트가 적어도 5회 이상일 동안 상태가 활성화되어 있었다면 관련 상태로부터 천이됨을 나타냅니다.

[after(5,E)]

참고

연산자 every는 트리거 표기법과 조건부 표기법을 지원합니다. 하지만 이 연산자에서는 두 표기법이 모두 동일합니다. 천이 레이블 every(5,E)[every(5,E)]는 상태가 활성화된 후 차트가 기준 이벤트 Ek번째 브로드캐스트를 처리할 때 관련 상태로부터 천이됨을 나타내며, 여기서 k는 5의 배수입니다.

시간 논리 모범 사례

소스 상태가 없는 천이 경로에 시간 논리 사용하지 않기

시간 논리 연산자의 값은 관련 상태가 활성화된 시점에 따라 달라집니다. 모든 시간 논리 연산자가 고유한 관련 상태를 갖도록 하려면 다음 연산자만 사용하십시오.

  • 상태 on 동작

  • 상태에서 시작된 천이 경로의 동작

디폴트 천이나 그래픽 함수의 천이는 상태에서 시작하지 않으므로 이러한 천이에는 시간 논리 연산자를 사용하지 마십시오.

Simulink 모델의 차트에서 tick 대신 절대시간 시간 논리 사용하기

Simulink 모델의 차트에서, 절대시간 시간 논리를 사용하는 지연 표현식의 값은 모델의 샘플 시간과 의미론적으로 독립적입니다. 반면, 묵시적 이벤트 tick을 기반으로 하는 시간 논리를 사용하는 지연 표현식은 Simulink 솔버가 사용하는 스텝 크기에 의존합니다.

또한 입력 이벤트가 있는 차트에는 절대시간 시간 논리가 지원됩니다. Simulink 모델의 Stateflow 차트에 입력 이벤트가 있는 경우 묵시적 이벤트 tick은 지원되지 않습니다.

Simulink 모델의 차트에서 절대시간 시간 논리에 at 사용하지 않기

Simulink 모델의 차트에서 at을 절대시간 시간 논리 연산자로 사용하는 것은 지원되지 않습니다. 대신, after 연산자를 사용하십시오. 예를 들어, 표현식 at(5.33,sec)를 사용하여 시간 지연을 정의한다고 가정하겠습니다.

Chart with a transition that uses at as an absolute-time temporal logic operator.

런타임 오류를 방지하려면 천이 레이블을 after(5.33,sec)로 변경하십시오.

Chart with a transition that uses after as an absolute-time temporal logic operator.

큰 파라미터 값의 예기치 않은 결과

Stateflow 절대시간 시간 논리 조건(예: after(x,sec))은 다음과 같은 조건이 있는 상태에 진입한 후 기대했던 시간에 true로 평가되지 않을 수 있습니다.

  • 차트에 주기적인 이산 샘플 시간이 있습니다.

  • 차트 논리로 인해 상태가 2147418단위의 시간보다 큰 시간 동안 활성 상태로 유지됩니다. 시간 단위은 해당 상태에서 사용하는 모든 시간 논리 표현식에서 가장 작은 시간 단위를 뜻합니다. 예를 들어, 상태에 두 개의 나가는 천이가 있고 하나는 after(x,sec)를 사용하고 다른 하나는 after(x,msec)를 사용하는 경우, 시간 단위는 msec (milliseconds)입니다.

일반적으로 상태의 시간 길이가 2147418단위의 시간보다 큰 경우 예기치 않은 결과가 발생합니다. 하지만 이는 차트의 샘플 시간에 따라 달라질 수 있습니다.

Simulink 모델의 차트에서 절대시간 시간 논리에 every 사용하지 않기

Simulink 모델의 차트에서 every를 절대시간 시간 논리 연산자로 사용하는 것은 지원되지 않습니다. 대신, after 연산자와 함께 외부 자가 루프 천이를 사용하십시오. 예를 들어, 차트 실행 중에 2.5초마다 활성 상태에 대한 상태 메시지를 출력한다고 가정하겠습니다.

Chart with a state action that uses every as an absolute-time temporal logic operator.

런타임 오류를 방지하려면 상태 동작을 외부 자가 루프 천이로 바꾸십시오.

Chart with a self-loop transition that uses after as an absolute-time temporal logic operator.

차트가 각 자가 루프 천이 이전의 상태 설정을 기억하도록 상태에 이력 연결점을 추가하십시오. 자세한 내용은 이력 연결점을 사용하여 이전 하위 상태 활동 재개하기 항목을 참조하십시오.

MATLAB의 독립 실행형 차트에서 소스가 여러 개 있는 천이 경로에 시간 논리 사용하지 않기

MATLAB의 독립 실행형 차트는 소스 상태가 두 개 이상인 천이 경로에서 시간 논리 연산자의 사용을 지원하지 않습니다. 예를 들어, 다음 독립 실행형 차트에서는 시간 논리 표현식 after(10,sec)가 두 개 이상의 소스 상태가 있는 천이 경로를 트리거하므로 런타임 오류가 발생합니다.

Standalone chart containing a temporal logic expression on the transition path originating from states Positive and Negative to state End.

이 문제를 해결하려면 각각 소스 상태 하나를 가지고 있는 개별 천이 경로에 시간 논리 표현식을 사용하십시오.

Standalone chart using temporal logic expressions on separate transition paths.

MATLAB의 독립 실행형 차트에 있는 천이 경로에서 절대시간 시간 논리와 조건을 혼합하지 않기

MATLAB의 독립 실행형 차트에서 연산자 after, at, every는 차트를 웨이크업 상태로 만드는 묵시적 이벤트를 생성하는 MATLAB timer 객체를 생성합니다. 이러한 연산자를 동일한 천이 경로에 있는 조건과 결합하면 의도하지 않은 동작이 발생할 수 있습니다.

  • timer가 차트를 웨이크업 상태로 만들 때 천이 경로의 조건이 false이면 차트는 활성 상태의 during 동작과 on 동작을 수행합니다.

  • 차트는 연산자 afterat에 연결된 timer 객체를 재설정하지 않습니다. 천이 경로의 조건이 나중에 true가 되면 다른 명시적 이벤트나 묵시적 이벤트가 차트를 웨이크업 상태로 만들 때까지 천이가 발생하지 않습니다.

예를 들어, 이 차트에서, 상태 A에서 상태 B로의 천이 경로는 절대시간 시간 논리 트리거 after(1,sec)와 조건 [guard]를 결합합니다. 상태 A에서 상태 C로의 천이에는 절대시간 시간 논리 트리거 after(5,sec)가 있습니다. 각 천이는 묵시적 이벤트를 생성하는 timer 객체와 연결되어 있습니다. 처음에 지역 변수 guardfalse입니다.

Chart combining an absolute-time temporal logic trigger and a condition on the same transition path.

차트를 실행하면 상태 A가 활성화됩니다. 차트가 entry 동작을 수행하고 메시지 Hello!를 표시합니다. 1초 후, A에서 B로의 천이와 연결된 timer가 차트를 웨이크업 상태로 만듭니다. 천이가 유효하지 않으므로, 차트는 상태 A에서 during 동작을 실행하고 Hello! 메시지를 두 번째로 표시합니다.

2초 후 차트에 입력 이벤트 E가 수신된다고 가정하겠습니다. 차트는 상태 A에서 on 동작을 실행하고 guard의 값을 true로 변경합니다. 차트는 연산자 after에 연결된 timer를 재설정하지 않으므로, 다른 이벤트가 차트를 웨이크업 상태로 만들 때까지 A에서 B로의 천이는 발생하지 않습니다.

5초 후, A에서 C로의 천이와 연결된 timer가 차트를 웨이크업 상태로 만듭니다. A에서 B로의 천이가 유효하고 실행 순서가 더 높으므로, 차트는 상태 C로의 천이를 발생시키지 않으며 따라서 메시지 Farewell!을 표시하지 않습니다. 대신, 상태 B가 활성화되고 차트는 메시지 Good bye!를 표시합니다.

더 효율적인 코드 생성을 위해 이산 샘플 시간을 사용하는 차트 사용하기

트리거되거나 활성화된 서브시스템 내에 있지 않은 이산 차트에 대해 생성된 코드는 Simulink에서 제공하는 시간 대신 정수 카운터를 사용하여 시간을 추적합니다. 이 동작은 오버헤드와 메모리 측면에서 보다 효율적인 코드 생성을 가능하게 하며, SIL(Software-in-the-Loop) 시뮬레이션 모드와 PIL(Processor-in-the-Loop) 시뮬레이션 모드에서 이 코드를 사용할 수 있도록 지원합니다. 자세한 내용은 SIL and PIL Simulations (Embedded Coder) 항목을 참조하십시오.

참고 항목

| | | | | | | | | (Simulink) | (Simulink)

도움말 항목