티스토리 뷰


다양한 하드웨어와 소프트웨어 컴포넌트를 서로 연결하여 데이터를 송수신하는 방법은 쉽지 않습니다. 어플리케이션에 데이터를 전달하거나 가져오는 예를 생각해보도록 하겠습니다. 첫 번째로, 개발자는 장비 제어와 데이터 수집에 대한 높은 퍼포먼스를 가진 라이브러리와 같은 툴을 이용하여 원시 데이터를 수집해야 합니다. 두 번째로 다른 기술을 사용하는 응용 프로그램들 사이에서 통신을 해야 합니다. 어떠한 어플리케이션은 파일을 저장할 수도 있습니다. 다른 어플리케이션은 TCP/IP 네트워크 솔루션, DDE, ActiveX와 같은 기술을 사용할 수도 있습니다. 각 IO 메커니즘은 고유의 차이와 구현을 위한 전문 지식을 요구합니다. 이러한 복잡성은 개발자에게 다른 프로토콜 기반에서 데이터를 전송하기 위한 방법론을 강제하고, 많은 개발 시간과 리소스를 요구하게 됩니다. 


이 글에서는 위와 같은 문제를 쉽게 해결하기 위해서 NI에서 제공하는 네트워크 변수에 대해서 알아보도록 하겠습니다. 네트워크 변수는기존 어플리케이션의 퍼포먼스에 영향을 미치지 않고 Real-Time 시스템 사이의 데이터 교환을 위해 네트워크 변수의 API를 이용할 수 있습니다. 이 API는 TCP/IP, DDE와 같은 하위 레벨의 통신 프로토콜을 추상하기 위한 방법으로 디자인 되었습니다. 또한 다양한 스칼라, 다차원 배열, 구조체등을 지원하기 위하여 타양한 데이터 타입을 지원할 수 있게 유연하게 설계되었습니다. 


1. 측정 기반의 프로토콜


 TCP/IP를 사용하면 개발자는 측정데이터를 데이터 전송 어플리케이션에서 byte 기반의 스트림으로 변환은 물론 수신 어플리케이션에서 이 바이트 기반의 데이터를 원래의 형태로 변형 관련 코드를 구현해야 합니다. 네트워크 변수의 읽기, 쓰기 기능은 측정 데이터에 대한 바이트 스트림에 대한 변환이 필요 없습니다. 


이로 인해 데이터를 복잡하게 파싱해야 하는 문제점을 없앨 수 있습니다. 네트워크 변수들은 자체적으로 설명이 가능한 포맷으로 데이터를 전송합니다. 이는 문자열, 스칼라, 불리언 값들, 웨이브 폼을 포함하는 다양한 배열 형태로 표현이 가능합니다. 예를 들어 온도 측정을 처리할 때 수집된 값뿐만 아니라 수집 시점의 타임스탬프까지 포함이 가능합니다. 네트워크 변수는 네트워크 사이의 송수신을 위해 NI Publish-Subscribe Protocol(NI-PSP)를 사용합니다. 


2. 네트워크 변수란 무엇인가?


네트워크 변수라는 용어는 네트워크 상에 존재하는 변수를 의미하고, 이는 어플리케이션, 원격 컴퓨터, 하드웨어 사이에 통신이 가능합니다.



네트워크 변수는 자신의 경로이름(Pathname)을 기반으로 참조되어 있습니다. 경로이름은 \\machine\myprocess\item와 같은 네트워크 파일의 공유 이름과 비슷한 개념입니다. 이 예제에서는 machine은 변수를 호스팅하는 컴퓨터 이름, IP 주소, 혹은 서버시스템의 정규화된 도메인 이름을 나타냅니다. myprocess는 네트워크 변수 폴더나 변수를 포함하고, 이를 네트워크 프로세스 변수라 말합니다. item은 네트워크 변수의 이름을 나타냅니다. 아래의 목록은 네트워크 변수 참조의 추가적인 예를 보여줍니다. 


  • \\localhost\my_process\my_variable
  • \\test_machine\my_process\my_folder\my_variable
  • \\192.168.1.100\my_process\my_variable


네트워크 변수 기술은 네트워크 변수 API, 공유 변수 엔진, NI 변수 관리자 또는 NI 배포된 시스템 관리자로 구성되어 있습니다. 


네트워크 변수 라이브러리


LabWindows/CVI 네트워크 변수 라이브러리는 아래의 기능을 제공합니다. 


  • 네트워크 변수의 연결을 생성합니다. 아래의 타입에 대한 연결을 생성할 수 있습니다. 

    1. Subscriber – 네트워크 변수에 배포된 새로운 데이터를 받습니다. 
    2. Buffered Subscriber – 버퍼 데이터를 받고, 버퍼가 비었는지, 덮어쓰기 상태인지, 문제가 있는지 여부를 확인합니다.
    3. Writer – 네트워크 변수에 새로운 값을 업데이트 합니다.
    4. Buffered Writer – 비동기적으로 배포된 데이터를 업데이트 합니다.
    5. Reader – 네트워크 변수에 저장된 새로운 데이터를 읽습니다.
    6. Asynchronous Reader – 개별적 쓰레드 내에서 네트워크 변수의 새 값을 읽어옵니다.
    7. Network Variable Library Data 함수를 통해서 네트워크 변수를 처리합니다.
    8. NetworkVariablePopup 함수를 이용하여 Toolbox.fp 장비 드라이버에서 사용할 수 있는 유효한 네트워크 변수를 자동적으로 찾습니다.

  • Network Variable Library Browser 함수를 이용하여 네트워크 변수를 찾기 위한 사용자 정의 인터페이스를 생성합니다.
  • Network Variable Library Configuration 함수를 이용하여 네트워크 변수와 네트워크 변수 프로세스를 생성하고 설정합니다.


