주요 콘텐츠

스크립트와 모델을 통해 Stateflow 차트 객체 실행하기

독립 실행형 Stateflow® 차트는 유한 상태 머신의 동작을 정의하는 MATLAB® 클래스입니다. 독립 실행형 차트는 동작 언어로 MATLAB을 사용하여 클래식 차트 의미 체계를 구현합니다. Simulink®에서의 코드 생성이 제한되는 기능을 포함해 MATLAB의 모든 기능을 사용하여 차트를 프로그래밍할 수 있습니다. 자세한 내용은 Create Stateflow Charts for Execution as MATLAB Objects 항목을 참조하십시오.

이 예제에서는 MATLAB 스크립트 또는 Simulink 모델을 사용하여 독립 실행형 Stateflow 차트를 실행하는 방법을 보여줍니다.

통화에서 잔돈으로 바꾸는 방법의 수 세기

파일 sf_change.sfx는 주어진 금액을 잔돈으로 바꾸는 방법의 수를 세는 독립 실행형 Stateflow 차트를 정의합니다. 차트에는 다음과 같은 데이터 객체가 포함되어 있습니다.

  • x는 바꿀 금액입니다. 디폴트 값은 100입니다.

  • coinValues는 오름차순으로 배열된 동전 액면가의 벡터입니다. coinNames는 해당 동전 이름의 배열입니다. 디폴트 값은 표준 미국 동전(페니, 니켈, 다임, 쿼터)을 나타냅니다.

  • tally는 유효한 잔돈 구성의 수입니다.

  • tabula는 서로 다른 유효한 잔돈 구성이 포함된 배열입니다.

  • chg, done, i, n은 잔돈 세기 알고리즘에서 사용하는 로컬 데이터입니다.

  • textWidthquietMode는 차트에 결과가 표시되는 방법을 제어하는 로컬 데이터입니다.

차트는 인덱스 1로 지정된, 가장 낮은 가치의 동전만 있는 가능한 잔돈 구성에서 시작합니다. 각 실행 스텝에서 상태 exchange는 다음의 두 방법 중 하나로 이 구성을 수정합니다.

  • 하위 상태 move_up은 가치가 가장 낮은 동전 몇 개를 인덱스 i에 의해 더 큰 가치를 갖는 것으로 지정된 동전 하나와 교환합니다.

  • 하위 상태 move_down은 인덱스 i에 의해 지정된 가치를 갖는 모든 동전을 가치가 가장 낮은 동전과 교환합니다. 그런 다음 move_up은 가치가 가장 낮은 동전 몇 개를 i+1 이상의 인덱스로 가치가 지정된 동전 하나와 교환합니다.

가능한 잔돈 구성은 가치가 가장 낮은 동전인 센트의 개수를 교환하려는 동전의 가치로 나눌 수 있는 경우에 유효합니다. 차트는 유효한 새 구성을 발견하면 tally를 증가시키고 해당 새 구성을 tabula에 추가합니다.

더 이상 동전을 교환할 수 없으면 상태 stop이 활성화됩니다. 이 상태는 계산 결과를 출력하고 tabula의 내용을 테이블로 변환한 후 done의 값을 true로 설정합니다.

MATLAB 스크립트에서 독립 실행형 차트 실행하기

잔돈 세기 알고리즘을 완료될 때까지 실행하려면 독립 실행형 차트를 여러 번 실행해야 합니다. 예를 들어, MATLAB 스크립트 sf_change_script.m은 차트 객체 chartObj를 생성하고 로컬 데이터 x의 값을 27로 초기화합니다. 구성 옵션 '-warningOnUninitializedData'(스크립트에 의해 false로 설정됨)는 tabula가 새 차트 객체에서 빈 배열임을 알리는 경고를 제거합니다. while 루프는 로컬 데이터 donetrue가 될 때까지 차트를 실행합니다. 마지막으로 스크립트는 tabula의 값을 표시합니다.

chartObj = sf_change('-warningOnUninitializedData',false,x=27);

while ~chartObj.done
    step(chartObj);
end

disp(chartObj.tabula)
이 스크립트를 실행하면 독립 실행형 차트는 표준 미국 동전을 사용하여 27센트를 잔돈으로 바꿀 수 있는 방법의 수를 계산합니다.
sf_change_script
.............
There are 13 ways to make change for 27 cents.
    Pennies    Nickels    Dimes    Quarters
    _______    _______    _____    ________

      27          0         0         0    
      22          1         0         0    
      17          2         0         0    
      12          3         0         0    
       7          4         0         0    
       2          5         0         0    
      17          0         1         0    
      12          1         1         0    
       7          2         1         0    
       2          3         1         0    
       7          0         2         0    
       2          1         2         0    
       2          0         0         1    

