상태 동작과 천이 레이블을 사용하여 차트 작동 방식 정의하기
상태 동작과 천이 동작은 시뮬레이션 중에 Stateflow® 차트가 작동하는 방식을 정의하기 위해 각각 상태 내에 또는 천이에 기록하는 명령입니다. 예를 들어 이 차트에서 동작은 콜라츠 추측(Collatz conjecture)의 한 사례를 경험적으로 검증하는 상태 머신을 정의합니다. 주어진 숫자형 입력값 에 대해, 차트는 다음 규칙을 반복하여 헤일스톤 수열 …을 계산합니다.
가 짝수이면 입니다.
가 홀수이면 입니다.
콜라츠 추측에 따르면 모든 양의 정수가 최종적으로 1이 되는 헤일스톤 수열을 갖습니다.
차트는 3개의 상태로 구성됩니다. 시뮬레이션 시작 시, Init
상태는 다음을 설정하여 차트 데이터를 초기화합니다.
로컬 데이터
n
을 입력값u
로 설정합니다.로컬 데이터
n2
를n
을 2로 나눴을 때의 나머지로 설정합니다.출력 데이터
y
를false
로 설정합니다.
입력의 패리티에 따라 차트는 Even
또는 Odd
상태 중 하나로 천이됩니다. 상태의 활동이 Even
과 Odd
상태 간에 전환됨에 따라 차트는 헤일스톤 수열의 숫자를 계산합니다. 수열이 1 값에 도달하면 출력 데이터 y
는 true
가 되고 Simulink® 모델에 있는 Stop Simulation (Simulink) 블록을 트리거합니다.
상태 동작 유형
상태 동작은 어떤 상태가 활성화된 동안에 Stateflow 차트가 수행하는 작업을 정의합니다. 상태 동작의 가장 일반적인 유형은 entry
동작, during
동작, exit
동작입니다.
상태가 활성화되면
entry
동작이 발생합니다.상태가 이미 활성화되어 있고 차트가 상태 밖으로 천이되지 않은 경우
during
동작이 시간 스텝에서 발생합니다.차트가 상태 밖으로 천이될 때
exit
동작이 발생합니다.
완전한 키워드(entry
, during
, exit
) 또는 약어(en
, du
, ex
)를 사용하여 상태 동작 유형을 지정할 수 있습니다. 또한 쉼표를 사용하여 상태 동작 유형을 결합할 수도 있습니다. 예들 들어 결합된 유형 entry, during
을 갖는 동작은 상태가 활성화되는 시간 스텝과 활성화된 상태가 유지되는 모든 후속 시간 스텝에서 발생합니다.
헤일스톤 차트에는 다음과 같은 상태에서의 동작이 포함되어 있습니다.
Init
— 이 상태가 시뮬레이션 시작 시 활성화되면entry
동작은n
의 패리티를 결정하고y
를false
로 설정합니다. 차트가 하나의 시간 스텝 후Init
에서 벗어나도록 천이하면exit
동작은n
이 1과 같은지 확인합니다.Even
— 이 상태가 활성화될 때와 이 상태가 활성화되어 있는 모든 후속 시간 스텝에서, 결합된entry, during
동작은 헤일스톤 수열n/2
의 다음 수에 대한 값과 패리티를 계산합니다.Odd
— 이 상태가 활성화될 때와 이 상태가 활성화되어 있는 모든 후속 시간 스텝에서, 결합된entry, during
동작은n
이 1보다 큰지 검사하며, 만약 그렇다면 헤일스톤 수열3*n+1
의 다음 수에 대한 값과 패리티를 계산합니다.
천이 레이블 유형
천이 레이블은 활성 상태가 변경될 때 Stateflow 차트가 수행할 작업을 정의합니다. 천이 레이블의 가장 일반적인 유형은 조건과 조건 동작입니다.
[Condition]{ConditionAction}
Condition
은 천이가 발생했는지 여부를 판단하는 부울 표현식입니다. 조건을 지정하지 않을 경우, 천이는 소스 상태가 활성화되고 하나의 시간 스텝 후에 발생합니다.
ConditionAction
은 천이를 가드하는 조건이 true일 때 실행되는 명령입니다. 조건 동작은 조건 다음에, exit
상태 동작 또는 entry
상태 동작 전에 수행됩니다.
헤일스톤 차트에는 다음과 같은 천이에 대한 동작이 있습니다.
Init
로 디폴트 천이 — 시뮬레이션 시작 시, 조건 동작n = u
는 입력값u
를 로컬 데이터n
에 할당합니다.Init
에서Even
으로 천이 — 조건n2 == 0
은n
이 짝수일 때 천이가 발생한다고 판단합니다. 이 천이의 소스에 있는 숫자 1은Init
에서Odd
로의 천이 전에 평가됨을 나타냅니다.Odd
에서Even
으로 천이 — 조건n2 == 0
은n
이 짝수일 때 천이가 발생한다고 판단합니다.Even
에서Odd
로의 천이 — 조건n2 ~= 0
은n
이 홀수일 때 천이가 발생한다고 판단합니다. 이 경우 조건 동작y = isequal(n,1)
은n
이 1과 같은지 판단합니다.
차트 작동 방식 검토하기
값을 9부터 시작해서 헤일스톤 수열을 계산하려면 다음을 수행하십시오.
1. Constant 블록에 9
값을 입력합니다.
2. 시뮬레이션 탭에서 실행을 클릭합니다. 차트가 다음과 같은 동작으로 응답합니다.
시간 에서
Init
로의 디폴트 천이가 발생합니다. 천이 동작이n
값을 9로 설정합니다.Init
상태가 활성화됩니다.Init
의entry
동작에서n2
를 1로 설정하고y
를false
로 설정합니다.시간 에서 조건
n2 == 0
이 false이므로 차트는Odd
로 천이할 준비를 합니다.Init
의exit
동작이y
를false
로 설정합니다. 상태Init
가 비활성화되고 상태Odd
가 활성화됩니다.Odd
의entry
동작에서n
을 28로 설정하고n2
를 0으로 설정합니다.시간 에서 조건
n2 == 0
이 true이므로 차트가Even
으로 천이할 준비를 합니다. 상태Odd
가 비활성화되고 상태Even
이 활성화됩니다.Even
의 entry 동작에서n
을 14로 설정하고n2
를 0으로 설정합니다.시간 에서 조건
n2 ~= 0
이 false이므로 차트가 천이를 수행하지 않습니다. 상태Even
이 활성으로 유지됩니다.Even
의during
동작에서n
을 7로 설정하고n2
를 1로 설정합니다.시간 에서 조건
n2 ~= 0
이 true이므로 차트가Odd
로 천이할 준비를 합니다. 천이 동작에서y
를 false로 설정합니다. 상태Even
이 비활성화되고 상태Odd
가 활성화됩니다.Odd
의entry
동작에서n
을 22로 설정하고n2
를 0으로 설정합니다.차트는 시간 에서 값
n
에 도달할 때까지 헤일스톤 수열 계산을 계속합니다.시간 에서 차트가
Even
에서Odd
로 천이할 준비를 합니다. 천이 동작에서y
를true
로 설정합니다. 상태Even
이 비활성화되고 상태Odd
가 활성화됩니다.Odd
의entry
동작에서n
또는n2
를 수정하지 않습니다. 출력 신호y
에 연결된 Stop Simulation 블록이 시뮬레이션을 중지합니다.
3. 시뮬레이션 탭의 결과 검토 아래에서 데이터 인스펙터를 클릭합니다.
4. 헤일스톤 수열의 값을 보려면 시뮬레이션 데이터 인스펙터에서 기록된 신호 n
을 선택합니다.
헤일스톤 수열은 19회 반복 후 값 1에 도달합니다.