다중 비동기 직렬 포트 데이터 처리 방법

업데이트 됨 Jan 19, 2023

해당 제품

드라이버

  • NI-VISA

문의사항

여러 직렬 포트에서 비동기식으로 읽으려고 하는데, VISA의 타이밍 설정을 제대로 못하여 데이터 수집을 효율적으로 못하고 있습니다. 현재, 데이터를 놓치거나, 실행 시 CPU를 100%를 사용하고 있습니다. 이 문제를 어떻게 해결할 수 있을 까요?
 

해결책

LabVIEW는 몇 가지 강력한 직렬 입력/출력 및 문자열 처리 VI를 제공합니다. 이들을 적절하게 사용하면 효율적인 애플리케이션 설계가 가능합니다. 프로그램을 작성하는 방법에는 정답이 없지만, "Bytes at Port" 프로퍼티를 적절히 사용하는 것이 좋습니다. 이 프로퍼티는 VISA 세션을 사용하는 직렬 포트에서 현재 사용할 수 있는 바이트 수를 반환합니다. 이 번호를 VISA 읽기 함수 의 "바이트 카운트"입력에 직접 연결하여 직렬 어플리케이션에서 최적의 성능을 얻을 수 있습니다. 다음 블록 다이어그램을 예로 살펴보십시오.


추가 정보


LabVIEW 직렬 어플리케이션의 프로세서 집약화를 위해 몇 가지 기술을 사용할 수 있습니다. 다음 ms 배수까지 기다림과 같은 타이밍 VI는 애플리케이션 내 다른 스레드의 우선 순위를 지정하는 방법의 한 예입니다. 여러 개의 직렬 포트로 작업 할 때, 개별 VISA 읽기 VI를 자신의 While 루프에 배치하는 것은 확실히 이러한 타이밍 VI를 사용하여 데이터 전송을 처리하는 한 가지 방법입니다.

동기식 및 비동기식 I / O 기능도 고려해야합니다. 예를 들어 VISA 읽기 VI의 동작은 어플리케이션의 범위 내에서 블록 다이어그램의 구조와 LabVIEW 개발 환경의 상태에 따라 크게 변경될 수 있습니다. 단일 스레드 모드에서 LabVIEW를 실행 중이고 VISA 읽기가 동기식 인 경우 바이트 카운트 입력에서 지정된 바이트 수를 기다리는 동안 전체 어플리케이션 실행을 차단합니다. 그러나 LabVIEW가 멀티 스레드 모드이고 VISA 읽기가 동기식이면, 작업을 호출 한 스레드 만 차단됩니다. 반면 VISA 읽기가 비동기식일 경우, 단일 또는 다중 스레드 여부에 관계없이 나머지 응용 프로그램은 차단되지 않습니다. VISA 읽기에 대한 데이터 흐름 종속성이 있는 다이어그램의 해당 부분 만 영향을 받습니다.

많은 LabVIEW VI가 CPU 처리 속도, 멀티 태스킹, 멀티 스레딩 (muti-threading) 등을 고려하지 않고 성공적으로 개발될 수 있습니다. 그러나 실시간 비동기 입력과 인터페이스 해야 하는 어플리케이션은 어플리케이션의 페이싱이나 작동을 피하기 위해 특별한 주의가 필요할 수 있습니다. VISA 읽기VISA 쓰기는 이 가이드 라인에 해당합니다. 자세한 내용은 아래 "관련 링크"섹션을 참조하십시오.