You are here

LabVIEW Tech-Tip 13호 - LabVIEW를 위한 STM 프로토콜 프로그래밍 실습


제2편 실제 원격 시스템에 STM 프로그래밍 하기
이번 편에는 1편에 이어 실제 리얼타임 타겟과 STM 통신을 수행하는 프로그램을 실제 사례와 함께 살펴보도록 하겠습니다. NI CompactRIO는 리얼타임 운영체제(Real-time Operating System)을 사용하는 대표적 하드웨어로써, 시스템의 프로세서와 신호 입출력단 사이에 FPGA가 위치하여 더 빠른 looping time을 구현합니다.

LabVIEW Tech-Tip 12호를 먼저 살펴보시면 더욱 효율적으로 학습하실 수 있습니다.

 

STM 실습 예제

실습 예제 및 시스템 사양

실습 예제 다운로드
첨부된 예제는 LabVIEW 8.5 또는 그 이상의 버전에서 사용 가능합니다. LabVIEW 평가판을 설치하시면 본 예제를 실행하실 수 있습니다.
STM을 설치하시면 본 문서에 첨부되지 않은 다른 예제를 아래의 위치에서 확인하실 수 있습니다.
C:\Program Files\National Instruments\LabVIEW 8.5\examples\STM

 

CompactRIO의 구조와 프로그래밍

NI CompactRIO는 아래 그림과 같이 다른 대부분의 리얼타임 타겟들과 마찬가지로 호스트 PC에서 프로그래밍하여 타겟으로 다운로드하는 방식으로 프로그래밍됩니다.

 

그림 1

그러나 CompactRIO는 프로세서와 입출력단 사이에 FPGA가 위치하므로 타겟을 프로그래밍할 때 RT와 FPGA를 모두 프로그래밍하여 다운로드하여야 합니다.

그림 2

 

그림 3

그림 3에서 보시다시피 CompactRIO 프로그래밍을 위해서는 원격에서 상태를 모니터링하는Host VI, 실제 원격 시스템에서 어플리케이션을 수행하는 Real-Time VI, 그리고 CompactRIO 내부의 FPGA를 정의하는 FPGA VI를 프로그래밍하여야 합니다.

그럼 실제 프로그래밍을 시작해보겠습니다. 먼저 이 문서에서 할 예제는 CompactRIO의 아날로그 출력에서 지정한 값을 출력하여 그 값을 아날로그 입력 모듈로 받아들이고, 이 입출력 값을 STM을 이용하여 호스트 PC와 통신하는 것이 되겠습니다.

그림4와 같이 LabVIEW를 실행하고 새 프로젝트를 선택합니다.

 

그림 4

생성된 프로젝트의 이름을 적당히 바꾸고 프로젝트 이름 위에 오른쪽 클릭을 한 후 ‘새로 만들기 >> 타겟 및 디바이스’를 선택합니다.

 

그림 5

이렇게 선택하면 그림 6과 같은 화면이 뜨게 됩니다. 호스트 PC와 타겟이 동일한 서브넷 마스크를 가지는 네트워크에 연결되어 있다면 ‘기존 타겟 및 디바이스’를 선택합니다. CompactRIO가 정상적인 상태라면 이 상태에서 특정한 동작을 취하지 않아도 자동적으로 ‘Real-Time CompactRIO’ 항목 아래에 나타나게 됩니다. 사용하고자 하는 CompactRIO를 선택하고 확인을 누릅니다.

 

그림 6

정상적으로 LabVIEW 프로젝트에 타겟이 추가되었다면 그림 7에서와 같이 프로젝트 내에 타겟이 보이게 됩니다.

FPGA VI 만들기


그림 7

 

그림 8

FPGA VI를 프로그래밍하기 위해 ‘FPGA Target’ 위에 오른쪽 클릭을 한 후 ‘새로 만들기 >> VI’를 선택하면(그림 8) 빈 VI가 생성됩니다.(이 문서에 첨부되어 있는 VI를 불러오기 위해서는 오른쪽 클릭을 한 후 ‘추가’를 선택합니다)
여기에 그림 9와 같이 VI를 구성합니다.

 

그림 9

이 때 아날로그 입력 모듈의 채널 0번과 아날로그 출력 모듈의 채널 0번(이 예제에서의 설정입니다)은 결선되어 있어야 합니다. 그림 9의 분홍색으로 보이는 Elemental I/O는 LabVIEW 프로젝트에서 드랙 앤 드롭하여 사용할 수 있습니다.
FPGA VI 만들기는 FPGA가 탑재된 하드웨어에서만 필요합니다. 만약 RT 타겟으로 Compact FieldPoint, PXI, PC 등을 사용할 경우 이 과정은 필요없습니다.

HOST VI 만들기

