2013-04-05 1 views
0

VC++를 사용하여 직렬 포트 응용 프로그램을 작성합니다. 스위치 장치에 포트를 열고 명령을 보내고 출력을 표시 할 수 있습니다. 주어진 명령의 출력을 위해 항상 열린 포트를 읽는 스레드를 실행 중입니다. 내 메인 스레드는 읽기가 완료 될 때까지 기다린다. 그러나 문제는 명령 출력이 끝나는 것을 어떻게 인식 할 수 있는가이며, 나는 주 스레드에게 신호를 보내야한다.직렬 포트 프로그래밍 - 수신 된 데이터의 끝을 인식합니다.

+0

이것은 출력의 가변성 때문에 문제입니다. 기다릴 이유가없는 한 수신 된 문자가 도착하거나 매 xms마다 표시하십시오. – dbasnett

답변

2

거의 모든 직렬 포트 통신에는 프로토콜이 필요합니다. 수신자가 응답이 완전히 수신되었음을 발견하는 몇 가지 방법. 아주 간단한 방법은 나머지 데이터에는 나타나지 않는 고유 한 바이트 또는 문자를 사용하는 것입니다. 라인 피드는 표준이며, 예를 들어 모든 모뎀에서 사용됩니다.

임의의 바이너리 데이터를 전송해야 할 때 더욱 정교 해져야합니다. 이에 대한 일반적인 해결책은 먼저 응답의 길이를 보내는 것입니다. 수신기는 수신 된 바이트를 카운트 다운하여 언제 완료되었는지 알 수 있습니다. 이것은 수신기가 송신기와 재 동기화 할 수있는 기회를 갖기 위해 특정 시작 바이트 값으로 더해질 필요가있다. 수신자가 전송 오류를 감지 할 수 있도록 체크섬 또는 CRC가 포함되는 경우가 많습니다. 그 결과, 수신기로부터 ACK/NAK 응답으로 오류를 복구 할 수있게되었습니다. 그러면 TCP를 다시 발명하는 과정에 잘 적응할 수 있습니다. RFC-916의 RATP 프로토콜은 널리 무시되지만 좋은 예입니다.