You are here

LabVIEW에서 병렬 포트 사용

LabVIEW에서 병렬 포트 사용

 

단순한 디지털 I/O에 병렬 포트를 사용하는 것이 편리한 경우가 종종 있습니다. 이 문서에서는 VISA 및 레지스터 레벨 프로그래밍을 사용하여 이를 어떻게 수행할 수 있는지에 대해 해설합니다. 이 문서에는 또한 일반적 실수, 오류 메시지 및 문제 발생에 대해서도 다룹니다. 이 문서는 핸드쉐이킹이나 PC-PC 전송에 대해 설명하지 않으며 필요한 경우 IEEE-1284 규격과 통신에 대한 특정 내용만 다룹니다. IEEE-1284 규격에 대한 자세한 내용을 알아보려면 이 내용이 자세하게 기술된 Developer Zone 안내서: IEEE 1284 - PC 병렬 포트 업데이트를 참고하십시오.

 

목차:

  • 소개
  • 병렬 포트 구성
  • 간단한 병렬 포트 입출력
  • 입력에 데이터 라인 사용

 

소개

일반적으로 병렬 포트는 프린터 출력이나 기타 장치에 사용됩니다. 병렬 포트는 데이터를 한 번에 8비트 또는 1바이트씩 보냅니다. DB-25 커넥터에서 사용할 수 있는 다른 라인으로 상태 라인, 제어 라인 및 접지 라인의 조합이 있습니다. 상태 및 제어 라인은 프린터에 송신할 때 핸드쉐이킹, 명령 및 피드백에 사용됩니다.

지금 수행하는 목적에 맞게 병렬 포트를 사용하기 위해 이들 라인에 주목해야 합니다. Microsoft Windows 환경에서 직렬 통신에 사용되는 API를 사용하여 병렬 포트에서 제한된 기능을 얻을 수 있습니다. 즉, Windows 환경에서 표준 직렬 통신에 사용되는 VISA VI를 사용하여 병렬 포트로 데이터를 출력할 수 있다는 의미입니다. 그러나 Windows API는 출력 작동에 대한 지원을 내장하고 있지 않습니다. 일부 경우에 하드웨어가 이를 지원하기는 하지만 소프트웨어는 그렇지 못합니다. 그렇다고 LabVIEW에서 입력에 병렬 포트를 사용할 수 없다는 것은 아니며 입력에 VISA VI를 사용할 수 없다는 뜻입니다.

대부분의 컴퓨터에서 병렬 포트는 아래 그림 1에 나타낸 DB-25 커넥터를 사용합니다. 표1은 핀 기능을 나타냅니다.

 

               그림 1. DB-25 커넥터 - 컴퓨터 뒷면 방향에서 본 커넥터

 

참고: 핀 번호는 오른쪽에서 왼쪽으로 상단 행에 1~13, 하단 행에 14~25까지 있습니다.

 

                                                                                         표 1. 핀 기능표

 

병렬 포트 구성

방법

Windows API를 사용하는 경우 디지털 출력에서 병렬 포트를 사용하는 것은 상당히 간단한 문제입니다. 주된 방법은 핀11(Busy)과 핀12(Paper Error)를 접지에 연결하는 것입니다. 그렇지 않으면 하드웨어 드라이버는 송신 대상 프린터가 사용 중이거나 오류가 있다고 판단하고 어떤 데이터도 보내지 않습니다. 이 포트는 또 다른 값이 쓰여질 때까지 또는 컴퓨터의 전원이 꺼질 때까지 마지막으로 작성된 값을 유지합니다. LabVIEW에서는 모든 직렬 통신을 문자열로 보내야 한다는 것을 상기하십시오. 보통은 포트에 8비트 숫자를 보내려는 경우일 것입니다. 이를 위해 데이터의 바이너리 표현이 변하지 않도록 데이터를 문자열로 늘어뜨려야 합니다. 이 목적으로 Type Cast VI를 사용할 수 있습니다.

 

                                                    그림 2. LabVIEW 에서 Type Cast 함수의 사용

 

한 번에 1바이트 이상을 출력하는 경우 드라이버는 이를 잇달아 포트로 보내고 각 바이트에 대해 Strobe 라인(라인1)을 On/Off 전환합니다. 관련된 타이밍은 컴퓨터마다 다르지만 어느 정도 표준은 마련되어 있습니다. 타이밍 특성에 대한 자세한 내용은 Developer Zone 안내서: IEEE 1284 - PC 병렬 포트 업데이트를 참조하십시오.
병렬 포트에 쓰는 방법을 보여주는 LabVIEW 프로그램에 대해서는 Developer Zone 예제: VISA를 사용하여 LabVIEW에서 병렬 포트에 액세스를 참조하십시오.

 

흔히 일어나는 오류

  • -1073807330 (BFFF003E) - VISA "Could not perform operation because of I/O error"
    또는 LabVIEW hangs with Serial Write compatibility VI

