[Archive] 강좌게시판

취소
다음에 대한 결과 표시 
다음에 대한 검색 
다음을 의미합니까? 

[myLV.net 집필진 강좌] 디자인패턴(2)

 [myLV.net 집필진 강좌 – Goodmaner]

 

디자인패턴(1)에서는 다양한 디자인패턴 구조들에는 어떤 것이 있는지 살펴보았고, 이 중에서 보편적으로 가장 많이 사용하는 디자인패턴인 "생산자/소비자 이벤트 디자인패턴"에 대해서 알아보았습니다. 이번 강좌에서는 "표준 상태 머신 디자인 패턴"에 대해서 살펴보도록 하겠습니다. 앞서 언급한 "생산자/소비자 이벤트 디자인패턴"을 구현할 때 기능을 수행하는 소비자 루프를 구성할 때 "표준 상태 머신 디자인 패턴"을 사용할 수 있습니다. 뿐만 아니라 사용자 인터페이스가 간단한 프로그램을 구현할 때도 사용하면 매우 편리합니다. "표준 상태 머신 디자인 패턴"은 사전에 정의해 놓은 상태들 간에 천이과정을 통하여 프로그램이 실행되도록 하는 디자인 패턴입니다. 예를 들어서 상태를 A,B,C로 정의해 놓고, 실행을 A>>B>>C 순으로 실행되도록 운영할 수 있습니다. 이 디자인 패턴을 사용하는 경우 프로그램에 대한 유지보수 및 확장성이 뛰어납니다. 예를 들어서 기존에 구현한 내용 중에서 일부 기능을 수행하지 않도록 한다거나, 새로운 기능을 추가하려고 하는 경우 간단한 프로그램 수정을 통하여 구현 가능합니다. LabVIEW를 어느 정도 사용할 줄 아는 분들의 경우에는 이미 알고 있는 내용이겠지만, LabVIEW를 시작한지 얼마되지 않았거나, 체계적으로 배우지 못한 분들을 고려하여 아래와 같은 상태머신 구조에 대해서 함께 LabVIEW로 구현해보도록 하겠습니다.

1.JPG

 

위에 표시한 상태머신에 대해서 살펴보도록 하겠습니다. 
 
프로그램을 시작하면 "초기화" 상태로 천이하고, 이후 "대기" 상태로 천이합니다.
 
"초기화" 상태에서는 프로그램에서 사용하는 각종 변수들을 초기화시켜줍니다.
 
"대기" 상태에서는 사용자 이벤트를 기다리고 있다가, 아래 그림에서와 같은 사용자 UI 상의 버튼들을 클릭하면, 클릭한 버튼마다 각기 다른 동작을 수행합니다.
 
"프로세스 1" 버튼을 클릭하면 위 상태머신에서처럼 "A" >> "B" >> "C"로 순차적으로 천이하고, 이후에 다시 "대기" 상태로 천이합니다.
 
"프로세스 2" 버튼을 클릭하면 "A" >> "B"로 천이한 후 다시 "대기" 상태로 천이합니다.
 
"프로세스 3" 버튼을 클릭하면 "A"로 천이한 후 다시 "대기" 상태로 천이합니다.
 
"종료" 버튼을 클릭하면 "종료" 상태로 천이하고 프로그램을 종료합니다.
 
2.JPG

 

지금부터는 LabVIEW를 이용하여 위의 상태머신을 구현해 보겠습니다.

 

3.JPG

 

위의 그림에서처럼 LabVIEW를 실행한 상태에서 "파일">>"새로 만들기"를 클릭합니다.

 

4.JPG

 

왼쪽 트리구조에서 "표준 상태 머신"을 선택하고 확인 버튼을 클릭합니다.

 

5.JPG

 

확인 버튼을 클릭하면 위 그림에서처럼 "표준 상태 머신"에 대한 기본 Template 코드가 자동으로 생성됩니다. 이 상태에서 "저장" 버튼을 클릭하면, 상태머신 구조에 대한 컨트롤을 저장할 수 있습니다. "StateMachineStates.ctl"이라는 파일로 저장하겠습니다.

 

