데이터 버퍼링하기
- 업데이트 날짜:2025-08-27
- 3분 (읽기 시간)
네트워크 공유 변수 또는 psp나 dstpURL을 사용하여 프로그램적으로 데이터를 공유하는 경우, LabVIEW는 기본적으로 가장 최신의 값만을 모든 수신자(reader)에게 씁니다. 한 클라이언트가 서버에 값을 쓰는 속도가 다른 클라이언트가 그 값을 읽는 속도보다 더 빠를 경우, 서버의 새 값은 클라이언트가 그 값을 읽기 전에 처리되지 않은 이전 값을 덮어씁니다. 수신자가 다음 값을 받기 전에 값을 받지 못한 경우 데이터는 손실됩니다. 이 처리되지 않은 데이터의 손실이 서버나 클라이언트에서 발생할 수 있습니다. 데이터를 읽고 가장 최근에 서버에 쓰여진 값만을 받으려고 하는 경우, 이와 같은 데이터 유실은 문제가 되지 않습니다. 그러나 서버에 쓰여지는 모든 값을 받으려고 하는 경우나 데이터 유실이 허용되지 않는 전송의 경우에는 클라이언트의 데이터를 버퍼링해야 합니다. 공유 변수 프로퍼티 대화 상자의 네트워크 페이지에서 버퍼링 사용 확인란에 확인 표시를 하여 공유 변수에 대한 버퍼링을 활성화합니다.
클라이언트측 버퍼링
버퍼링은 수신자와 발신자 사이의 잠재적인 시간차를 줄여주나 데이터 전송을 보장하지는 않습니다. 서버나 클라이언트의 버퍼에 있는 데이터가 버퍼의 크기보다 커지는 경우, 버퍼는 예전 값을 버리고 새 값을 받게됩니다. 공유 변수 프로퍼티 대화 상자의 네트워크 페이지에서 공유 변수의 버퍼 크기를 설정하여 공유 변수가 이전 데이터를 덮어쓰기 전에 얼마나 많은 데이터 패킷을 보유하는지 설정할 수 있습니다.
또한 프로그램적으로 각 이이템의 버퍼가 보유할 수 있는 최대 바이트 수와 최대 값 수를 패킷으로 지정할 수 있습니다. National Instruments는 데이터를 버퍼할 때 최대 버퍼 바이트와 최대 버퍼 패킷 프로퍼티 모두를 지정하도록 권장합니다. 들어오는 데이터가 최대 바이트 수 또는 최대값 수를 초과하는 경우, LabVIEW는 오래된 데이터를 버퍼에서 삭제하여 새 데이터를 받습니다.
프로그램적으로 버퍼링을 설정할 때 [배리언트 속성 설정] 함수에 쓰여진 데이터를 연결하여 발신자의 각 값을 고유하게 식별하고 수신자에서 버려진 시퀀스 ID를 확인함으로써 데이터 스트림에서 버려진 값을 감지합니다.
8 킬로바이트 미만의 데이터를 가진 공유 변수를 연결하면, LabVIEW가 이 데이터를 네트워크에 전송하는데 최대 10 밀리초까지 소요됩니다. 공유 변수 데이터 비우기 VI를 사용하여 즉시 버퍼를 비우고 이러한 지연을 제거할 수 있습니다.
버퍼가 활성화된 클라이언트가 모든 데이터를 받도록 하려는 경우, [DataSocket 쓰기] 함수를 사용하여 프로그램적으로 실시간 데이터를 씁니다. 프런트패널에서 데이터를 쓰면 데이터를 잃을 수 있습니다.
[데이터 소켓 열기] 함수의 모드 입력을 BufferedRead 또는 BufferedReadWrite로 설정하고, 프로퍼티 노드를 사용하여 FIFO(First-In-First-Out) 버퍼의 사이즈에 대해 DataSocket 프로퍼티를 설정합니다. 이와 같은 방법은 LabVIEW가 값이 변경될 때마다 덮어쓰는 대신 클라이언트가 받는 값을 버퍼에 저장하도록 합니다.
| 노트 DataSocket 프로퍼티를 사용하여 FIFO 버퍼의 크기를 설정하는 경우, [DataSocket 열기] 함수의 모드 입력을 BufferedRead 또는 BufferedReadWrite로 설정해야 합니다.. 그렇지 않으면, 연결이 되어도 서버의 아이템은 버퍼에 저장되지 않습니다. |
다음 블록다이어그램은 프로그램적으로 버퍼링을 사용합니다.
또한, 공유 데이터가 DataSocket 함수를 사용할 때 문자열 ?maxbytes=1000&maxpackets=10을 URL의 끝에 추가하여 버퍼링을 활성화할 수 있습니다. 이 때 1000은 버퍼가 포함하는 바이트의 최대 개수이고 10은 버퍼가 포함하는 패킷의 최대 개수입니다.
| 노트 버퍼링은 서버가 쓰는 데이터를 [DataSocket 읽기] 함수를 사용하여 읽을 때 적용됩니다. 프런트패널 DataSocket 데이터 연결을 사용하여 데이터를 읽을 때에는 버퍼링을 사용할 수 없습니다. 공유 변수 프로퍼티 대화 상자의 네트워크 페이지에 있는 버퍼링을 활성화하고 컨트롤을 공유 변수에 연결한 경우, 공유 변수 엔진을 통해 버퍼링을 사용하여 프런트패널 데이터 연결을 할 수 있습니다. |
DataSocket 프로퍼티를 사용하여 진단 정보 보고하기
지정한 버퍼에 대한 진단 정보를 요청하기 위해서 버퍼 사용률(바이트) 프로퍼티 또는 버퍼 사용률(패킷) 프로퍼티를 사용합니다. 현재 버퍼의 크기가 적절한지 파악하기 위해 클라이언트에서 사용 중인 버퍼의 퍼센트를 확인하기 위하여 이들 프로퍼티를 사용합니다. 이들 프로퍼티의 값이 버퍼의 최대값에 근접하는 경우, 서버가 쓰는 모든 값을 확실히 받기 위해서 버퍼의 크기를 증가시킵니다. 또한 DataSocket 함수를 포함하는 While 루프가 실행되는 속도를 증가시켜 읽는 속도를 증가시킬 수 있습니다.
서버측 버퍼링
클라이언트측 버퍼링을 설정할 때, 서버가 네트워크가 받을 수 있는 속도보다 빨리 데이터를 전송하는 경우 데이터의 유실이 발생할 수 있습니다. NI Publish-Subscribe Protocol(NI-PSP)의 서버측 버퍼링이나 dstp 버퍼링을 사용할 수 있습니다. NI-PSP 버퍼링을 사용하려면 버퍼링을 활성화한 기존 공유 변수에 연결해야 합니다. dstp 버퍼링을 사용하려면, 또한 DataSocket 서버 관리자를 사용하여 서버측 버퍼링을 설정해야 합니다. DataSocket 서버의 서버측 버퍼링에 대한 추가적인 내용은 DataSocket 서버 도움말을 참조하십시오. 다른 프로토콜의 경우, 해당 서버의 서버측 버퍼링에 대한 추가적인 내용은 서버 문서를 참조하십시오.