병렬 포트를 LabVIEW에서는 어떻게 사용할 수 있나요?



주요한 소프트웨어:
주요한 소프트웨어 버전: 8.6.1
문제가 해결된 소프트웨어 버전: N/A
부차적인 소프트웨어: N/A

문제점:

 LabVIEW를 통해서 사용자의 컴퓨터에 포함되어있는 병렬 포트를 통해서 디지털 입,출력을 하고 싶습니다. LabVIEW에서 어떻게 사용해야하며, 사용자가 고려해야 할 측면은 어떤것들이 있나요?



솔루션:

 때때로 간단한 디지털 입출력을 할 때, 병렬포트를 사용하는 것이 편리합니다. 이 문서는 VISA 함수를 기반으로 하여, 레지스터 레벨의 프로그래밍을 어떻게 하는지에 대해서 알려 줍니다. 이 문서는 또한 일반적인 오류, 에러 메시지, 그리고 프로그램 충돌 등에 대해서도 알려줍니다. 이 문서는 핸드쉐이킹 또는 PC와 PC간의 전송에 대해서 논의하지 않습니다. 그리고 단지, 필요한 IEEE-1284 사양과 통신에 대한 내용을 다룹니다. IEEE-1284 사양에 대한 자세한 사항을 원하신다면 White Paper: IEEE 1284 - Updating the PC Parallel Port 문서를 참고하여야 합니다.

개요

일반적으로 병렬 포트는 프린터 포트 또는 다른 장비들의 출력으로 사용됩니다. 이것은 병렬로 데이터를 전송하며 한번에 8-bit 또는 1 byte를 전송합니다. DB-25 커넥터에서 사용할 수있는 다른 라인은 상태라인, 제어라인 및 접지 라인이 있습니다. 상태라인과 제어라인은 프린터와 통신을 할 때, 핸드쉐이킹, 명령어 전달, 그리고 피드백을 받을 때 사용됩니다. 원하는 목적에 맞게 병렬 포트를 사용하기 위해서는 이러한 라인에 대한 이해가 필요합니다.

 마이크로소프트 윈도우 환경에서는, 시리얼 통신에 사용되는 동일한 API를 사용하는 병렬 포트를 통해서 기능을 제한할 수 있습니다. 이것은 윈도우 환경에서는 일반적인 시리얼 통신에서 사용되는 VISA VI들을 사용해서 병렬포트에 데이터를 출력할 수 있다는 것을 의미합니다. 하지만, 윈도우 API는 입력에 대한 것을 지원하지 않습니다. 일부의 경우 하드웨어가 지원된다 하더라도, 소프트웨어가 지원하지 않습니다. 이것은 LabVIEW에서 병렬포트를 통해서 입력 동작을 하는것이 불가능 한것을 의미하는 것은 아닙니다. 다만, 입력을 위한 VISA VI 들을 사용할 수 없다는 것을 의미합니다.

 대부분의 컴퓨터에서 사용되는 DB-25 커넥터는 아래 그림 1에 나타낸 것과 같습니다. 표 1은 각 Pin의 기능을 나타낸 것입니다.

그림 1

Note : Pin 번호 1~13은 윗줄을 나타내고, 14~25 까지의 Pin 번호는 아래줄을 나나태며, 오른쪽에서부터 왼쪽으로 진행됩니다.

표 1. 핀 기능 다이어그램

방법 1

 병렬포트를 사용해서 디지털 출력을 할 때, 윈도우 API를 사용하면 실제로 매우 간단합니다. 주요 방법은 11번 Pin과 12번 Pin을 접지에 연결하는 것입니다. 그밖에, 하드웨어 드라이버는 프린터가 구동중이거나 에러가 발생하면 어떠한 데이터도 출력하지 않는다고 여깁니다. 포트는 다른 값이 기록 되거나 컴퓨터의 전원이 꺼질때 까지 값을 유지합니다. LabVIEW에서 모든 시리얼 통신은 문자열 전송이 필요하다는 것을 알고있어야 합니다. 일반적으로 포트에 8-bit의 데이터를 보냅니다. 데이터의 이진 표현이 변경되지 않도록 문자열 데이터의 평준화가 필요합니다. 그렇기 때문에 타입캐스트 VI를 사용하며, 그림 2에 나타내었습니다.

