Cyclic Data로 설정된 XNET 세션에서 프레임 손실이 발생하는 이유는 무엇입니까?

업데이트 됨 Mar 18, 2019

해당 제품

Software

  • LabVIEW

Driver

  • NI-XNET

문의사항

CAN 프로토콜을 사용하여 20ms마다 프레임을 전송하고 싶습니다. Timing TypeCyclic Data로 설정하고 Transmit Time을 XNET Database Editor에서 20ms로 설정했습니다. LabVIEW에서 매 20ms마다 XNET Write(Signal Single-point).vi를 사용하여 값을 업데이트하지만 일부 프레임은 손실됩니다. 왜 이런 일이 일어납니까?
 

해결책

XNET 디바이스를 CAN으로 사용할 때, Timing TypeCyclic Data로 설정되면, XNET 디바이스는 어플리케이션이 Frame의 payload를 업데이트하는지 여부에 관계없이 지정된 간격으로 프레임을 전송합니다. 이 때 LabVIEW에서 20ms마다 XNET Write(Signal Single-point).vi를 호출하여 payload를 업데이트하면 일부 프레임이 손실되거나 동일한 payload를 가진 프레임이 반복적으로 나올 수 있습니다. 이 문제는 어플리케이션과 XNET 디바이스가 서로 다른 Clock을 기준으로 작동하기 때문에 발생합니다.
위의 다이어그램은 서로 다른 두 가지 오류를 보여줍니다.
  • 첫 번째 경우는 지터로 인해 어플리케이션의 주기가 XNET 디바이스의 주기보다 짧아지는 경우입니다. 이 경우 1st write와 2nd write 사이에서 어플리케이션이 페이로드를 두 번 업데이트 할 수 있습니다. 이 때 C 1,2가 손실되고 C 3,4 만 전송됩니다.
  • 두 번째 경우는 지터로 인해 어플리케이션의 주기가 XNET 디바이스의 주기보다 길어질 때 발생합니다. 이 경우 어플리케이션은 1st write와 2nd write 사이의 payload를 업데이트하지 않을 수 있습니다. 이 때, C 1,2는 두 번 중복하여 전송됩니다.

이 문제는 XNET Create Sessionvi에서 Signal Output Single Point mode 대신 Frame Output Queued mode를 사용하여 해결할 수 있습니다.
Frame Output Queued mode는 대기열에 여러 개의 프레임을 쌓고 XNET 장치에서 전송이 발생할 때마다 프레임을 순차적으로 출력하므로 손실이나 중복을 방지합니다.

이 글이 도움이 되셨습니까?

도움 안됨