6.JPG

 

다음은 "표준 상태 머신"으로 프로그램하고자 하는 VI 파일을 StateMachine_Example.vi라는 파일로 저장하겠습니다.
앞에서 먼저 저장한 컨트롤 파일(StateMachine_Example.vi)을 열어서 아래와 같이 "아이템 편집"을 클릭합니다.
 
7.JPG

8.JPG

  

운영하고자 하는 상태들("초기화", "대기", "A", "B", "C", "종료")을 삽입한 후 확인버튼을 클릭합니다.
이제부터는 StateMachine_Example.vi 파일을 열어서 각각의 상태에 대한 코드를 구현하겠습니다.
먼저 "초기화" 상태입니다. VI를 실행하면, 가장 먼저 수행하게 되는 부분으로 아래 그림에서처럼 While 루프 밖에서 초기 값들을 정의하고 시프트 레지스터로 초기 값들을 설정해줍니다. "초기화" 상태가 수행 완료되면, "대기" 상태로 천이합니다.
 

9.JPG

 

"대기" 상태에서는 사용자 이벤트가 발생하는지를 체크해서 발생한 이벤트에 해당하는 상태로 천이하도록 해줍니다. 아래 그림에서처럼 클러스터 형태로 정의한 컨트롤에 대해서 값이 변경되면 그에 해당하는 다음 상태로 천이합니다. 클러스터에 대해서 "클러스터를 배열로" 함수와 "1D 배열 검색" 함수를 이용하여 각각의 버튼("프로세스 1", "프로세스 2", "프로세스 3", "종료")에 이벤트가 발생하는지 여부를 확인하도록 하였습니다. "대기" 상태는 -1, "프로세스 1" 상태는 0, "프로세스 2" 상태는 1, "프로세스 3" 상태는 2, "종료" 상태는 3입니다.

10.JPG

 

"A" 상태에서는 "단일 버튼 대화 상자" 함수를 이용하여 "A"라는 문자를 출력하게 합니다. 이후에는 조건에 따라서 다음에 천이할 상태를 결정합니다. "프로세스 1" 또는 "프로세스 2" 버튼을 클릭한 경우에는 "B" 상태로 천이하고, "프로세스 3" 버튼을 클릭한 경우에는 "대기" 상태로 천이합니다.

11.JPG

 

"B" 상태에서는 "단일 버튼 대화 상자" 함수를 이용하여 "B"라는 문자를 출력하게 합니다. 이후에는 조건에 따라서 다음에 천이할 상태를 결정합니다. "프로세스 1" 버튼을 클릭한 경우에는 "C" 상태로 천이하고 "프로세스 2" 버튼을 클릭한 경우에는 "대기" 상태로 천이합니다.

12.JPG

 

"C" 상태에서는 "단일 버튼 대화 상자" 함수를 이용하여 "C"라는 문자를 출력하게 합니다. 이후에는 변수들을 초기화시킨 후 "대기" 상태로 천이합니다.

 

13.JPG

 

"종료" 상태에서는 While 루프를 빠져나가도록 해서 프로그램을 종료시킵니다.

 

14.JPG

 

이처럼 "표준 상태 머신 디자인 패턴"을 이용하여 사용자 인터페이스가 간단한 프로그램을 손쉽게 구현할 수 있습니다. 서두에 프로그램의 유지 보수 및 확장성이 용이하다고 말씀드렸습니다. 예를 들어서 "프로세스 1" 버튼을 클릭하더라도 이와 관련한 상태들로 천이하게 안하고 싶으면, 아래 그림에서와 같이 간단하게 "프로세스 1"에 해당하는 케이스 구조 내용만 수정하면 됩니다. 뿐만 아니라 새로운 기능을 추가하고 싶으면, 새로운 기능에 해당하는 상태를 추가한 후 추가된 상태에 원하는 기능을 코드로 구현하면 됩니다.

15.JPG

 

LabVIEW에서 가장 많이 사용하는 디자인 패턴이기 때문에 반드시 숙지하시길 바랍니다. 첨부파일에 관련 예제 코드를 올려 드립니다.

기여자