HOST VI는 원격 RT 타겟에서 수행된 어플리케이션의 결과를 모니터링하고, 경우에 따라 파라미터를 바꾸어 명령을 주는 역할을 합니다. 따라서 RT 타겟과는 통신만을 할 뿐이며, 실제 RT 타겟의 어플리케이션 수행과는 관계가 없습니다.

그림 10

먼저 프로젝트의 ‘내 컴퓨터’에 오른쪽 클릭을 하여 ‘새로 만들기 >> VI’를 선택합니다.(그림 10). 여기서 생성된 빈 VI에 그림 11과 같은 프로그램을 구성합니다.(이 문서에 첨부된 예제 STM(HOST).vi를 불러올 수도 있습니다. 이 경우 ‘내 컴퓨터’에 오른쪽 클릭한 후 ‘추가’를 선택하여 해당 VI를 불러옵니다).


그림 11

HOST VI는 STM을 이용하여 RT 타겟과 통신을 하는 역할을 합니다. 그림 10의 프로그램을 왼쪽에서부터 차례로 살펴보겠습니다.

첫 번째로 ‘TCP 연결 열기’ VI로 TCP 통신을 시작합니다. 포트가 열리면 그 데이터를 ‘STM Read Meta.vi’로 넘겨주고, ‘STM Read Meta.vi’에서 메타 데이터를 생성하고 실제 통신을 위한 루프를 시작합니다.

 

 

그림 12

그 다음 루프 내에서는 ‘STM Read Msg.vi’가 서버(RT 타겟)에서 보내오는 메시지를 받습니다.

 

그림 13

RT VI 만들기

그림 14
_
RT 타겟에 배포할 VI를 만들기 위해서는 타겟위에 오른쪽 클릭을 하고 ‘내 컴퓨터’에 오른쪽 클릭을 하여 ‘새로 만들기 >> VI’를 선택합니다. 여기서 생성된 빈 VI에 그림 15과 같은 프로그램을 구성합니다.(이 문서에 첨부된 예제 STM(RT).vi를 불러올 수도 있습니다. 이 경우 ‘내 컴퓨터’에 오른쪽 클릭한 후 ‘추가’를 선택하여 해당 VI를 불러옵니다).

 

그림 15

그림 15의 프로그램이 실제 RT 타겟에서 수행되는 프로그램입니다. 이 프로그램은 두 개의 루프로 이루어져 있습니다. 기본적으로 윗 부분의 루프를 중심으로 이루어지는 프로그램은 CompactRIO의 입출력을 제어하는 프로그램이고(1번 부분), 아랫 부분은 STM 통신 루프입니다(2번 부분). RT VI에서는 RT 타겟인 CompactRIO의 루프와 통신 루프인 STM 루프가 서로 간섭을 일으켜 불필요한 시간 지연을 최소화하기 위하여 큐를 사용합니다. 4번 부분에서 ‘큐 얻기’를 선언한 후 CompactRIO 동작 루프로 들어갑니다. 3번 부분에서 CompactRIO의 입출력 값을 받아 5번 부분의 ‘원소를 큐에 추가’ VI에 연결합니다. 이렇게 함으로써 데이터 큐에 CompactRIO로부터 나오는 데이터를 쌓게 됩니다. 아래쪽 루프의 6번 부분에서 ‘TCP 리슨’, ‘STM Write Meta’ VI에서는 TCP 통신 듣기를 초기화한 후 STM 메타 데이터를 씁니다. 여기서 주의할 점은 Host VI에서 지정한 메타 방식과 RT VI에서 정한 메타 방식이 동일해야만 데이터 전송이 가능하다는 것입니다. 통신 루프가 시작되면 ‘원소를 큐에서 제거’ VI가 현재 데이터 큐에 쌓여있는 데이터를 불러냅니다. 이 데이터를 7번 부분에서 ‘STM Write Msg’ VI가 STM 통신을 이용하여 전송하게 됩니다.

이제 작성이 끝났습니다. Run 버튼을 눌러 실행하게 되면 그림 16과 같은 화면이 나오면서 파일 변환이 시작됩니다.

그림 16

변환이 끝나면 그림 17과 같은 화면이 나오게 됩니다. 여기서 ‘Refresh’를 선택하여 FPGA 컴파일을 시작합니다.

그림 17

컴파일이 완료되면 RT 타겟은 특별히 리셋을 하거나 하지 않는 한 계속 어플리케이션을 수행하게 됩니다.


그림 18

호스트 VI에서는 이제 STM 통신을 이용하여 더 빠르게 많은 양의 데이터를 주고 받을 수 있습니다.(그림 18)

추가 학습 자료

>> 제1편 STM의 개요와 필요성 기술자료
>> LabVIEW (한글판) 평가판 다운로드
>> LabVIEW 개발자 커뮤니티