해결책
이 문제는 여러 가지 요인으로 인해 발생할 수 있습니다. 여기에는 컴퓨터의 속도, 사용하는 전송 속도, 직렬 포트의 FIFO 크기 및 데이터를 시리얼 포트로 전송하는 장비의 FIFO 크기가 포함됩니다.
흐름 제어는 특정 바이트 수가 버퍼에 있을 때까지 기다린 다음 프로세서가 메시지 또는 신호를 다른 장치로 전송하여 전송을 중단하도록 요청합니다. 높은 보 전송속도에서는 시리얼 포트가 버퍼 흐름 제어 레벨에 도달하고 계측기가 전송을 중지 할 때까지 몇 바이트를 수신합니다. 우선 순위가 높은 프로세스가 리얼타임 타겟의 프로세서를 제어하는 경우 이러한 추가 바이트가 더 커집니다. 프로세스가 VISA 인터럽트보다 우선 순위가 높으므로 우선 순위가 높은 프로세스가 리얼타임 프로세서로 완료 될 때까지 프로세서에서 아무런 조치도 취하지 않습니다.
16 바이트 FIFO에 대한 기본 VISA 및 Windows 설정은 장치가 메시지를 송신 장치로 보내려고 할 때 FIFO에 2 바이트를 남기고 14 바이트입니다. 속도가 느린 컴퓨터의 보 전송속도가 높을수록 시리얼 포트가 프로세서에 신호 전송을 요청한 시점부터 4 바이트 이상을 수신 할 가능성이 높습니다.
LabVIEW Real-Time 또는 NI Serial 하드웨어를 사용할 경우MAX를 열고
장치 및 인터페이스(Devices and Interfaces) 에서 문제가 있는 시리얼 포트를 찾으십시오.
COM 포트를 클릭하면
고급 설정(Advanced) 탭이 오른쪽 창에 나타납니다. 이러한 설정을 사용하면 수신 버퍼 크기를 줄일 수 있습니다. 문제가 해결 될 때까지 버퍼 크기를 줄여야합니다.
시스템의 로딩(예 : 우선 순위가 높은 작업이나 루프에서 오랜 시간이 걸리는 경우)에 따라 시리얼 하드웨어 처리 작업이 동작하지 않을 수 있습니다. 이렇게 시리얼 하드웨어가 충분히 자주 동작하지 않으면 RX FIFO 오버런을 발생시킬 수 있습니다. 이를 피하려면 NI-Serial의 인터럽트 처리 모드를 구성하십시오. 인터럽트 처리 모드 설정에 대한 더 자세한 정보는 NI-Serial 도움말에서
LabVIEW Real-Time의 성능을 참조하십시오. 이 설정은 C 시리즈 모듈에는 적용되지 않습니다.
CompactRIO 및 FieldPoint에서 사용할 경우MAX를 열고 컨트롤러에 연결된 시리얼 포트를 찾으면 고급 탭이 나타나지 않습니다. 이 탭을 사용하여 하드웨어 흐름 제어 라인을 높이기위한 요청 수준을 설정하는 대신 컨트롤러에있는 파일을 수정해야합니다. 컨트롤러의
c : \ ni-rt \ system 디렉토리에있는
niserial.dbs 파일을 수정하십시오.
SerialPortName = "COM1" 라인 바로 아래에 다음 줄을 추가하십시오 :
RXFIFO = 1. RXFIFO에 가능한 값은 1, 4, 8 및 14입니다.이 파일을 수정하면 하드웨어 흐름 제어의 트리거 레벨을 변경할 수 있습니다 .
Windows의 경우이 문제를 해결하려면 Windows에서 장치 관리자를 열어야합니다. 그런 다음 설정을 수정하려는 COM 포트를 찾아 해당 속성을 엽니다. 다음으로 고급 탭을 클릭하십시오. UART가 흐름 제어를 더 빨리 사용할 수 있도록 수신 버퍼(Receive Buffer)의 크기를 변경할 수 있는 슬라이더가 표시됩니다.
대부분의 경우 기본값 설정으로 충분합니다. 그러나 버퍼 오버 플로우 오류가 발생하면 이 값을 줄여야합니다. 이로 인해 더 많은 인터럽트가 프로세서로 전송되어 UART로 전송되는 byte 속도가 느려집니다. 이 값을 늘리면 FIFO 버퍼가 오버 플로우 될 수 있습니다.