그림 2. LabVIEW에서 Type Cast 기능 사용

 만약 한번에 1 byte 이상의 데이터를 출력하는 경우, 드라이버는 포트에 순서대로 또는 스트로브 라인을 토글하여 각각의 바이트를 전송합니다. 하나의 컴퓨터에서도 각 타이밍을 다르지만, 몇가지의 기준을 가지고 있습니다. 타이밍에 대한 좀 더 자세한 내용을 얻기 위해서는 White Paper: IEEE 1284 - Updating the PC Parallel Port.문서를 참고하십시오.

문서를 참고하면, LabVIEW에서 어떻게 병렬 포트를 사용하는지에 대해서 알수 있습니다.

 일반 에러:

   - VISA error code -1073807330 (BFFF003E); I/O 에러로 인해서 동작을 할 수 없습니다. 다음 KnowledgeBase 3O7F94LZ: Error BFFF003E Occurs after a VISA Read/Write. 을 참고하십시오.

   - Serial Compatibility VI의 에러 37로 다음  KnowledgeBase 21O7DELI: Error -37 When Using the Serial Compatibility VIs 을 참고하십시오.


Note: 기본적인 시리얼 드라이버는 오직 시리얼 포트만을 지원하기 때문에 LabVIEW Real-Time은 VISA VI들을 병렬포트에 액세스 하는데 사용할 수 없습니다. 따라서 병렬포트는 RT OS 드라이버에서 볼 수 없습니다. 그리고 VISA 레이어는 포트에 액세스하지 못합니다.

방법 2

 VISA VI 들의 대안으로 병렬포트의 하드웨어 레지스터에 직접 데이터를 쓰는 방법이 있습니다. LabVIEW에서 In Port.vi와 Out Port.vi를 사용해서 하드웨어 레지스터에 액세스 할 수 있습니다. 하이 레벨의 드라이버를 사용하지 않기 때문에 상태라인의 접지를 고려하지 않아도 됩니다.

Note : Windows NT 또는 2000에서 하드웨어 레지스터에 액세스하려면 커널 레벨의 드라이버가 필요합니다.KnowledgeBase 2Q1FC3K8: Accessing Hardware Registers and Physical Memory in Windows NT/2000/XP with LabVIEW 를 참고하면 더 많은 정보를 얻을 수 있습니다.

 첫번째 단계는 병렬포트의 베이스 주소를 식별하는 것입니다. 베이스 주소는 일반적으로 윈도우 장치관리자에서 병렬포트 리소스에서 찾을 수 있습니다.

 

 윈도우 xp 또는 이후 버전, 또는 64bit 운영체제 :

  Port I/O VI는 윈도우 64bit 운영체제를 지원하지 않습니다. 사용하게되면 항상 에러 -4850이 발생할 것입니다. 만약 64bit 운영체제를 사용한다면 "방법 1" 을 사용하는 것을 추천합니다. KnowledgeBase 5Q5FN3QW: Why Do I Get Error -4850 From the Port In or Port Out VIs in LabVIEW? 를 참고하면 에러에 대한 더 자세한 내용을 알 수 있습니다. 그리고 위의 링크에는 윈도우 32bit 운영체제를 사용할 때의 고려할 점에 대해서도 나와있습니다.

 윈도우 Vista 운영체제 :

   KnowledgeBase 416C2PZH: Using the LabVIEW In Port and Out Port VIs with Windows Vista 링크를 참고하면, 윈도우 Vista 32bit 와 64bit 운영체제에서 LabVIEW In Port 와 Out Port VI 들을 사용할 때 일어날 수 있는 사항에 대한 정보를 알 수 있습니다.

 Real-Time 타겟 :

 Real-Time 운영체제를 사용할 때, 병렬 포트와의 인터페이스 방법에 대한 자세한 내용은  KnowledgeBase 261AI14U: Does LabVIEW Real-Time (RT) Support In Port.vi and Out Port.vi for Register-Level Programming? 를 참고하십시오.

 윈도우 9x 운영체제 :

  1. 사용자의 데스크탑에서 컴퓨터에서 마우스 우클릭 후, 속성을 클릭합니다.
  2. 장치관리자를 선택하고 LPT1 탭 아래의 플러그 앤 플레이 바이어스를 찾습니다.
  3. LPT1을 클릭한 후, 속성 버튼을 클릭합니다.
  4. 리소스 탭으로 이동하면 Input/Output 범위를 볼 수 있습니다.

 윈도우 NT/2000 운영체제 :

  1. 사용자의 데스크탑에서 컴퓨터에서 마우스 우클릭 후, 속성을 클릭합니다.
  2. 하드웨어 탭을 선택한 후, 장치관리자를 선택합니다.
  3. 포트(COM & LPT) 아래의 LPT1을 찾습니다.
  4. LPT1을 더블클릭합니다.
  5. 리소스 탭으로 이동하면 Input/Output 범위를 볼 수 있습니다.

