Main Content

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 상태에서 하위 상태 SolidBlinking은 두 가지 동작 모드를 나타냅니다. 깜빡이는 램프를 구현하기 위해 차트는 시간 논리 연산자 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

사용자 인터페이스를 실행하면 차트 캔버스와 램프 위젯에서 제어 위젯 조정 효과를 관찰할 수 있습니다.

참고 항목

관련 항목