[Archive] 강좌게시판

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

[myLV.net 집필진 강좌] Actor Framework 실습 예제 - 2

 [myLV.net 집필진 강좌 – 웅킹킹킹]

 

안녕하세요. 웅킹킹킹 입니다.

 

 

최근 시간이 생각보다 없어서 강좌가 너무 늦었네요. 죄송합니다.

지난 시간에 이어 Actor Framework의 메커니즘의 이해를 돕기 위해 시작했었던 Calculator 예제를 계속해서 이어나가도록 하겠습니다.

 

지난 시간은 Actor Framework 프로젝트 생성과 Calculation 프로그램의 Actor 클래스(Calculator Actor, Addition Actor, Multiplication Actor) 3개를 생성하고 각 클래스의 상속 구조를 구현했습니다.
그리고 중간 테스트로 Launcher.vi를 만들어 Actor Framework로 구현한 프로그램을 동작하는 방법까지 익혔습니다.

 

이번 시간은 각각의 Actor 클래스의 역할을 구현하고 역할을 수행하기 위한 Message 클래스 생성하고 호출을 함으로써 프로그램을 완성하는 시간을 가지려고 합니다.
* Message 클래스는 LabVIEW에서 자동 생성 기능을 제공하지만 우리는 좀더 체감할 수 있는 이해를 위해 직접 Message 클래스를 만들 예정입니다.

 

  1. 하위 Actor 호출

    Actor 클래스는 크게 2가지로 나뉩니다. Root 클래스와 Nested 클래스. 즉, 주와 부 개념으로 나눠져 Actor 클래스를 구분합니다. Root 클래스는 주 클래스로써 프로그램을 구성하는 Actor 클래스 중 가장 기본이 되며 중요한 역할을 하는 클래스입니다. Nested 클래스는 이름처럼 Root 클래스에 종속이 되어 호출되어 해당 역할을 수행하는 클래스 입니다. Calculator 프로그램에서의 Root 클래스와 Nested 클래스는

    - Root Class : Calculator Actor
    - Nested Class : Addition Actor, Multiplication Actor

    입니다.

    Root 클래스는 지난 시간 구현했었던 Launcher.vi에서 호출했었습니다. Nested 클래스는 Root 클래스의 Actor Core.vi에서 호출하게 됩니다.

 

그림 1 Calculator Actor.Actor Core.vi - Nested Actor 호출

 

 

1. 그림 1과 같이 Launch Nested Actor.vi 함수를 호출하여 Addition, Multiplication Actor 클래스 호출.
* Launch Nested Actor.vi 는 함수 팔레트 à 데이터 통신 à 액터 프레임워크 항목에 위치합니다.

 

그림 1 Calculator Actor.Actor Core.vi - Nested Actor 호출그림 1 Calculator Actor.Actor Core.vi - Nested Actor 호출

 

2. User Interface 구현

보통 Actor Framework로 구현하는 프로그램은 Root 클래스의 Actor Core.vi에 User Interface를 구현하게 됩니다.
그래서 Calculator 프로그램의 Root 클래스인 Calculator Actor 클래스의 Actor Core.vi에서 User Interface를 구현합니다.

 

그림 2 Calculator Actor:Actor Core.vi – 프런트패널 UI그림 2 Calculator Actor:Actor Core.vi – 프런트패널 UI

 

 

 

1. 그림 2와 같이 연산을 하기 위한 User Interface를 구현.

 

 

  1. Addition Actor의 Method (Add Number.vi) 생성

    Actor 클래스의 Method (Add Number.vi)를 구현합니다
     

1. Addition Actor에서 Method 생성.

 

 

그림 3 Addition Actor – Method 생성그림 3 Addition Actor – Method 생성

 

 

  1. 프런트 패널 및 블록다이어그램 구현. (그림 4 참조)
    * 프런트 패널 구현 시 터미널 연결 필수.
    * Read Caller Enqueuer.vi 함수 팔레트 
    à 데이터 통신 à 액터 프레임워크 항목에 위치합니다.