그림 3. 윈도우 장치관리자에 있는 병렬포트(LPT1) 프로퍼티

 베이스 주소는 일반적으로 헥사값으로 표현한 278, 378, 또는 3BC 입니다. 병렬포트와 연관된 여러 레지스터가 있지만, 간단한 출력을 위해서 데이터 레지스터를 고려해야 할 필요가 있습니다. 이것은 I/O 범위 내에서 첫번째 레지스터이고, 베이스 주소에 위치합니다. 8bit는 첫번째 레지스터에 데이터 라인(2~9)으로 연결됩니다. 그림 4에서 나타낸 것처럼 포트에 원하는 값을 작성하는 Out Port.vi 를 사용할 필요가 있습니다.

그림 4. Out Port.vi

일반 에러 :

  - In Port.vi 또는 Out Port.vi 에서 "Capability not supported" 에러 발생   
    윈도우 NT와 2000 운영체제에서는 추가적으로 AccessHW 드라이버가 요구됩니다. Example Program: Port and Memory Utilities for Windows 를 참고하십시오. 또한, vi.lib에서가 아닌 AccessHW 드라이버와 함께 제공되는 In Port.vi 와 Out Port.vi를 사용할 수 있습니다.

 병렬포트 및 LabWindows/CVI에 대한 자세한 내용은 KnowledgeBase 0TL70ATL: Using the Parallel Port as an Input/Output Channel 를 참고하십시오.

 

