티스토리 뷰

안녕하세요. 구스입니다.


랩뷰는 다른 장비와의 통신을 사용할 때 사용하는 통신 프로토콜을 대부분 지원하고 있습니다. 대표적인 통신프로토콜에는 TCP/IP, UDP와 같이 이더넷 기반의 통신과 RS232, RS485와 같은 시리얼통신으로 구분할 수 있습니다.


LabVIEW는 이러한 통신에 데이터를 송수신할 때 문자열로 보내고 받습니다. 하지만 C, C#, 파이썬등에서는 Byte 배열 기반으로 데이터를 송수신하게 되죠.


따라서 랩뷰와 다른 언어와의 통신에서는 데이터를 맞춰줘야 하는 작업이 필요합니다. 바이트 배열이라함은 아스키코드 기반으로 데이터를 전달하는 것을 의미합니다. 아래의 아스키코드의 Dec의 값이 실질적으로 바이트 배열의 값입니다. 


랩뷰에서 1이라는 문자열을 보내면 다른 언어에서는 Char 값이 1인 0x31값을 받게 되는것이죠. 


랩뷰와 다른 언어와의 통신에서 이러한 차이로 인해서 많이 헷갈려하고 있습니다. 


결론적으로 보면 LabVIEW에서 문자열로 보내면 LabVIEW 내부 함수에서 바이트 배열로 변환한뒤 상대 디바이스에 데이터를 전송하게 되고, 상대 디바이스로 부터 받은 바이트 배열을 LabVIEW 내부에서 문자열로 변환하여 사용자에게 보여줍니다. 


LabVIEW에서 사용자가 사용하는 함수가 좀더 상위 함수라고 보면 될 것 같습니다. 단일 값이나 1차배열을 상대 디바이스로 보낼 때에는 그냥 형변환 함수(타입 캐스트)를 사용하면 됩니다. 


타입 캐스트 함수를 이용하여 바이트 배열과 문자열을 한번 변환해 보았습니다. 


먼저 바이트 배열부터 살펴봅시다. 바이트 배열 변환은 파란색 화살표로 구성되어 있습니다. 


바이트 배열을 타입 캐스트 함수를 이용하여 문자열로 변경하고 이를 다시 바이트 배열로 변경합니다. [1,2,3,4] 이라는 배열을 변환한 변환된 데이터를 보면 이상한 캐릭터 모양으로 나와 있는 걸 확인할 수 있습니다. 


이는 아스키코드상 0x01, 0x02. 0x03, 0x04을 나타내는 Char 값입니다. 


그럼 빨간색 화살표로 나타내고 있는 문자열을 바이트 배열로 변경한 것을 볼까요. 

문자열을 바이트 배열로 변환한 것은 0x49, 0x50, 0x51, 0x52의 값이 나타납니다. 



즉 랩뷰에서 바이트배열에 대한 문자열 변환 결과와 기존 문자열 변환 결과가 다른다는 걸 확인할 수 있습니다.

따라서 기본 문자열을 통신으로 보내기 위해서는 그냥 바로 통신 쓰기 함수에 쓰면 됩니다. 내부적으로 이를 바이트 배열로 변환하여 상대방 디바이스에 전달이 됩니다.


하지만 정수형 혹은 Double 형 1차배열을 보내고자 한다면 위의 코드와 같이 타입 캐스트 함수를 이용하여 문자열로 변경하여 전송해야 합니다. 


랩뷰와 다른 언어에서의 통신에서 가장 많이 실수 하는 코드를 한번 짜볼까 합니다. 랩뷰의 통신 함수 중 쓰기 함수가 문자열로 받다보니 아래와 같이 숫자를 10진수 문자열로 함수를 이용하여 변환을 많이 합니다.


이는 바이트 값 1을 변환하면 문자열 1로 만들어 주는 함수입니다.

바이트 값으로는 0x01이 값이 0x49로 변경이 되므로, 아래의 함수를 이용하여 상대방 장비에 보내게 되면 0x01이 아닌 0x49를 받게 되어 통신 상에 알맞은 값을 송수신 할 수 없게 되는 것이죠. 




시리얼통신, TCP, UDP 통신을 통해서 다른언와의 데이터를 송수신하기 위해서는 무조건 타입캐스트 함수를 써야 한다고 기억하시면 됩니다.


이 글에서는 랩뷰와 다른 언어와의 1차배열, 단일값 데이터 통신하는 방법에 대해서 알아보았습니다.

그럼 이만 줄이겠습니다.


이 글이 도움이 되셨으면 아래의 하트를 눌러주세요.


댓글