일반적으로 이러한 문제는 라인11과 라인12가 올바로 접지되지 않았다는 것을 말해줍니다. 이들 라인을 접지 라인(18-25)의 어느 것    에나 연결할 수 있어야 합니다. 실수로 라인2 및 3을 접지하지 않았는지 확인하십시오.

  • Error 37 using Serial Compatibility VIs

직렬 장치가 Serial Compatibility VI를 사용하려면 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과 같습니다.

 

간단한 병렬 포트 입출력

방법

VISA VI에 대한 대안은 병렬 포트의 하드웨어 레지스터에 직접 데이터를 쓰는 것입니다. LabVIEW에서는 Advanced [»:] Port I/O 팔레트에 있는 In Port.vi와 Out Port.vi를 사용하여 하드웨어 레지스터에 액세스할 수 있습니다. 상위 드라이버를 사용하고 있지 않기 때문에 상태 라인의 접지에 대해 신경 쓰지 않아도 됩니다.

 

참고: Windows NT 또는 2000에서 하드웨어 레지스터에 액세스하려면 커널 수준 드라이버가 필요합니다. 자세한 내용은 KnowledgeBase 2Q1FC3K8: Windows NT/2000에서 하드웨어 레지스터에 액세스하거나 In Port 및 Out Port를 구현하려면 어떻게 합니까? 물리적 메모리를 읽고 여기에 쓰기하려면 어떻게 합니까?를 참조하십시오.

첫 번째 단계는 병렬 포트의 기본 주소를 확인하는 것입니다. 기본 주소는 일반적으로 Windows 장치 관리자, 병렬 포트의 리소스에서 찾을 수 있습니다.

 

Windows 9x의 경우:

1. 바탕 화면에서 내 컴퓨터를 마우스 오른쪽 버튼으로 클릭하고 등록 정보를 선택합니다.
2. 장치 관리자 탭을 클릭하고 플러그 앤 플레이 BIOS 아래에서 LPT1을 찾습니다.
3. LPT1을 선택한 후에 등록 정보 버튼을 클릭합니다.
4. v

 

Windows NT/2000 경우:

1. 바탕 화면에서 내 컴퓨터를 마우스 오른쪽 버튼으로 클릭하고 등록 정보를 선택합니다.
2. 하드웨어 탭을 선택하고 장치 관리자 버튼을 클릭합니다.
3. 포트(COM 및 LPT) 아래에 LPT1이 있습니다.
4. LPT1을 더블 클릭합니다.
5. 다음으로 리소스 탭을 선택하면 입출력 범위 옆에 주소가 나옵니다.

 

  그림 3. Windows 장치 관리자의 병렬 포트(LPT1) 등록 정보

 

기본 주소는 일반적으로 16진수 주소인 278, 378 또는 3BC입니다. 병렬 포트와 관련된 여러 가지 레지스터가 있지만 간단한 출력의 경우에는 Data 레지스터만 신경 쓰면 됩니다. 이 레지스터는 I/O 범위에서 첫 번째 레지스터이며 따라서 기본 주소에 위치합니다. 이 첫 레지스터의 8비트는 데이터 라인(2-9)에 직접 매핑됩니다. 그림 4에 나타낸 것처럼 Out Port.vi를 사용하여 포트에 원하는 값을 쓰기만 하면 됩니다.

 

                                                     그림 4. Out Port.vi의 사용

 

흔히 일어나는 오류

  • "Capability not supported" error form In Port.vi or Out Port.vi

Windows NT 및 2000 컴퓨터에서는 AccessHW 드라이버가 필요합니다. Developer Zone 예제: Windows용 포트 및 메모리 유틸리티를 참조하십시오. 또한 vi.lib에 있는 것이 아니라 AccessHW 드라이버와 함께 제공된 In 및 Out Port.vi를 사용해야합니다.

병렬 포트와 LabWindows/CVI에 대한 자세한 내용은 KnowledgeBase 0TL70ATL: 병렬 포트를 입출력 채널로 사용 을 참조하십시오.

 

 

입력에 데이터 라인 사용

방법

앞서 언급했듯이, VISA VI를 사용하여 병렬 포트를 통해 입력을 수행하는 것을 실용적이지 못합니다. 그러나, 입력에서 기인하는 다른 문제가 있습니다. 한 가지로, 일반적으로 8개의 데이터 라인에서는 양방향성을 보장할 수 없습니다. 이 문제는 다음 부분에서 자세히 다룹니다. 지금은 입력에 8개의 데이터 라인을 사용할 수 없다고 가정합시다. 다행스럽게도, 사용할 수 있는 다른 라인이 있습니다. 데이터 레지스터 다음 레지스터 base+1은 상태 레지스터입니다. 상태 레지스터의 비트 중 5개는 25핀 커넥터 라인(Busy, nAck, PaperEnd, Select, nError)에 매핑됩니다. 이 매핑은 그림 5에 나타낸 것처럼 각각 상태 레지스터의 비트 7,6,5,4,3에 매핑됩니다. 상태 라인은 이미 입력으로 구성되어 있습니다. 프린터와 통신하는 경우라면 이 라인은 프린터가 핸드쉐이킹과 피드백을 위해 사용하는 라인이 됩니다. Busy 라인은 역 논리를 사용하기 때문에 반전시켜야 합니다. 5개 또는 그 이하의 라인이 필요한 전부라면 간단히 In Port.vi를 사용하여 상태 레지스터에서 읽을 수 있습니다. 그러나 그 이상이 필요하다면 제어 라인을 사용하기 시작해야 합니다.

