Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

상태 동작과 천이 레이블을 사용하여 차트 작동 방식 정의하기

상태 동작천이 동작은 시뮬레이션 중에 Stateflow® 차트가 작동하는 방식을 정의하기 위해 각각 상태 내에 또는 천이에 기록하는 명령입니다. 예를 들어 이 차트에서 동작은 콜라츠 추측(Collatz conjecture)의 한 사례를 경험적으로 검증하는 상태 머신을 정의합니다. 주어진 숫자형 입력값 $u$에 대해, 차트는 다음 규칙을 반복하여 헤일스톤 수열 $n_0 = u,$ $n_1,$ $n_2,$ $n_3,$…을 계산합니다.

  • $n_i$가 짝수이면 $n_{i+1} = n_i / 2$입니다.

  • $n_i$가 홀수이면 $n_{i+1} = 3n_i+1$입니다.

콜라츠 추측에 따르면 모든 양의 정수가 최종적으로 1이 되는 헤일스톤 수열을 갖습니다.

차트는 3개의 상태로 구성됩니다. 시뮬레이션 시작 시, Init 상태는 다음을 설정하여 차트 데이터를 초기화합니다.

  • 로컬 데이터 n을 입력값 u로 설정합니다.

  • 로컬 데이터 n2n을 2로 나눴을 때의 나머지로 설정합니다.

  • 출력 데이터 yfalse로 설정합니다.

입력의 패리티에 따라 차트는 Even 또는 Odd 상태 중 하나로 천이됩니다. 상태의 활동이 EvenOdd 상태 간에 전환됨에 따라 차트는 헤일스톤 수열의 숫자를 계산합니다. 수열이 1 값에 도달하면 출력 데이터 ytrue가 되고 Simulink® 모델에 있는 Stop Simulation (Simulink) 블록을 트리거합니다.

상태 동작 유형

상태 동작은 어떤 상태가 활성화된 동안에 Stateflow 차트가 수행하는 작업을 정의합니다. 상태 동작의 가장 일반적인 유형은 entry 동작, during 동작, exit 동작입니다.

  • 상태가 활성화되면 entry 동작이 발생합니다.

  • 상태가 이미 활성화되어 있고 차트가 상태 밖으로 천이되지 않은 경우 during 동작이 시간 스텝에서 발생합니다.

  • 차트가 상태 밖으로 천이될 때 exit 동작이 발생합니다.

완전한 키워드(entry, during, exit) 또는 약어(en, du, ex)를 사용하여 상태 동작 유형을 지정할 수 있습니다. 또한 쉼표를 사용하여 상태 동작 유형을 결합할 수도 있습니다. 예들 들어 결합된 유형 entry, during을 갖는 동작은 상태가 활성화되는 시간 스텝과 활성화된 상태가 유지되는 모든 후속 시간 스텝에서 발생합니다.

헤일스톤 차트에는 다음과 같은 상태에서의 동작이 포함되어 있습니다.

  • Init — 이 상태가 시뮬레이션 시작 시 활성화되면 entry 동작은 n의 패리티를 결정하고 yfalse로 설정합니다. 차트가 하나의 시간 스텝 후 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 == 0n이 짝수일 때 천이가 발생한다고 판단합니다. 이 천이의 소스에 있는 숫자 1은 Init에서 Odd로의 천이 전에 평가됨을 나타냅니다.

  • Odd에서 Even으로 천이 — 조건 n2 == 0n이 짝수일 때 천이가 발생한다고 판단합니다.

  • Even에서 Odd로의 천이 — 조건 n2 ~= 0n이 홀수일 때 천이가 발생한다고 판단합니다. 이 경우 조건 동작 y = isequal(n,1)n이 1과 같은지 판단합니다.

차트 작동 방식 검토하기

값을 9부터 시작해서 헤일스톤 수열을 계산하려면 다음을 수행하십시오.

1. Constant 블록에 9 값을 입력합니다.

2. 시뮬레이션 탭에서 실행을 클릭합니다. 차트가 다음과 같은 동작으로 응답합니다.

  • 시간 $t = 0$에서 Init로의 디폴트 천이가 발생합니다. 천이 동작이 n 값을 9로 설정합니다. Init 상태가 활성화됩니다. Initentry 동작에서 n2를 1로 설정하고 yfalse로 설정합니다.

  • 시간 $t = 1$에서 조건 n2 == 0이 false이므로 차트는 Odd로 천이할 준비를 합니다. Initexit 동작이 yfalse로 설정합니다. 상태 Init가 비활성화되고 상태 Odd가 활성화됩니다. Oddentry 동작에서 n을 28로 설정하고 n2를 0으로 설정합니다.

  • 시간 $t = 2$에서 조건 n2 == 0이 true이므로 차트가 Even으로 천이할 준비를 합니다. 상태 Odd가 비활성화되고 상태 Even이 활성화됩니다. Even의 entry 동작에서 n을 14로 설정하고 n2를 0으로 설정합니다.

  • 시간 $t = 3$에서 조건 n2 ~= 0이 false이므로 차트가 천이를 수행하지 않습니다. 상태 Even이 활성으로 유지됩니다. Evenduring 동작에서 n을 7로 설정하고 n2를 1로 설정합니다.

  • 시간 $t = 4$에서 조건 n2 ~= 0이 true이므로 차트가 Odd로 천이할 준비를 합니다. 천이 동작에서 y를 false로 설정합니다. 상태 Even이 비활성화되고 상태 Odd가 활성화됩니다. Oddentry 동작에서 n을 22로 설정하고 n2를 0으로 설정합니다.

  • 차트는 시간 $t = 19$에서 값 n $= 1$에 도달할 때까지 헤일스톤 수열 계산을 계속합니다.

  • 시간 $t = 20$에서 차트가 Even에서 Odd로 천이할 준비를 합니다. 천이 동작에서 ytrue로 설정합니다. 상태 Even이 비활성화되고 상태 Odd가 활성화됩니다. Oddentry 동작에서 n 또는 n2를 수정하지 않습니다. 출력 신호 y에 연결된 Stop Simulation 블록이 시뮬레이션을 중지합니다.

3. 시뮬레이션 탭의 결과 검토 아래에서 데이터 인스펙터를 클릭합니다.

4. 헤일스톤 수열의 값을 보려면 시뮬레이션 데이터 인스펙터에서 기록된 신호 n을 선택합니다.

헤일스톤 수열은 19회 반복 후 값 1에 도달합니다.

관련 항목