4.png

 

그림 4 Addition Actor:Add Number.vi 구현그림 4 Addition Actor:Add Number.vi 구현

 

3. Add Number.vi 파일명으로 Method 저장. (그림 5 참조)

 

그림 5 Addition Actor:Add Number.vi그림 5 Addition Actor:Add Number.vi

  

  1. Message 클래스 생성.

    3번 항목에서 구현한 Method (Add Number.vi)를 실행하기 위한 Message 클래스를 생성합니다.
    * Actor Framework에서는 클래스의 Method를 Message 클래스를 통해서 호출하여 실행시킵니다.

 

1. Message 클래스의 버추얼 폴더 생성.
Addition Actor Message 버추얼 폴더 하위에 Addition Request Msg 버추얼 폴더 생성. (그림 6 참조)

 

 

 

6.png

 

그림 6 Addition Request Msg 버추얼 폴더 생성그림 6 Addition Request Msg 버추얼 폴더 생성

 

 

2. 1 단계에서 생성한 버추얼 폴더에서 Addition Request Msg 이름으로 Message 클래스 생성. (그림 7 참조)

 

 

 

7.png

 

그림 7 Addition Request Msg 클래스 생성그림 7 Addition Request Msg 클래스 생성

 

3. Add-Multiply Actor Project\Actors\Addition Actor\Addition Actor Messages

\Addition Request Msg 폴더에 클래스 파일 저장.

 
그림 8 Addition Request Msg 클래스 파일 저장그림 8 Addition Request Msg 클래스 파일 저장

 

4. Addition Request Msg 클래스 상속 설정. Message 클래스의 하위 클래스로 상속 설정.

 

 

9.png

 

그림 9 Message 클래스의 하위클래스로 상속 설정그림 9 Message 클래스의 하위클래스로 상속 설정

 

5. Addition Request Msg 클래스의 데이터 멤버 등록.

숫자형 컨트롤 Number 1, 2를 생성해서 등록합니다. (그림 10 참조)
* Addition Request Msg 클래스는 Add Number.vi를 실행하기 위한 Message 클래스입니다. Add Number.vi가 실행하기 위해 필요한 입력 정보를 데이터 멤버로 등록합니다.

 

10.png

 

그림 10 Addition Request Msg 데이터 멤버 등록그림 10 Addition Request Msg 데이터 멤버 등록

 

6. Message 클래스의 Method Do.vi 덮어쓰기

Message 클래스의 주 역할을 담당하는 Method Do.vi를 덮어쓰기로 가져와서 Addition Request Msg 클래스가 Method Add Number.vi를 호출하는 기능을 구현합니다.

 

11.png

 

11-2.png

 

11-3.png

 

그림 11 Message 클래스의 Method Do.vi 덮어쓰기그림 11 Message 클래스의 Method Do.vi 덮어쓰기

 

7. 6 단계에서 생성한 Method Do.vi 블록다이어그램 코드 작성. (그림 12 참조)

Do.vi의 Actor 클래스를 Addition 클래스로 좀더 구체적으로 정의한 다음 Add Number.vi를 호출합니다. 그리고 Addition Request Msg 클래스에서 등록한 데이터 멤버를 Add Number.vi의 입력 터미널에 올바르게 연결합니다.

 
그림 12 Addition Request Msg:Do.vi 블록다이어그램 코드 작성그림 12 Addition Request Msg:Do.vi 블록다이어그램 코드 작성

 

8. Do.vi 파일 저장.

Addition Request Msg 클래스가 저장된 위치에 Method Do.vi 파일 저장합니다.

 

그림 13 Addition Request Msg:Do.vi 파일 저장.그림 13 Addition Request Msg:Do.vi 파일 저장.

 

9. ‘Send’ Method 생성

