스크립트와 모델을 통해 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
은 잔돈 세기 알고리즘에서 사용하는 로컬 데이터입니다.textWidth
와quietMode
는 차트에 결과가 표시되는 방법을 제어하는 로컬 데이터입니다.
차트는 인덱스 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
루프는 로컬 데이터 done
이 true
가 될 때까지 차트를 실행합니다. 마지막으로 스크립트는 tabula
의 값을 표시합니다.
chartObj = sf_change('-warningOnUninitializedData',false,x=27); while ~chartObj.done step(chartObj); end disp(chartObj.tabula)
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
를 생성합니다.
Execute
는step
함수를 호출하여 독립 실행형 차트를 실행하고 그 결과를 출력 데이터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