방법 3

 앞서 언급한 바와 같이, VISA VI 들을 사용해서 병렬 포트를 통해 입력을 수행하는 동작을 하는 것은 불가능 합니다. 그러나 입력에 대해서 발생하는 다른 문제가 있습니다. 우선 그것은 일반적으로 8개의 데이터 라인이 양방향으로 통신이 된다는 것을 보장할 수 없습니다. 이것에 대한 문제는 다음에서 자세하게 설명할 것입니다. 입력에 대해서 8개의 데이터 라인을 사용할 수 없다고 가정합니다. 다행히도 사용할 수 있는 다른 라인이 존재합니다. 데이터 레지스터 다음의 레지스터인 베이스+1, 즉 상태 레지스터 입니다. 25핀 커넥터 안에서 상태 레지스터를 5 bit(Busy, nAck, PaperEnd, Select, nError)가 라인에 맵핑 되어있습니다. 그림 5에 나타낸 것처럼 각각의 상태 레지스터는 7,6,5,4,3 에 맵핑됩니다. 상태라인은 입력을 위해서 구성되어 있습니다. 사용자가 프린터와 통신을 하면, 프린터의 라인들은 핸드쉐이킹과 피드백에 사용됩니다. Busy 라인은 역의 로직으로 되어있기 때문에, 역의 값이어야만 합니다. 다섯개 또는 좀 더 많은 수의 라인을 가지고 있으면, 상태 레지스터 안에서 In Port.vi를 간단하게 사용할 수 있습니다. 더 많은 내용이 있지만, 제어 라인에 대해서 살펴보겠습니다.


 컨트롤 레지스터는 주소 베이스+2에 있습니다. 상태 레지스터와 마찬가지로, 커넥어 라인에 여러개의 비트 레지스터가 연결되어 있습니다(nStrobe, nAutoLF, nInit, nSelectIn). 컨트롤 레지스터는 0,1,2,3 라인입니다. 이 라인들은 일반적으로 출력이지만, 양방향 신호를 위해서 구성되어진 것들입니다. 간단히 말해서 입력이 들어가면 그들의 로직은 하이(참) 이 됩니다. 라인이 하이로 설정되면, 신호에 의해서 외부적으로는 그라운드가 됩니다. 그리하여 비트는 로우 값을 읽어들입니다. 우리는 nAutoLF, 그리고 nSelectln 라인은 역의 로직인것을 알고 있어야 합니다. 만약 역의 라인을 로우로 설정하려면, 실제로 커넥터에서는 하이로 설정해야 원하는 정확한 값으로 입력할 수 있습니다. 사용자가 하나의 전체 바이트를 일고 싶다면, 상태 레지스터의 상위 니블과 제어 레지스터의 하위 니블로 부터 읽을 수 있습니다. 그림 6에서 나타낸것처럼 LabVIEW에서는 일부 이진 변형이 필요합니다. 그리고 항상 역 논리인 비트에 대해서 주의해야 합니다.

 

그림 5. 레지스터 연결

Note : 디지털 논리 상수값은 이진수로 표시됩니다.

그림 6. 입력으로 사용하는 컨트롤과 상태 라인 사용

일반 에러 :

 - In Port.vi 또는 Out Port.vi 에서 "Capability not supported" 에러 발생
  
   윈도우 NT와 2000 운영체제에서는 추가적으로 AccessHW 드라이버가 요구됩니다. Example Program: Port and Memory Utilities for Windows를 참고하십시오. 또한, vi.lib에서가 아닌 AccessHW 드라이버와 함께 제공되는 In Port.vi 와 Out Port.vi를 사용할 수 있습니다.


 입력으로 사용되는 데이터 라인

 일부 병렬 포트들은 데이터 라인을 입력으로 사용할 수 있도록 구성되어 졌습니다. 그것은 제조사가 병렬 포트를 설계하는 방법에 좌우됩니다. 일부 모델의 데이터라인은 논리를 하이로 구동하고 외부 신호의 값을 취하도록 하여, 컨트롤 라인을 읽는 것과 동일한 방식으로 판독할 수 있습니다. 하지만, 대부분의 병렬 포트들은 입력 방향에 대한 비트를 설정해야 합니다. 그 부분은 컨트롤 레지스터의 비트 5입니다. 만약 방향을 설정하는 비트를 하이로 설정할 수 있다면 라인을 Tri-state 로 만드는 효과가 있으며, 그에 따라서 외부에서 구동할 수 있습니다. 하지만, 해당 일부 제조사는 소프트웨어가 변경할 수 없도록 잠금을 해 놓았습니다. 예를들어 변경하는 사항에 대해서 그림 7에 나타내었습니다.

그림 7. 입력으로 사용하는 데이터 라인

 사용자의 데이터 라인을 입력으로 사용할 수 있는지 없는지 테스트를 하는 과정입니다.

   1. 컨트롤 레지스터 비트 5를 하이로 설정합니다.
   2. 아무것도 연결되지 않은 포트에서 몇가지의 데이터를 쓴 후, 다시 읽어 보는 것입니다.

 만약 일치하지 않다면, 사용자의 포트는 양방향 일것입니다. C5 비활성화 설정으로 데이터 출력 및 데이터 포트의 버퍼 입력을 읽습니다.

 만약 일치한다면, 사용자의 포트는 양방향이 아닙니다. 데이터 출력은 여전히 가능하며, 사용자가 쓴 데이터를 다시 읽습니다. 외부의 신호를 읽을 수 없음을 의미합니다.

 데이터 라인을 입력으로 사용하는 것이 가능하다면, 제어 레지스터 비트 5를 하이로 설정하고, 베이스 주소의 데이터 라인의 값을 읽을수 있습니다.

