데이터수집 (Labview VISA)
시리얼통신개요 시리얼통신은일반컴퓨터와주변계측장비의비동기식통신수단으로지금까지도많이쓰이는인터페이스중에하나입니다. 이러한이유로대부분의데스크탑컴퓨터에는 RS-232C (Recommended Standard 232 Revision C) 형을시리얼포트를내장하고있어 1:1 통신을수행하며, 1: 多통신인유사한통신방법인 RS-485 통신을사용합니다.
Fig.1. Serial data transfer of ASCII code A.
Baud Rate Fig.1 은 ASCII 코드 A 값을시리얼통신으로전송할때의데이터형태입니다. 시리얼통신은두종류의전압값을통해데이터가구분됩니다. Space 는논리 0 을나타내며 +3V ~ +15V 의전위를갖습니다. Mark 는논리 1 을나타내며 -3V ~ -15V 의전위를갖습니다. 이러한비동기식데이터전송에서가장중요한요소는통신장치간의타이밍입니다. 시리얼통신에서는장치간의통신속도를 Baud Rate (=BPS) 라부르며, 쌍방의장치에동일한 Baud Rate 이설정되어야합니다. BPS 는 Start bit + Data bits + Parity bit + Stop bits ( 총 11 개 bit) 의묶음이초당몇개가전송되는지에따라 1200bps, 2400bps, 9600bps 로표기되며, 사용자가 9600bps 로설정하면각데이터의전송간격은약 1/9600 = 0.104ms 정도이며, 초당최대전송데이터개수는 9600 /11 = 872 문자를초당보낼수있습니다
Bit Table Start bit 는각문자데이터가전송된다는것을표시합니다. Data bit 는총 7 개로구성됩니다. 예를들어, 전송되는데이터가아래 와같으면다음과같이해석됩니다. Data bit 부분만을때어내면 1011011이지만해석할때는역순으로변형시키기때문에 1101101이됩니다. 2진데이터 1101101 은 16진데이터 6D 값과동일하며 ASCII 테이블을참조하게되면 m 의값을갖습니다. Parity bit는오류체크기능을위해사용됩니다. Stop bit는데이터전송이완료됐음을나타냅니다. Start Data bits Parity Stop bits 0 1 0 1 1 0 1 1 0 1 1
VISA 함수 우선시리얼통신프로그래밍에사용되는함수의명칭은 VISA 입니다. LabVIEW 5.X 이하버전시리얼통신전용함수인 Serial Read.vi 또는 Serial Write.vi 를지원했지만최근함수를 Functions 팔레트에서숨기고편리한 VISA 함수를사용하고있습니다. VISA 함수를이용하는시리얼통신은 GPIB 통신과별반차이가없습니다. GPIB 통신과같이 VISA Read 함수와 VISA Write 함수를혼합하여구현합니다. 그리고시리얼통신프로그래밍에서는사용되는통신방법이 RS-232C, RS-422, 또는 RS-485 이든동일하게구현합니다
시리얼통신방식 일반적인전개방식은컴퓨터에서특정한명령을시리얼포트에 Write하면시리얼장비가이를인식하고여기에대한응답으로특정한동작을수행합니다. 두번째방식은컴퓨터에서특정한명령을시리얼포트에 Write하면시리얼장비가이를인식하고여기에대한응답으로특정한데이터를보냅니다. 컴퓨터는이를읽어드리기위해 Read를수행하게됩니다. 세번째방식은시리얼장비가일방적으로시리얼포트에데이터를날리면컴퓨터는연속적으로데이터를읽어드립니다.
연습용 Serial Write and Read.vi
프로그램설명 시리얼프로그래밍흐름은최초시리얼포트의환경을설정하는시리얼포트설정부로시작합니다. 시리얼포트의기본셋팅은 LabVIEW는바탕화면에위치한 Measurement and Automation Explorer (MAX) 의값을참조하게됩니다. 또한 MAX에서설정값을변경한다음이를반영하기위해서는다음그림과같이화면상단에위치한 Save 버튼을클릭합니다.
시리얼통신시뮬레이터는다음그림과같이두번째방식으로동작합니다. 컴퓨터에서특정한명령을전달하면이에대응하는응답을전달합니다. 시리얼장비에명령어를전송할때는 Write 스위치를 True 로설정하여장비쪽에명령어를전송합니다. 여기서는시리얼통신시뮬레이터에게장비명을묻는명령어인 *idn? ( 일반적으로계측기의정상설치를확인하는명령으로자주사용됨 ) 을전달합니다. 시리얼장비가명령에반응하는시간을고려해약간의대기시간을주는것이관례입니다. 장비의특성마다적절한대기시간이다를수있겠지만일반적으로 0.5 초내외로설정합니다.
연습용 Serial Write and Read.vi Front Panel
VISA Byte at Serial Port 프로퍼티노드 그다음단계에서는 Read 스위치를 True 로설정하여시리얼포트의데이터를읽고 Read String Text Indicator 에기입합니다. 데이터를읽어드릴때중요한부분은얼마의데이터를불러들이는지를설정하는부분입니다. 이부분은 VISA Byte at Serial Port 라는프로퍼티노드가수행합니다. 이노드는버퍼에입력된데이터양을바이트값으로환산하여출력하며이는 VISA Read 함수의입력으로받습니다. VISA Byte at Serial Port 프로퍼티노드는 Function >>Instrument I/O >>Serial 팔레트에아래그림과같이위치합니다
프로퍼티노드란하드웨어또는윈도우소프트웨어의고유한기능을 LabVIEW 에서접근하고자할때사용됩니다. 위그림과같이노드의오른마우스클릭하여 Properties 메뉴로이동하면어떠한고유기능에접근할수있는지를나타내고있습니다. VISA Byte at Serial Port 의경우에는 Serial Setting 과관련된고유기능에접근할수있습니다. 그림에는기타시리얼기능이나타났으며이들중에하나를선택하게되면이에맞춰기능이변환됩니다. 여러개의하드웨어고유기능에접근하고자하는경우프로퍼티노드의중앙하단부를마우스로드래그하면여러개의프로퍼티노드가나타납니다. 예를들어, 세가지고유기능에접근하고자하면세개의프로퍼티노드가나타나도록확장시키고각노드에서오른마우스클릭을하여원하는선택합니다. 프로퍼티노드는 Control 또는 Indicator 의역할을하게되는데이를선정하려면오른마우스클릭하여 Change To Write 또는 Change To Read 를선택하면됩니다. VISA Byte at Serial Port 프로퍼티노드의경우시리얼포트의상태를나타내는 Indicator 역할을합니다.
핸드셰이킹 송신장비쪽에서데이터를보내면수신장비쪽의 FIFO (First Input First Output) 메모리에이들이저장되는데갑작스럽게다른일을우선적으로처리해야되는경우가발생하게되면 FIFO 가가득차서결국데이터손실이발생할수있습니다. 이때데이터손실을발생하지않게하기위하여송신부에일정신호를보내재요청신호를하기전까지데이터를보내지말라고알려주어야만할것입니다. 이흐름제어를핸드셰이킹 (Handshaking) 이라고합니다. RS-232C 시리얼통신에서사용되는핸드셰이킹방법으로는소프트웨어, 하드웨어핸드셰이킹, Xmodem 등이있습니다.
소프트웨어핸드셰이킹 이방법은 GPIB 통신을할때메시지베이스명령어전송을통한입 / 출력을관리하듯이, 여기서는제어문자코드를데이터바이트로사용합니다. 앞에서본하나의문자패킷중간의 Data Bits 부분에제어문자코드를삽입합니다. 여기서쓰는제어문자코드는두가지가있는데각기 Xon, Xoff 라고부르며 "X" 는 "Transmitter" 의약자이며, Xon 또는 Xoff 신호는송신장비데이터전송흐름을제어합니다. Start Data bits Parity Stop bits 0 X X X X X X X 0 1 1
소프트웨어핸드셰이킹은사용자가데이터형을 ASCII 형이아닌바이너리로데이터를정의했을때문제점이발생합니다. 전송되는데이터가바이너리로정의되어있는상태에서는 HEX 11 과 13 는하나의데이터로간주될수밖에없을것입니다. 이때에는이것은더이상제어코드가아닌일반데이터로간주가되어시리얼포트 FIFO 오버플로우를발생하면서프로그램에오류를발생시킬수도있습니다. 소프트웨어핸드셰이킹단점 Xon 명령 : 아스키테이블에서제어코드로 ^Q 값을지닙니다. HEX 값은 " x11 " 입니다. Xon 제어코드는수신장비로부터송신장비로전송하여송신장비의데이터보내는것을중지시킬수있습니다. Xoff 명령 : 아스키테이블에서제어코드로 ^S 값을지닙니다. HEX 값은 "x13" 입니다. Xon 에의해중지된송신장비의데이터전송을다시동작시키는제어코드입니다.
하드웨어핸드셰이킹 데이터흐름제어는 RTS/CTS, DTR/DSR 의짝을이루어집니다. RTS/CTS 는각기 "Request To Send" 와 "Clear To Send" 의약어입니다. 수신부에서데이터를받을준비가되어 RTS( 출력 ) 라인을활성화 (True) 하면송신부에서는이신호를 CTS( 입력 ) 라인을통하여인식하고이제부터데이터전송준비가되었으므로데이터를보내라는의미입니다. DTR/DSR 은각기 "Data Terminal Ready" 와 Data Set Ready" 의줄임말입니다. 시리얼포트와모뎀사이에양쪽의상태를파악하기사용되며, 컴퓨터로부터데이터를보낼준비가되었을때 DTR 라인 ( 출력 ) 을활성화 (True) 로설정하면모뎀의 DSR( 입력 ) 라인에서신호를인지하고이제부터데이터를컴퓨터에서데이터를보낼수있게됩니다.
소프트핸드셰이킹 LabVIEW 코딩
초기및종결문자사용 End write/read with termination character? - 종결문자사용여부확인 Termination char - 종결문자는 HEX(16 진수 ) 값으로 "xa" 설정 ( 일반숫자를 HEX 로보기위해서는아래그림과같이상수 (Constant) 를오른마우스클릭하고 Visible Items에서 Radix를선택함 )
초기설정및종결문자사용설정
timeout(ms) 시간초과설정 - 10000 ms VISA 리소스 - COM1 ( 시스템기본값으로 COM1 이설정되지만이는 VISA 에서별칭 (Aliasing) 으로만든이름일뿐임. 실제 VISA 에서사용되는명칭은시리얼포트가 1 번이므로 "ASRL1::INSTR" 임. 이는 MAX 또는 VISA Interactive Control 에서확인가능함 ) baud rate 9600 data bits - 8 비트 ( 패리티비트를사용하지않을때가능, 사용할때는 7 비트까지만데이터비트로이용가능 ) parity 없음 ( 패리티비트를사용하게된다면 VISA 프로퍼티노드의 Serial Parity 를설정해야하며, 또한데이터비트의크기도 7 비트로제한됨 ) stop bits - 비트크기는 1 비트로설정 flow control - 흐름제어는 Xon/Xoff 모드로설정 ( 소프트웨어핸드셰이킹 ) 하드웨어핸드셰이킹인 RTS/CTS 모드등의흐름제어를사용할때에는시리얼포트에하드웨어선이각기연결이되어야함.
RS-232C DB-9 형모듈핀맵
종결문자사용여부설정 Serial End Mode for Writes노드를통하여종결문자를사용할것을설정 Send End Enable 노드를통해활성화시키고, Termination Character 노드에종결문자를삽입함. 프로퍼티노드는위노드서부터아래노드로순차적으로실행됩니다.
종결문자사용
Serial.vi 를사용한 Level Position Sensor 에서데이터수집 Fig.2. Serial communication through RSC232.
1. 통신포트초기화 프로그램동작은시퀀스에의하여순서대로동작한다. Functions -> Sequence 를사용하여다음그림프레임 [0] 통신포트초기화를실행한다. Functions -> Instrument I/O -> I/O Compatibility -> Serial Compatibility -> Serial Port Init.vi 함수를사용하여 Com1(port number:0) 을초기화한다.
2. 통신포트읽기, 파일저장 다음그림프레임 [1] 통신포트로부터데이터를받아들여화면에문자를표시하고문자열을파일로저장한다. Functions -> Instrument I/O -> I/O Compatibility -> Serial Compatibility -> Serial Port Read.vi 함수를사용하여 Com1(port number:0) 로부터데이터를받아들인다. While 문을사용하여외부동작스위치를사용하여데이터를전송시계속하여받아들인다. 파일저장은 Functions -> File I/O -> Open/Create/Replace File.vi 을이용하여파일을생성하고 Functions -> File I/O -> Write File 을이용하여파일로저장한다. Functions -> File I/O -> Close File 을이용하여파일을닫는다.
3. 통신포트닫기 다음그림프레임 [2] 통신포트닫는다. Functions -> Instrument I/O -> I/O Compatibility -> Serial Compatibility -> Close Serial Driver.vi 함수를사용하여 Com1(port number:0) 를닫는다.
4. Serial 통신, 파일저장프론트 패널 저장할파일의디렉토리와파일명을설정하고, 파일을 open or create로상태를설정한다. 통신할 Serial포트를설정하고통신속도를설정한다. 수신한데이터를화면에표시되도록문자표시창에출력하도록한다. 수신한데이터크기를저장할 requested byte count를 19로설정한다.
요약 직렬통신의기본개념이해 Labview 의 VISA 함수 Serial.vi 의작성예