본문내용
1. 엘리베이터 프로그램 설계
1.1. 엘리베이터 프로그램 UI
엘리베이터 프로그램 UI는 사용자가 엘리베이터 운행을 제어하고 현재 상황을 모니터링할 수 있는 그래픽 사용자 인터페이스이다. 이는 크게 다음과 같은 요소로 구성되어 있다.
맨 위는 문자열 컨트롤을 사용하여 현재 엘리베이터의 층수를 나타낸다. 아래에는 엘리베이터의 현재 층을 표시하기 위한 불리언 컨트롤 4개를 클러스터로 배치하였다. 이를 통해 사용자는 엘리베이터가 어느 층에 있는지 쉽게 확인할 수 있다.
또한 층 표시를 위해 앞서와 동일한 방식으로 불리언 컨트롤과 클러스터를 구현하였다. 여기에는 불리언 텍스트를 표시하여 가독성을 높였다.
이동시간 표시를 위한 숫자형 컨트롤, 엘리베이터 버튼을 누를 수 있는 불리언 컨트롤과 클러스터, 그리고 작동을 멈추기 위한 정지버튼이 추가로 포함되어 있다.
이와 같이 엘리베이터 프로그램 UI는 사용자가 엘리베이터의 현재 상황을 직관적으로 파악하고, 다양한 기능을 편리하게 제어할 수 있도록 설계되었다. 특히 불리언 컨트롤과 클러스터 사용을 통해 층 표시와 버튼 조작이 쉽고 직관적이며, 이동시간 설정과 정지 기능 등을 통해 사용자의 요구사항을 효과적으로 반영하고 있다.
1.2. 엘리베이터 프로그램 구현
1.2.1. Main VI
'1.2.1. Main VI'는 엘리베이터를 구현하는 프로그램의 핵심이 되는 부분이다. 이 부분에서는 사용자 이벤트 처리 루프와 메인 루프(층 표시 루프) 총 2개의 병렬 루프를 사용하여 엘리베이터의 동작을 구현하고 있다.
사용자 이벤트 처리 루프에서는 "정지버튼"을 눌렀을 때와 "엘리베이터 버튼"을 눌렀을 때의 동작을 처리한다. "정지버튼"을 누르면 2개의 병렬 루프를 정지시키기 위해 Exit? 불리언 컨트롤을 사용하고, "엘리베이터 버튼"을 누르면 타겟층을 결정하고 층 버튼의 값을 변경하는 등의 동작을 수행한다.
메인 루프(층 표시 루프)에서는 엘리베이터의 현재 상태를 표시하고, 다음 층으로 이동하는 동작을 구현한다. 이를 위해 'Sub_FGVState' Sub VI를 사용하여 엘리베이터의 상태를 관리하고, 'Sub_JudgeNextState' Sub VI를 사용하여 다음 층으로 이동할 때의 동작을 결정한다. 또한 이동 시간을 설정하기 위해 대기 함수를 사용한다.
이처럼 '1.2.1. Main VI'는 엘리베이터의 동작을 구현하는 핵심 부분으로, 사용자 이벤트 처리와 엘리베이터의 상태 관리, 층 이동 등을 효과적으로 구현하고 있다.
1.2.2. 사용자 컨트롤
''사용자 컨트롤''은 엘리베이터 프로그램을 구현하기 위해 만든 사용자 인터페이스 관련 컨트롤이다. 본 프로그램에서는 크게 '기능적 글로벌 변수(FGV: Functional Global Variable)'와 '상태' 컨트롤로 구성되어 있다.
'FGV'는 상태 정보를 임시 저장하거나 저장된 값을 읽어오기 위한 컨트롤이다. 'Set'은 설정을, 'Get'은 읽기를 위해 사용된다. 전역 변수로 프로그램의 어디에서나 접근이 가능하다. 열거형 컨트롤로 구현되어 있어 타입 정의 속성을 갖는다.
'상태' 컨트롤은 현재 상태를 입력해 주기 위해 만든 것으로, '초기화', '1층', '2층', '3층', '4층'으로 구성되어 있다. 이 또한 열거형 컨트롤로 타입 정의 속성을 갖는다.
이처럼 '사용자 컨트롤'은 엘리베이터 프로그램의 상태와 동작을 관리하기 위해 만든 사용자 인터페이스 컨트롤이다. 상태 정보를 저장하고 읽을 수 있는 'FGV'와 현재 상태를 나타내는 '상태' 컨트롤을 통해 엘리베이터의 동작을 효과적으로 제어할 수 있다.
1.2.3. Sub VI
'Sub_JudgeNextState'는 엘리베이터의 다음 상태를 판단하기 위한 서브 VI이다. 이 서브 VI는 현재 층과 타겟 층을 입력값으로 받아서 다음 층을 출력한다.
먼저 '초기화' 상태일 때, 타겟층에 따라 2개의 케이스 조건(1층, 2층)이 생성된다. 각각의 케이스에 대해 층번호, 층표시, 다음층 상태를 초기화하여 출력한다.
그 다음으로 타겟층이 '1층', '2층', '3층', '4층'일 때의 케이스를 각각 만들어준다. 각 케이스에서는 현재층을 표시하고, 다음층 상태를 출력한다. 예를 들어 ...