프로그래밍/랩뷰 기술자료

랩뷰를 이용하여 시리얼 통신하기

에이티에스 2023. 6. 1. 17:06
728x90

시리얼 통신은 RS-232, RS-485, RS-422등 다양한 종류가 있습니다.

LabVIEW에서 제공하는 시리얼 통신을 하기 위한 VISA 함수를 이용하여 시리얼 통신 프로그램을 함께 구현해보겠습니다.

 

 VISA (Virtual Instrument Software Architecture)는 계측 시스템의 설정, 프로그래밍 및 문제 해결하기 위한 표준입니다. NI-VISA는 National Instruments에서 개발한 것으로, GPIB, VXI, PXI, 시리얼 (RS232/RS485), 이더넷/LXI, USB 및/또는 IEEE 1394 계측기와의 통신을 단일화하고 인스트루먼트 컨트롤 프로그램을 간소화시켜줍니다.

따라서 LabVIEW로 시리얼 통신을 하려면 반드시 NI-VISA 드라이버를 설치해야 합니다.

 
아래와 같이 NI 홈페이지에서 SUPPORT를 클릭하면 NI-VISA를 다운받아 보실 수 있습니다.
 
 
NI-VISA 드라이버가 설치되었으면, VISA 함수를 이용하여 시리얼 통신하는 방법에 대해서 살펴보겠습니다. 아래 그림에서와 같이 Help>>Find Examples를 클릭하면 NI Example Finder 창이 활성화 됩니다.
여기에서 Search Tab으로 이동해서 키워드로 "VISA"를 검색하면 시리얼 통신 관련 예제 코드들을 확인할 수 있습니다.
 

 

블록 다이어그램에서 VISA 함수를 불러오는 방법은 함수 팔레트>>Instrument I/O>>VISA에서 아래와 같은 함수들이 제공됩니다.

 

 

위의 함수들을 아래 그림에서와 같은 방식으로 호출해서 구현하면 됩니다.

 

VISA 함수들을 이용하여 각각의 항목들에 대해서 어떻게 구현하는지에 대해서 살펴보겠습니다.
"설정"과 관련하여 Serial_Config.vi라는 이름으로 아래와 같이 구현할 수 있습니다.
 
 
위에서 보는 바와 같이 "VISA Configure Serial Port" 함수를 이용하여 시리얼 통신과 관련한 설정 값들을 설정해 줄 수 있습니다.
 

 

다음으로 "읽기"와 관련하여 Serial_Read.vi라는 이름으로 아래와 같이 구현할 수 있습니다.

 

 

위에서 보는 바와 같이 "VISA Read" 함수를 이용하여 전송된 데이터가 0바이트 이상이면, 읽어올 수 있도록 해줍니다.

 

 

다음으로 "쓰기"와 관련하여 Serial_Write.vi라는 이름으로 아래와 같이 구현할 수 있습니다.

 

 

위에서 보는 바와 같이 "VISA Write" 함수를 이용하여 데이터를 전송할 수 있습니다.

 

 

다음으로 "닫기/에러핸들"와 관련하여 Serial_Close.vi라는 이름으로 아래와 같이 구현할 수 있습니다.

 

 

위에서 보는 바와 같이 "VISA Close" 함수를 이용하여 시리얼 통신을 종료할 수 있습니다.

 

 

지금까지 VISA 함수를 이용하여 시리얼 통신을 하기 위한 Sub VI들을 아래와 같이 구현하였습니다.
 
설정 : Serial_Config.vi
읽기 : Serial_Read.vi
쓰기 : Serial_Write.vi
닫기 : Serial_Close.vi
 

이렇게 구현한 시리얼 통신을 위한 Sub VI들을 사용하여 Main.vi에 코드를 구현할 때 FGV(Functional Global Variable)를 이용하여 코드 모듈화를 할 수 있습니다. 모듈화 작업을 통하여 얻을 수 있는 장점 중 하나는 Main.vi에서 시리얼 통신과 관련하여 시프트 레지스터를 사용하지 않아도 됩니다. Main.vi를 살펴보기 앞서, 시리얼 통신을 위한 코드 모듈화 작업 내용에 대해서 살펴보겠습니다. Serial.vi를 FGV 기법으로 아래와 같이 구성하였습니다.

 

 

 

 

 

 

위에서 보는 바와 같이 State(Config/Read/Write/Close) 별로 앞서 구현한 시리얼 통신용 Sub VI를 이용하여 프로그래밍하였습니다.

참고로 시리얼 통신을 위한 Target이 없는 경우 시뮬레이션을 수행할 수 있도록 "Simulation?" 입력을 추가하여 관련 값이 True인 경우에는 단순히 FGV 루틴이 정상 동작하는지만 확인할 수 있도록 하였습니다.
FGV를 통한 코드 모듈화를 하게 되면, 코드의 복잡도를 많이 줄일 수 있습니다.

위와 유사하게 Main.vi에서는 "START" Command에 대해서 아래와 같은 상태머신 구조를 이용하여 프로그램을 구성하는데, 이 경우 상태 천이를 위한 VI(State.vi)를 FGV로 구현할 수 있습니다.

 
상태 천이를 위한 State.vi는 아래와 같습니다.

 

 

 

 

 

 

 

 

위에서 언급한 상태 천이를 위한 VI(State.vi)를 Main.vi에서 아래와 같이 사용할 수 있습니다.

 

 

 

 

 

 

 

위에서 보는 바와 같이 FGV를 이용한 코드 모듈화를 통하여 별도의 시프트레지스터를 사용하지 않고 프로그래밍 할 수 있습니다.

마지막으로 시리얼 통신 수행 시간을 측정할 수 있도록 시작과 종료시간을 체크하여 수행시간을 확인할 수 있는 Sub VI(Timer.vi)도 아래와 같이 FGV로 구현할 수 있습니다.

 관련 코드들을 이용하여 시리얼 통신을 위한 Project 파일을 아래와 같이 구성하여 운영하도록 구현하였습니다.

 

 

 

[myLV.net 집필진 강좌] 시리얼 통신하기 - NI Community

728x90
반응형
그리드형