제어 레지스터는 주소 base+2에 있습니다. 상태 레지스터와 상당히 유사하게 이 레지스터에서 몇 개의 비트는 커넥터의 라인(nStrobe, nAutoLF, nlnit, nSelectln)에 매핑됩니다. 이들은 제어 레지스터의 라인 0,1,2,3에 매핑됩니다. 이들 라인은 정상적으로는 출력이지만 양방향 신호로 구성할 수 있습니다. 이를 입력으로 바꾸려면 간단히 이들 모두를 논리 High로 설정하면 됩니다. 라인이 High로 설정되고 신호에 의해 외부적으로 접지된다면 접지가 우세하여 비트는 Low가 됩니다. 이와 함께 Strobe, nAutoLF 및 nSelectln 라인이 역 논리라는 것을 알고 있어야 합니다. 역 라인을 Low로 설정하면 정확히 우리가 원하는 커넥터에서 실제로는 High로 설정됩니다. 하나의 완전한 바이트를 읽으려면 상태 레지스터의 윗부분과 제어 레지스터의 아래부분을 읽을 수 있습니다. 이를 위해서는 그림 6에 나타낸 것처럼 LabVIEW에서 약간의 바이너리 조작을 해야 하며 역 논리 비트에도 여전히 주의해야 합니다.

 

 

                                                그림 5. 레지스터 맵

 

참고: 디지털 논리의 수치 상수는 이진수로 표시됩니다.

 

                                                                    그림 6. 입력에 제어 및 상태 라인 사용

 

흔히 일어나는 오류

 

  • "Capability not supported" error form In Port.vi or Out Port.vi

Windows NT 및 2000 컴퓨터에서는 추가 AccessHW 드라이버가 필요합니다. Developer Zone 예제: Windows용 포트 및 메모리 유틸리티를 참조하십시오. 또한 vi.lib에 있는 것이 아니라 AccessHW 드라이버와 함께 제공된 In Port.vi 및 Out Port.vi를 사용해야 합니다.
일부 병렬 포트는 입력으로 데이터 라인을 사용하도록 구성할 수 있습니다. 이는 제조업체에서 병렬 포트를 설계한 방식에 크게 의존합니다. 어떤 모델에서는 데이터 라인이 외부 신호의 값을 취하도록 이를 논리 High로 조정하여 제어 라인을 읽는 것과 같이 데이터 라인을 읽을 수 있습니다. 그러나 대부분의 병렬 포트에서는 입력에 방향 비트를 설정해야 합니다. 이 비트는 제어 레지스터에서 비트 5(base +2)입니다. 포트가 이를 지원하면 방향 비트를 High로 설정하여 라인을 3중 상태로 만드는 효과를 얻게 되어 외부적으로 구동시킬 수 있습니다. 비트 6을 High나 Low로 전환해야 하는 경우도 있습니다. 그러나 일부 제조업체에서는 소프트웨어가 변경할 수 없도록 이러한 비트를 사실 고정시켜버린 다는 것을 알고 있어야 합니다. 아래 그림 7에 예를 나타내었습니다.

 


                                                           그림 7. 입력에 데이터 라인 사용

 

데이터 라인을 입력에 사용할 수 있는지 여부를 테스트하려면 다음과 같이합니다.

1. 제어 레지스터의 비트 5를 High로 설정합니다(기본 주소+2에서).
2. 포트에 아무 것도 연결하지 않고 3, 4개의 값을 데이터 포트에 쓰고 난 다음 각각을 다시 읽습니다.

판독값이 쓰기와 일치하지 않으면 포트가 양방향성일 가능성이 큽니다. C5 설정이 데이터 출력을 비활성화시켰고 데이터 포트 버퍼의 공개된 입력을 읽은 것입니다.
판독값이 쓰기와 일치하면 포트가 양방향성이 아닙니다. 데이터 출력은 아직 활성화되어 있고 쓴 것을 다시 읽은 것이며 외부 신호는 읽을 수 없습니다.
입력에 데이터 라인을 사용할 수 있다면 제어 레지스터 비트 5를 High로 설정하고 기본 주소에서 데이터 라인의 값을 읽기만 하면 됩니다.

 

흔히 일어나는 오류

 

  • "Capability not supported" error form In Port.vi or Out Port.vi

Windows NT 및 2000 컴퓨터에서는 추가 AccessHW 드라이버가 필요합니다. Developer Zone 예제: Windows용 포트 및 메모리 유틸리티를 참조하십시오. 또한 vi.lib에 있는 것이 아니라 AccessHW 드라이버와 함께 제공된 In Port.vi 및 Out Port.vi를 사용해야 합니다.