공유 변수 엔진


공유 변수 엔진은 실시간 측정 데이터 전송을 위해 네트워크 변수를 활성화 시켜주는 소프트웨어 프레임워크입니다. 공유 변수 엔진은 윈도우 PC나 Real-time 타깃에서 실행이 됩니다. 윈도우에서는 LabWindows/CVI를 통해 서비스와 같이 SVE를 설정하고, 시스템 시작 시점에 SVE를 실행 실행 시킬 수 있습니다. Real-Time 장비에서 SVE는 시스템 부팅 시 읽기 위한 설치 가능한 시작 컴포넌트입니다. 

네트워크 변수를 사용하기 위해서 SVE의 실행 개체는 반드시 적어도 분산 시스템의 하나의 노드에서는 실행이 되어야 합니다. 네트워크의 어떠한 노드에서도 SVE에 배포된 네트워크 변수를 읽거나 쓸 수 있습니다. 만약 어플리케이션 요구사항에 따라 네트워크 변수를 다른 장비에 배포해야 한다면 SVE에 대한 다중 실행 개체를 동시에 여러 시스템에서 만들 수도 있습니다. 




시스템 관리자와 변수 관리자의 차이점


사용자는 동일한 작업에 대한 부분을 시스템 관리자와 변수 관리자를 통해서 처리할 수 있습니다. 그러나 특정 작업을 완료하는데 사용하는 메뉴 항목과 팝업 메뉴는 다릅니다. 예를 들어 변수 관리자에서 확인할 수 있는 알람에 대한 열을 사용자에 맞게 변경하기 위해서는 변수 관리자에서는 Eidt>>Preference를 사용해야 하지만 시스템 관리자에서는 Alarms and Event 뷰에서 Column 버튼을 눌러야 합니다. 시스템 관리자는 View라고 불리는 윈도우를 제공합니다. 사용자는 이 윈도우를 통해서 표시하고 싶은 항목과 VIEW에 포함되어야 할 항목을 변경할 수 있습니다. 작업에 대한 상세 내역을 확인하기 위해서는 NI 배포된 시스템 관리자 도움말 혹은 변수 관리자의 도움말을 확인해 주시기 바랍니다. 이를 확인 위해서는 각각 시스템 관리자와 변수 관리자를 통해서 접근이 가능합니다. 


시스템 관리자를 실행하기 위해서는 시작>>모든 프로그램>>National Instruments>>배포된 시스템 관리자를 실행할 수 있습니다. 시작>>모든 프로그램>>National Instruments >>변수 매니저>>변수 매니저를 통해서 변수 관리자 접근이 가능합니다. 


변수 생성하기


네트워크 변수를 명시적 혹은 암시적으로 선언이 가능합니다. 시스템 매니저 혹은 변수 매니저를 이용하여 암시적 네트워크 변수 생성 및 설정이 가능합니다. 사용자는 프로세스와 변수에 대한 생성, 삭제, 시작, 정지에 대한 처리가 가능합니다. 변수는 특정 데이터 타입 혹은 배리언트 타입으로 생성이 가능하며, 다중 접속 혹은 단일 접속에 대한 설정과 서버 버퍼링에 대한 설정이 가능합니다. 


 

시스템 프로세스에서 명시적으로 네트워크 변수를 생성할 수 있습니다. 만약 프로세스 이름이 system이고 미리 정의한 변수이름이 없다고 한다면 새로운 네트워크 변수는 사용자가 접속을 하게 되면 자동적으로 생성이 됩니다. 예를 들어 \\localhost\system\test 는 사용자의 로컬 PC의 시스템 프로세스 내에서 test를 호출하여 명시적으로 만들어진 변수입니다. 만약 변수가 이미 존재한다면, 기존의 변수에 접근을 하며 새로운 변수를 생성하지 않습니다. 


3. Real-Time 어플리케이션 사이의 통신


공유 변수 엔진은 NI LabVIEW, LabWindows/CVI 그리고 Measurement Studio를 통해서 접근할 수 있습니다. LabWindows/CVI 혹은 Visual Studio를 위한 Measurement Studio의 네트워크 변수와LabVIEW의 공유 변수를 사용하면, 다양한 언어로 만들어진 다수의 어플리케이션사이의 데이터 전송을 손쉽게 구현할 수 있습니다. 


이 글에서는 NI가 지원하는 네트워크 변수에 대해서 알아보았습니다.


이 글이 도움이 되셨나요? 그렇다면 아래의 그림을 클릭해주세요.



댓글