Stateflow 차트를 사용하여 인간-기계 인터페이스 논리 설계하기
이 예제에서는 독립 실행형 Stateflow® 차트에서 그래픽 사용자 인터페이스의 논리를 모델링하는 방법을 보여줍니다. 독립 실행형 차트는 동작 언어로 MATLAB®을 사용하여 클래식 차트 의미 체계를 구현합니다. Simulink®에서의 코드 생성이 제한되는 기능을 포함해 MATLAB의 모든 기능을 사용하여 차트를 프로그래밍할 수 있습니다. 자세한 내용은 Create Stateflow Charts for Execution as MATLAB Objects 항목을 참조하십시오.
입력 이벤트를 호출하고 시간 연산자를 사용하여 독립 실행형 Stateflow 차트를 실행할 수 있습니다. 이벤트 기반 실행 워크플로와 타이머 기반 실행 워크플로는 HMI(인간-기계 인터페이스)과 UI(그래픽 사용자 인터페이스)의 기반이 되는 논리를 설계하는 데 적합합니다.
MATLAB 앱 디자이너를 사용하는 경우 인터페이스 위젯의 콜백 함수는 차트의 이벤트를 호출합니다.
Stateflow 차트에서는 시간 연산자와 로컬 데이터가 사용자 인터페이스의 속성을 제어합니다.
MATLAB을 사용하여 그래픽 사용자 인터페이스를 만드는 방법에 대한 자세한 내용은 앱 디자이너를 사용하여 앱 개발하기 항목을 참조하십시오.
앱 디자이너 사용자 인터페이스 제어하기
이 사용자 인터페이스에는 램프를 제어하는 On-Off 스위치가 포함되어 있습니다. 스위치가 On 위치인 경우 Mode 옵션 버튼의 위치에 따라 램프가 계속 켜짐 또는 깜박임의 두 가지 모드 중 하나로 켜집니다. Blink Rate 슬라이더를 이동하여 깜박임 속도를 제어할 수 있습니다. 앱을 시작하려면 앱 디자이너 툴스트립에서 실행을 클릭합니다.
파일 sf_lamp_logic.sfx
는 사용자 인터페이스의 논리를 구현하는 독립 실행형 Stateflow 차트를 정의합니다. 차트에는 입력 이벤트(ON
, OFF
, BLINKING
, SOLID
)와 로컬 데이터(delay
, app
)가 있습니다. 차트에 있는 여러 동작은 각 상태에서 액세스할 수 있는 위젯을 제어합니다. 예를 들어, Off
상태의 동작은 사용자 인터페이스의 Lamp 위젯, Mode 옵션 버튼, Blink Rate 슬라이더를 어둡게 표시합니다.
On
상태에서 하위 상태 Solid
와 Blinking
은 두 가지 동작 모드를 나타냅니다. 깜빡이는 램프를 구현하기 위해 차트는 시간 논리 연산자 after
를 활용합니다. 차트가 상태 Blinking.Off
로 진입하면, 진출하는 천이의 표현식 after(delay,sec)
는 몇 초 후에 차트를 실행하는 MATLAB timer 객체를 생성합니다. 그런 다음 차트는 상태 Blinking.On
으로 천이하고 또 다른 타이머 객체를 생성하여 Blinking.Off
로 다시 천이되도록 트리거합니다. 차트가 두 상태 간을 계속해서 천이하는 동안 로컬 데이터 지연 값을 변경하여 깜박이는 속도를 조정하거나 입력 이벤트 SOLID
또는 OFF
를 호출하여 깜박임 모드로부터 천이할 수 있습니다.
On
상태의 이력 연결점은 가장 최근의 활성 하위 상태에 대한 정보를 보존하므로, 램프를 켤 때 사용자 인터페이스가 이전 동작 모드로 돌아갑니다.
이벤트를 사용하여 독립 실행형 차트 실행하기
MATLAB 명령 창에서 입력 이벤트 함수를 호출하여 독립 실행형 차트를 실행할 수 있습니다. Stateflow 편집기는 차트 애니메이션을 통해 활성 상태와 천이를 강조 표시하여 다음 명령 각각의 효과를 보여줍니다.
1. 차트 객체 L
을 생성하고 delay
의 값을 0.5로 초기화합니다. 이 값은 초당 1회 깜빡이는 깜박임 속도(0.5초 동안 켜진 후 0.5초 동안 꺼짐)에 해당합니다.
L = sf_lamp_logic(delay=0.5);
2. 램프를 켭니다.
ON(L)
3. 깜빡임 모드로 전환합니다.
BLINKING(L)
4. delay
의 값을 0.25로 설정합니다. 이 값은 초당 2회 깜빡이는 깜박임 속도(0.25초 동안 켜진 후 0.25초 동안 꺼짐)에 해당합니다.
L.delay = 0.25;
5. 계속 켜짐 모드로 전환합니다.
SOLID(L)
6. 램프를 끕니다.
OFF(L)
7. MATLAB 작업 공간에서 차트 객체 L
을 삭제합니다.
delete(L)
독립 실행형 차트를 사용자 인터페이스에 연결하기
사용자 인터페이스와 독립 실행형 Stateflow 차트 간을 양방향으로 연결하려면 앱 디자이너 창을 열고 코드 보기를 선택하십시오.
1. 앱 디자이너 창에서 프라이빗 속성 lampLogic
을 생성하여 Stateflow 차트 객체에 핸들을 저장합니다.
properties (Access = private)
lampLogic
end
2. 차트 객체를 생성하고 그 로컬 데이터 app
을 사용자 인터페이스 핸들로 설정하는 StartupFcn
콜백 함수를 만듭니다. 차트 객체 핸들을 lampLogic
프라이빗 속성에 할당합니다.
function StartupFcn(app) app.lampLogic = sf_lamp_logic(delay=0.5,app=app); end
3. 사용자 인터페이스를 닫을 때 차트 객체를 삭제하는 CloseRequestFcn
콜백 함수를 만듭니다.
function UIFigureCloseRequest(app, event) delete(app.lampLogic); delete(app); end
4. 각 사용자 인터페이스 위젯에 대해 독립 실행형 차트의 적절한 이벤트를 호출하는 콜백 함수를 추가합니다.
Switch 위젯의
ValueChangedFcn
콜백 함수:
function SwitchValueChanged(app, event) value = app.Switch.Value; switch lower(value) case "off" OFF(app.lampLogic); case "on" ON(app.lampLogic); end end
Mode Button 위젯의
SelectionChangedFcn
콜백 함수:
function ModeButtonGroupSelectionChanged(app, event) selectedButton = app.ModeButtonGroup.SelectedObject; if selectedButton == app.SolidButton SOLID(app.lampLogic); else BLINKING(app.lampLogic); end end
Blink Rate Slider 위젯의
ValueChangedFcn
콜백 함수:
function BlinkRateSliderValueChanged(app, event) app.lampLogic.delay = round(0.5/app.BlinkRateSlider.Value,2); end
사용자 인터페이스를 실행하면 차트 캔버스와 램프 위젯에서 제어 위젯 조정 효과를 관찰할 수 있습니다.