Stateflow 차트 만들기
이 튜토리얼에서는 Stateflow® 차트를 사용하여 이차전지(충전식 배터리) 시스템의 논리를 모델링합니다.
배터리 시스템은 다음과 같은 요구 사항을 갖습니다.
배터리는 외부 전원에 연결되면 충전됩니다. 그렇지 않으면 방전됩니다.
배터리 용량은 총 충전량의 4% 속도로 충전되고 3% 속도로 방전됩니다.
충전 시에는 배터리가 전력을 출력하지 않습니다. 방전 시에는 배터리가 3.5와트의 전력을 출력합니다.

이러한 요구 사항을 모델링하기 위해 두 가지 상태 Charge와 Discharge를 포함하는 차트를 만듭니다. 두 상태는 배터리 시스템의 동작 모드를 나타냅니다.
차트 만들기
빈 Chart 블록이 포함된 새 Simulink® 모델을 만듭니다.
MATLAB®을 시작합니다. MATLAB 툴스트립의 홈 탭에서 Simulink를 클릭합니다.

시작 페이지의 Stateflow 섹션에서 빈 차트 템플릿을 클릭합니다.
Simulink 편집기가 열리고 Chart 블록이 포함된 모델이 표시됩니다.

Chart 블록을 더블 클릭합니다. Stateflow 편집기가 열립니다.
Stateflow 편집기에는 다음과 같은 컴포넌트가 있습니다.
캔버스 — 상태와 천이를 배치하는 그래픽 환경입니다. 캔버스의 배경은 기본적으로 크림색입니다.
탐색 막대 — 캔버스 상단에 위치한 직사각형 영역으로, 열려 있는 차트나 그래픽 요소의 경로를 표시합니다. 화살표 버튼이나 모델 요소를 클릭하면 Stateflow 편집기와 Simulink 편집기 간에 이동할 수 있습니다.
팔레트 — 캔버스 왼쪽에 위치한 메뉴로, 여기에 있는 객체를 캔버스에 추가할 수 있습니다. 상태
및 기타 차트 요소의 아이콘이 포함되어 있습니다.객체 이름을 표시하려면 팔레트를 마우스 오른쪽 버튼으로 클릭한 후 이름 표시를 클릭하십시오. 이름을 숨기려면 마우스 오른쪽 버튼으로 클릭한 후 이름 숨기기를 선택하십시오.
기호 창 — 기본적으로 캔버스 오른쪽에 위치한 창으로, 차트가 나머지 Simulink 모델과 통신할 수 있도록 하는 데이터, 이벤트, 메시지를 여기서 생성하고 관리할 수 있습니다.
기호 창을 열거나 닫으려면 모델링 탭에서 기호 창을 클릭하십시오.

상태 추가하기
배터리 시스템에는 충전 상태와 방전 상태에 대해 각각 하나씩 두 가지 상태가 필요합니다. 팔레트를 사용하여 두 상태를 캔버스에 추가합니다.
팔레트에서 상태 아이콘
을 클릭합니다. 상태를 배치하려면 캔버스의 빈 섹션을 가리키고 클릭합니다.
상태를 배치하면 상태의 왼쪽 위 코너에 상태 이름을 입력하도록 표시됩니다.
Charge를 입력합니다.상태 이름 지정을 완료하려면 캔버스의 빈 섹션을 클릭합니다. 기존 상태 이름을 편집하려면 상태 내 텍스트를 클릭합니다.
참고
상태 이름은 공백을 포함하거나 숫자로 시작할 수 없습니다. 각 상태 이름은 고유해야 합니다.
두 번째 상태를 추가하고 이름을
Discharge로 지정합니다.
참고
상태 테두리는 겹치지 않아야 합니다.