일반 에러 :

 - In Port.vi 또는 Out Port.vi 에서 "Capability not supported" 에러 발생
  
   윈도우 NT와 2000 운영체제에서는 추가적으로 AccessHW 드라이버가 요구됩니다. Example Program: Port and Memory Utilities for Windows 를 참고하십시오. 또한, vi.lib에서가 아닌 ccessHW 드라이버와 함께 제공되는 In Port.vi 와 Out Port.vi를 사용할 수 있습니다.  

 - LabVIEW에서 Serial Write compatibility VI를 사용하는 것은  KnowledgeBase 0PFEJ3A1: Serial Port VIs Do Not Work Properly and Hang the System 문서를 참고하십시오

 - 일반적으로 라인 11과 12가 접지가 잘 되지 않았음을 의미합니다. 접지라인 18~25 중 하나의 라인에서 점퍼하여 연결할 수 있습니다. 그리고 실수로 라인 2와 3이 접지되지 않았는지 확인해야 합니다.

 - Serial Compatibility VI 들을 사용하서 Serial 장치를 제대로 사용하기 위해서 LabVIEW.ini 파일에 장치가 나열 되어있는지 확인할 필요가 있습니다. 그것이 VISA를 사용하는 것보다 용이합니다. 필요한 라인이 기본적으로 INI 파일에 존재하지 않기 때문에 라인을 표시해 주어야 합니다:

  serialDevices="COM1; COM2; COM3; COM4; COM5; COM6; COM7; COM8; COM9; COM10; LPT1;   LPT2;LPT3; LPT4;"

 LabVIEW는 목록의 순서에 따라서 0부터 포트 번호를 할당합니다. 그래서 COM1은 포트 0과 동일하고 LPT1은 포트 10.1.DB-25 커넥터와 동일합니다 - 커넥터는 컴퓨터의 뒤쪽에 위치합니다.

 

 



관련 링크:
KnowledgeBase 5Q5FN3QW: Why Do I Get Error -4850 From the Port In or Port Out VIs in LabVIEW?
White Paper: IEEE 1284 - Updating the PC Parallel Port
NI LabVIEW: The Software that Powers Virtual Instrumentation
Example Program: Using VISA to Access the Parallel Port in LabVIEW
KnowledgeBase 2Q1FC3K8: Accessing Hardware Registers and Physical Memory in Windows NT/2000/XP with LabVIEW
KnowledgeBase 0TL70ATL: Using the Parallel Port as an Input/Output Channel
Example Program: Port and Memory Utilities for Windows
KnowledgeBase 21O7DELI: Error -37 When Using the Serial Compatibility VIs
KnowledgeBase 3O7F94LZ: Error BFFF003E Occurs after a VISA Read/Write
KnowledgeBase 0PFEJ3A1: Serial Port VIs Do Not Work Properly and Hang the System
KnowledgeBase 416C2PZH: Using the LabVIEW In Port and Out Port VIs with Windows Vista
KnowledgeBase 261AI14U: Does LabVIEW Real-Time (RT) Support In Port.vi and Out Port.vi for Register-Level Programming?


첨부:


0.B44.gif - 0.B44.gif0.A1A.gif - 0.A1A.gif0.5484.gif - 0.5484.gif
0.646E.gif - 0.646E.gif
0.586.gif - 0.586.gif0.452.gif - 0.452.gif0.3760.gif - 0.3760.gif
0.6BA.gif - 0.6BA.gif


리포트 날짜: 10/12/2006
마지막 업데이트: 04/27/2015
문서 번호: 42BIT2C5