직렬 포트에서 특정 형식의 메시지를 지속적으로 수신하는 Java 프로그램이 있습니다.RXTX를 사용하여 자바 직렬 포트 연결 동기화
- 바이트 1 : 1
- 바이트 2 내지 0xFE
- 바이트 3 : 0xED
- 바이트 4-255 전송자 애플리케이션은 메시지를 전송하지 않은 경우, 다음과 같은 형식으로 하트 비트 메시지를 전송한다 : 0
송신자 전에 수신자 응용 프로그램이 시작되면 모든 기능이 올바르게 작동하지만 발신자가 하트 비트를 내 보내면 수신자가 시작될 때 수신 대기가 거의 확실합니다. 하트 비트 메시지의 iddle (각 메시지가 Reed-Solomon으로 인코딩됨에 따라 255 바이트 덩어리로 읽히기 때문에 문제가됩니다.) 나는 간단한 상태 기계 인 동기화 기능을 썼다. 다음과 같은 조건으로 한 번에 1 바이트를 읽습니다.
방금 읽은 경우 NEW_MESSAGE 상태로 전환합니다.
방금 0xFE :를 읽은 경우 POTENTIAL_HEARTBEAT 상태로 전환하십시오.
관련 검사 이러한 상태는 순서가에 도달 할 수 없음을 보장하기 위해 자리에 하트 비트 상태로 스위치를 한 번 나는 HEARTBEAT에 도달했습니다 :
은 그냥 0xED를 읽는다면 상태, 나는 나머지 252 0을 읽고 수신기가 동기화되었다고 가정합니다. 지금까지 테스트에서 동기화를 효과적으로 트리거하기 위해 올바른 바이트가 보내 졌음에도 불구하고이 동기화 기가 올바르게 작동하지 않았습니다. 제 질문은 이것입니다 : 직렬 통신을 동기화하는 더 좋은 방법이 있습니다. 왜냐하면 저는 제 방법이 전혀 마음에 들지 않기 때문입니다.
"제대로 작동하지 않는다"고 말하면 어떻게됩니까? 물론 간단한 FSM이 실패하는 이유를 확인하기 위해 상태 머신 입력 및 전환 추적을 작성할 수 있습니다. –