상태 연결하기
천이는 차트가 상태 간에 이동하는 방법과 시점을 결정합니다.
디폴트 천이를 사용하여 첫 번째 활성 상태 나타내기
파란색 원
은 디폴트 천이를 나타내며, 이는 시뮬레이션이 시작될 때 어떤 상태가 활성화될지 결정합니다.
차트는 캔버스에 추가한 첫 번째 상태에 디폴트 천이를 배치합니다. 이 예제에서 디폴트 천이는 Charge 상태에 연결됩니다. 팔레트에서 다른 디폴트 천이를 추가하려면 디폴트 천이 아이콘
을 클릭한 후 상태의 가장자리를 클릭합니다.
요구 사항에 배터리가 충전 모드로 시작해야 한다고 명시되어 있으므로 디폴트 천이를 이동시킬 필요가 없습니다.
상태 간 천이 추가하기
상태 간 천이를 통해 차트가 한 상태에서 다른 상태로 이동할 수 있습니다.
첫 번째 천이를 만들려면 커서가 플러스 기호로 바뀔 때까지
Charge상태의 가장자리를 가리킵니다. 클릭하고Discharge상태의 가장자리로 끌어서 놓습니다.
팁
기존 천이를 이동하려면 화살표 머리를 클릭하고 끌어서 놓습니다.
Discharge에서Charge로의 천이를 만듭니다.
모델을 시뮬레이션합니다. 시뮬레이션 탭에서 실행을 클릭합니다.
상태가 활성 상태가 될 때 차트는 해당 상태의 테두리를 강조 표시합니다. 차트가 천이를 따라 이동할 때 차트는 잠깐 동안 천이를 강조 표시합니다. 시뮬레이션 중에 차트는 매 스텝마다
Charge상태와Discharge상태 간에 전환합니다.

팁
애니메이션 속도를 변경하려면 디버그 탭에서 애니메이션 속도 드롭다운 메뉴를 클릭한 후 옵션을 선택합니다.
천이 레이블 추가하기
천이 동작을 변경하기 위해 천이 레이블을 추가할 수 있습니다. 천이 레이블에는 3개의 선택적 컴포넌트가 있습니다.
이벤트 트리거 또는 메시지 트리거는 천이가 차트나 모델의 다른 객체로부터 이벤트 또는 메시지 브로드캐스트를 수신할 때까지 차트가 천이를 따라 이동하지 못하도록 합니다.
조건은 차트가 천이를 따라 이동하려면 먼저 충족되어야 합니다. 조건을 지정하려면 대괄호를 사용하십시오.
동작은 차트가 천이를 따라 이동할 때 실행됩니다. 동작을 지정하려면 중괄호를 사용하십시오.

천이를 처음 만들 때 레이블을 입력하도록 표시됩니다. 또는 천이를 더블 클릭하여 천이 레이블을 추가할 수도 있습니다.
상태 간 천이에 조건을 추가합니다.
모델이 충전 중이 아닌 상태일 때만
Charge에서Discharge로 천이하려면 천이를 더블 클릭하고 레이블[~isCharging]을 입력합니다.레이블 지정을 완료하려면 캔버스를 클릭합니다. 레이블을 이동하려면 클릭하고 끌어서 놓습니다.

모델이 충전 중인 상태일 때만
Discharge에서Charge로 천이하려면 레이블[isCharging]을 입력합니다.
실행 가능한 코드 추가하기
상태 레이블에 상태 동작을 추가하면 활성 상태에서 코드를 실행할 수 있습니다. 상태 동작은 키워드로 시작하며, 그 뒤에 콜론과 실행 가능한 코드 블록이 옵니다.
이 예제에서는 세 가지 유형의 상태 동작을 사용합니다.
| 상태 동작 | 동작 |
|---|---|
entry | 상태가 활성화될 때 실행됩니다. |
during | 상태가 활성화되어 있는 스텝마다 실행됩니다. 상태가 활성화되는 스텝이나 비활성화되는 스텝에서는 실행되지 않습니다. |
exit | 상태가 비활성화될 때 실행됩니다. |
동작 모드에 따라 배터리 출력과 충전량을 변경하는 상태 동작을 추가합니다.
Charge상태에서 상태 이름을 클릭하여 상태 레이블을 편집합니다. 새 줄을 추가한 다음 아래 텍스트를 입력합니다. Enter 키를 눌러 새 줄을 추가할 수 있습니다.entry:sentPower=0;during:charge=charge+4;entry동작은 이름이sentPower인 변수를0으로 설정합니다.during동작은 이름이charge인 변수를4씩 증가시킵니다.팁
상태의 크기를 수동으로 조정하려면 코너를 클릭하고 끌어서 놓습니다. 캔버스에 있는 모든 객체의 형식을 자동으로 다시 지정하려면 캔버스의 빈 섹션을 클릭하여 객체 선택을 취소합니다. 그런 다음 Ctrl+Shift+A를 누릅니다.

