[myLV.net 집필진 강좌 – 웅킹킹킹]
안녕하세요. 웅킹킹킹 입니다.
이번 강좌는 지난 시간까지 이어서 해온 Actor Framework 구조의 Calculator 예제를 완성하는 시간을 갖도록 하겠습니다.
지난 강좌의 내용에서 계속해서 이어지기 때문에 지난 강좌의 내용을 간단히 요약하자면, Root, Nested 클래스의 설명과 호출, Actor 클래스의 Method 코드 작성, Message 클래스의 Do와 Send Method의 코드 작성을 배웠습니다.
여기서 Message 클래스의 Method (Do, Send)는 직접 코드를 작성하면서 번거로움을 느끼신 개발자분들이 있으라 생각됩니다. 사실 Message 클래스는 LabVIEW에서 자동으로 생성해주는 기능을 가지고 있습니다. 지난 시간 직접 Message 클래스를 생성하고 Method 코드 작성을 한 이유는 Message 클래스에 대해 보다 직접적으로 이해를 돕기 위해서였습니다.
그래서 이번에는 남은 Multiplication Actor 클래스의 Method와 Message 클래스는 자동으로 생성해주는 기능을 이용해서 만드는 방법을 배워보면서 예제를 완성하는 시간을 갖도록 하겠습니다.
1. Multiplication Actor에서 Method 생성.
그림 1 Multiplication Actor – Method 생성
2. 프런트 패널 및 블록다이어그램 구현. (그림 2 참조)
* 프런트 패널 구현 시 터미널 연결 필수.
* Read Caller Enqueuer.vi 함수 팔레트 à 데이터 통신 à 액터 프레임워크 항목에 위치합니다.
그림 2 Multiplication Actor:Multi Number.vi 구현
3. Multi Number.vi 파일명으로 Method 저장. (그림 3 참조)
그림 3 Multiplication Actor:Multi Number.vi
1. Message 클래스의 버추얼 폴더 생성.
Multiplication Actor Message 버추얼 폴더 하위에 Multiplication Request Msg 버추얼 폴더 생성. (그림 6 참조)
그림 4 Multiplication Request Msg 버추얼 폴더 생성
2. Multi Number.vi에서 Message 클래스 생성. (그림 5 참조)
그림 5 Multi Number.vi의 Message 클래스 생성.
3. 2 항목에서 생성한 Message 클래스를 I 항목에서 생성한 버추얼 폴더로 이동.
그림 6 Multiplication Request Msg 클래스
Multiplication 클래스의 Method를 호출하기 위한 Message 클래스를 LabVIEW에서 제공하는 자동 생성 기능을 이용하여 구현해보았습니다. 이전 강좌에서 직접 구현했었던 방식에 비해 너무 간단하게 구현할 수 있습니다.
1. Calculate 이벤트 추가. (그림 7 참조)
Addition, Multiplication 연산 기능을 추가하기 위해 Calculate 버튼 이벤트를 추가합니다.
그림 7 Calculate 이벤트 추가
2. Add Number, Multi Number Method 호출.
1 항목에서 추가한 이벤트 구조에서 Add Number, Multi Number Method를 호출하기 위해서 각각의 Message 클래스의 Send Method를 호출합니다.
그림 8 Calculate 이벤트 코드 구현
1. Calculator 클래스 데이터 멤버에 결과 값 업데이트를 위한 사용자 이벤트 및 컨트롤 참조 추가. (그림 9 참조)
사용자 이벤트 방식으로 Addition 결과 값을 업데이트, 컨트롤 참조를 사용해서 Multiplication 결과 값을 업데이트 합니다.
그림 9 Calculator 클래스의 데이터멤버
2. 사용자 이벤트 등록 및 참조 값 설정
Calculator 클래스의 Actor Core.vi 에서 결과 값을 업데이트하기 위한 사용자 이벤트 및 참조 값을 설정합니다.
그림 10 사용자 이벤트 등록 및 참조 값 설정
3. Generate Addition Result Event.vi Method 구현
Addition 연산을 한 결과 값을 업데이트하기 위한 이벤트를 발생시키기 위해서 Method를 생성합니다.
Calculator 클래스에서 Static Method라는 버추얼 폴더를 만든 뒤 Generate Addition Result Event.vi 명으로 Method를 생성합니다..
그림 11 Generate Addition Result Event.vi Method 생성
4. Generate Addition Result Event.vi 코드 구현
Addition 결과 값을 업데이트하는 사용자 이벤트 발생 코드를 구현합니다.
* 터미널 등록과 아이콘 편집 꼭 놓치지 말고 작업합니다.
그림 12 Generate Addition Result Event.vi 코드 구현
5. Generate Addition Result Event.vi를 위한 Message 클래스 생성.
Generate Addition Result Evnet.vi Method를 호출하는 Message 클래스를 생성합니다. 이제 우리는 자동 생성을 하는 방법을 배웠으니 자동 생성을 해서 구현합니다.
Message 클래스를 생성한 뒤 Calculator 클래스의 버추얼 폴더 Calculator Actor Messages 하위에 이동시킵니다.
그림 13 Generate Addition Result Event.vi 의 Message 클래스 생성
6. Add Number.vi에서 Generate Addition Result Event.vi 호출.
Add Number.vi에서 연산한 결과 값을 Generate Addition Result Event.vi를 호출하여 Calculator 클래스의 Actor Core.vi에 전달하도록 합니다.
그림 14 Addition Actor:Add Number.vi
7. Calculator 클래스의 Actor Core.vi 에서 결과 값 업데이트 구현.
Calculator 클래스의 Actor Core.vi 에서 결과 값 업데이트 사용자 이벤트가 발생했을 때 업데이트 하는 코드를 구현합니다.
그림 15 Result – Addition 사용자 이벤트 발생 코드 구현
8. 테스트
Launcher.vi를 실행하여 프로그램에서 더하기와 곱하기 연산을 수행하여 더하기 결과 값이 업데이트 되는 지 확인합니다.
그림 16 Addition 결과 값 확인
Addition 결과 값이 업데이트 되는 것을 확인하였습니다. 하지만 곱하기는 업데이트가 되지 않습니다. 왜냐하면 저희는 Addition 결과 값 업데이트 하는 과정만 구현하였기 때문입니다.
Multiplication 결과 값을 업데이트 하는 과정은 참조를 이용한 방식이며, 이 과정은 어떻게 구현을 해야 할지 고민해보시면서 구현하시기 바랍니다.
Actor Framework에서는 데이터를 업데이트를 하기 위해선 꼭 사용자 이벤트나 참조를 사용해야 하는 지 이번 기회를 통해서 생각해보는 시간을 갖도록 하겠습니다. 이 부분에 대한 정확한 의미만 파악해도 Actor Framework의 구조에 대해서 많이 알 수 있는 기회가 될 것이기 때문입니다.
지금까지 Actor Framework구조로 이루어진 Calculator 예제를 모두 실습 했습니다. 기존 프로그램 패러다임으로 구현했으면 아주 간단한 과정을 꽤나 어렵게 구현했습니다.
하지만 Actor Framework를 간단하게 체험하기 위한 매우 좋은 예제라고 판단이 되며, 또한 간단한 프로그램은 OOP, Actor Framework로 구현하는 과정은 비효율적이라는 사실을 깨닫기도 합니다.
사실 OOP, Actor Framework는 규모가 크고, 향후 유지 보수 및 업데이트를 과정을 계속 진행하는 프로젝트에 효율적입니다. 간단한 프로그램은 기존의 생산자 소비자 구조 혹은 상태 머신 구조를 추천합니다.
Actor Framework 라이브러리 코드를 바로 분석하는 것보단 간단한 예제를 먼저 접하는 것이 좀 더 개발자분들에게 흥미를 유발하고 코드를 분석하기 전에 사전 정보를 가지고 시작하는 것이 좋을 것 같다는 판단에 예제를 진행해 보았습니다. 하반기에 일정이 많이 바빠져서 업데이트가 느려져서 생각보다 오랜 시간 끝에 예제 강좌를 마쳐 죄송합니다.
다음 시간부터는 Actor Framework 라이브러리 코드를 분석하면서 하나하나 자세하게 알아가는 과정을 가지려고 합니다.
감사합니다.