Actor 클래스에게 vi ~ viii 단계에서 생성한 Do.vi를 실행하도록 명령을 전달하는 ‘Send’ Method를 생성합니다.
먼저 다시 한번 더 Addition Request Msg 클래스에서 Method를 생성하고 해당 클래스가 있는 경로에 저장합니다.
(그림 14 참조)

 

14.png

 

그림 14 ‘Send’ Method 생성 및 저장그림 14 ‘Send’ Method 생성 및 저장

10. Send Addition Request Msg Method 코드 구현.
‘Do’ Method 호출 명령을 Actor에게 전달하기 위한 ‘Send’ Method 코드를 구현합니다. (그림 15 참조)
* Enqueue.vi는 함수 팔레트 à 데이터 통신 à 액터 프레임워크 à 고급 à 메시지큐 항목에 위치합니다.
* 프런트패널의 모든 컨트롤, 인디케이터는 터미널블록에 꼭 연결하시기 바랍니다.

 

 

15.png

 

그림 15 “Send’ Method 코드 구현그림 15 “Send’ Method 코드 구현

 

11. ‘Send’ Method 아이콘 설정.
실제로 프로그래머는 ‘Do’ 보다 ‘Send’ Method를 프로그래밍할 때 더 많이 사용하기 때문에 ‘Send’ Method는 아이콘을 만들어 줍니다.

 

 

그림 16 ‘Send’ Method 아이콘 설정그림 16 ‘Send’ Method 아이콘 설정

 

이번 시간은 Actor Framework에서의 Root, Nested Actor와의 관계와 유저인터페이스, 그리고 메시지 클래스의 ‘Do’, ‘Send’ 역할을 하는 Method를 직접 구현해보았습니다.

실제로 Actor 클래스의 Method를 호출하여 실행하는 메커니즘이 조금 복잡합니다.
쉽게 단계별로 간단하게 설명하자면

 

     1. Actor 클래스의 Method 구현.

     2. Method에 대한 Message 클래스 생성.

     3. Message 클래스의 ‘Do’ Method를 덮어쓰기하여 Actor 클래스의 Method를 호출하는 코드 구현.

     4. Message 클래스의 ‘Do’ Method를 Actor에게 전달하기 위한 ‘Send’ Method 구현.

 

입니다.

그냥 단순하게 SubVI를 블록다이어그램에 끌어다 호출하면 되는 작업을 저렇게 복잡한 방법을 통해 돌아갑니다만.. Actor Framework의 구조상 저렇게 해야만 하며 구조 내부를 하나하나 살펴보면 이해가 되시리라 믿습니다. Actor Framework의 구조는 실습 강좌가 끝난 다음 자세하게 살펴볼 예정이니 이해가 되지 않는 부분이 있으시더라도 너무 조급해하지 않으시길 바립니다.

그리고 충분히 강좌가 아니더라도 혼자서도 Actor Framework의 라이브러리를 살펴보시면 이해를 할 수 있기 때문에 시간이 있으신 분들은 소스코드를 자세하게 살펴보는 것도 추천합니다.

이번 강좌에서 Message 클래스의 Method를 만드는 과정이 꽤나 복잡하고 험난했습니다. 사실 이 과정은 LabVIEW에서 자동으로 생성해주는 기능이 있습니다. 그래서 다음 강좌에서는 Multiplication 관련 Message 클래스는 자동으로 생성하는 과정을 다룰 예정입니다.

 

여러 가지 일과 사정이 있어서 강좌가 많이 늦었으며, 실습 예제가 생각보다 너무 내용이 많아서 다음 강좌에서 끝이 날 것 같습니다.

 

그리고 꼭 Actor Framework에 관심이 있으신 분들은 실습을 한번 해보셨으면 좋겠습니다. 문서로 만드는 과정이 생각보다 힘드네요. 근데 아무도 실습을 하지 않으시면 슬플 것 같습니다. ㅋㅋ

기여자