Discharge상태에서sentPower를3.5로 설정하는entry동작과charge를3씩 감소시키는during동작을 추가합니다.
차트 데이터를 정의하고 Simulink 모델과 공유하기
천이나 상태에서 변수를 사용할 때는 해당 변수를 입력 데이터, 출력 데이터 또는 로컬 데이터로 정의해야 합니다. 기호 창에서 경고 배지
는 정의되지 않은 데이터를 나타냅니다.
| 아이콘 | 유형 | 동작 |
|---|---|---|
![]() | 입력 데이터 | 시뮬레이션 중에 이 데이터는 입력 신호의 값을 수신합니다. 입력 데이터를 정의하면 Simulink의 Chart 블록에 입력 포트가 추가됩니다. 입력 데이터에 수동으로 값을 할당할 수는 없습니다. |
![]() | 출력 데이터 | 시뮬레이션 중에 차트는 이 데이터의 값을 Simulink로 출력합니다. 출력 데이터를 정의하면 Simulink의 Chart 블록에 출력 포트가 추가됩니다. |
![]() | 로컬 데이터 | 시뮬레이션 중에 이 데이터는 차트에서만 액세스할 수 있는 정보를 저장합니다. |
차트는 문맥에 따라 각 데이터의 유형을 추론합니다. 예를 들어 차트는 isCharging이 입력 데이터이고, sentPower가 출력 데이터이며, charge가 로컬 데이터라고 추론합니다.

차트 데이터의 유형과 값을 정의합니다.
추론된 데이터형을 수락하려면 기호 창에서 "정의되지 않은 기호 연결 맺기" 버튼
을 클릭합니다. 정의되지 않은 데이터 옆에 있는 경고 배지가 사라집니다.배터리의 초기 충전량을 설정합니다. 기호 창에서
charge행의 값 열을 클릭하고50을 입력합니다.
참고
시뮬레이션 중에, 정의되지 않은 값을 갖는 데이터는 디폴트 값
0으로 설정됩니다.Simulink 모델의 최상위 수준으로 돌아가려면 탐색 막대에서 "부모로" 버튼
을 클릭합니다.Chart 블록에는 입력 포트와 출력 포트가 있습니다. 포트 이름을 보려면 코너를 클릭하고 바깥쪽으로 끌어서 놓아 Chart 블록을 확장합니다.

Simulink 블록을 Chart에 연결하기
모델을 완성하려면 Chart 블록의 입력 포트와 출력 포트에 소스 블록과 싱크 블록을 연결합니다.
외부 전원에 연결되거나 연결이 끊기는 배터리 시스템을 표현하려면 Simulink 캔버스에 Manual Switch 블록을 추가합니다. 출력을 Chart 블록의 입력에 연결합니다.
값이
1인 Constant 블록을 추가합니다. 출력을 Manual Switch 블록의 첫 번째 입력 포트에 연결합니다.값이
0인 Constant 블록을 추가합니다. 출력을 Manual Switch 블록의 두 번째 입력 포트에 연결합니다.Scope 블록을 추가합니다. Chart 블록의 출력 포트를 Scope 블록의 입력 포트에 연결합니다.
Chart 블록의 이름을
Battery로 지정합니다.
모델 시뮬레이션하기
완성된 모델을 시뮬레이션합니다.
시뮬레이션 탭에서 중지 시간을
Inf로 설정합니다.Chart 블록을 더블 클릭하여 블록으로 들어갑니다.
모델을 시뮬레이션하기 위해 모델링 탭에서 실행을 클릭합니다.
Charge상태 주변의 파란색 강조 표시를 확인합니다.Simulink 편집기로 돌아갑니다.
Manual Switch 블록을 전환하려면 블록을 더블 클릭합니다.
Stateflow 편집기를 엽니다.
Discharge상태 주변의 파란색 강조 표시를 확인합니다.시뮬레이션을 종료하기 위해 모델링 탭에서 중지를 클릭합니다.
Manual Switch를
1로 전환합니다.
튜토리얼의 다음 단계에서는 활성 상태 출력, 로깅, 중단점을 사용하여 배터리 모델을 검증하고 디버그합니다.