다른 금액을 잔돈으로 바꾸는 방법의 수를 확인하거나 다른 통화 시스템을 사용하려면 x의 값과 coinValues의 값을 변경하십시오. 예를 들어, 영국 통화를 사용하려면 coinValues[1 2 5 10 20 25 50]으로 초기화합니다.

Simulink 모델을 사용하여 독립 실행형 차트 실행하기

Simulink 모델 내에서 독립 실행형 Stateflow 차트를 실행할 수 있습니다. 예를 들어, 모델 sf_change_model에는 독립 실행형 차트 sf_change를 사용하여 서로 다른 두 가지 통화 시스템에서 27센트를 잔돈으로 바꾸는 방법의 수를 세는 두 개의 Stateflow 차트가 포함되어 있습니다. 모델을 시뮬레이션할 수는 있지만, 이 독립 실행형 차트를 실행하는 함수들은 코드 생성을 지원하지 않습니다.

각 차트에는 다음 상태가 포함되어 있습니다.

  • Initialize는 입력값 x에 대한 잔돈 세기 알고리즘을 구현하는 로컬 차트 객체 chartObj를 생성합니다.

  • Executestep 함수를 호출하여 독립 실행형 차트를 실행하고 그 결과를 출력 데이터 tally로 저장합니다.

  • Finish는 진단 뷰어 창에 알고리즘의 결과를 표시하고 출력 데이터 done의 값을 true로 설정합니다.

두 차트가 각각 Finish 상태에 도달하면 모델 시뮬레이션이 중지되고 두 누적 합산의 최종 값이 Display 블록에 표시됩니다.

MATLAB을 동작 언어로 사용한 실행

차트 MATLAB syntax는 MATLAB을 동작 언어로 사용합니다. 독립 실행형 Stateflow 차트를 실행하기 위해 이 차트가 따라야 하는 지침은 다음과 같습니다.

  • 차트 객체에 대한 핸들을 포함하는 지역 변수 chartObj의 유형이 Inherit: From definition in chart입니다.

  • 차트 객체를 생성하기 전에 Initialize 상태가 coder.extrinsic 함수를 호출하여 sf_change를 Simulink에서 코드 생성이 제한되는 외재적 함수로 선언합니다. Call Extrinsic MATLAB Functions in Stateflow Charts 항목을 참조하십시오.

  • Execute 상태와 Finish 상태가 get 함수를 호출하여 독립 실행형 차트의 로컬 데이터에 액세스합니다.

이 차트를 x = 27의 입력을 사용하여 시뮬레이션하면 Display 블록 Olde English에 개수(tally) 4가 표시됩니다. 진단 뷰어 창에는 다음의 결과가 표시됩니다.

   Pennies    Shillings    Florins
   _______    _________    _______
     27           0           0
     15           1           0
      3           2           0
      3           0           1

C를 동작 언어로 사용한 실행

차트 C syntax는 C를 동작 언어로 사용합니다. 독립 실행형 Stateflow 차트를 실행하기 위해 이 차트가 따라야 하는 지침은 다음과 같습니다.

  • 차트 객체에 대한 핸들을 포함하는 지역 변수 chartObj의 유형이 ml입니다.

  • Initialize 상태는 ml 함수를 호출하여 차트 객체를 생성합니다.

  • Execute 상태와 Finish 상태는 ml 네임스페이스 연산자를 사용해 step 함수, get 함수, displ 함수에 액세스하여 독립 실행형 차트를 실행하고 로컬 데이터에 액세스하며 알고리즘의 결과를 표시합니다.

자세한 내용은 Access MATLAB Functions and Workspace Data in C Charts 항목을 참조하십시오.

이 차트를 x = 27의 입력을 사용하여 시뮬레이션하면 Display 블록 Modern American에 개수(tally) 13이 표시됩니다. 진단 뷰어 창에는 다음의 결과가 표시됩니다.

   Safety    FieldGoal    TouchDown
   ______    _________    _________
     12          1            0
      9          3            0
      6          5            0
      3          7            0
      0          9            0
     10          0            1
      7          2            1
      4          4            1
      1          6            1
      5          1            2
      2          3            2
      3          0            3
      0          2            3

참고 항목

도움말 항목