2010-12-14 3 views
0

임의의 문자열을 포함 할 수있는 NMEA 호환 독점 문장을 만들려고합니다.NMEA 값에 '*'(별표)가 포함될 수 있습니까?

체크섬과 NMEA 문장의 일반적인 형식은 다음과 같습니다 *는 2 자리 검사의 시작을 표시

$GPxxx,val1,val2,...,valn*ck<cr><lf> 

.

제 질문은 : 값 필드에 * 문자가 포함되어있을 수 있습니까?

파서가 최종 <cr><lf>을 기다린 다음 문장이있는 경우 처음으로 *을 기다리지 않고 체크섬을 찾기 위해 이전 3자를 다시 살펴볼 수 있습니다. 그러나 표준에서 허용하는지 여부는 알 수 없습니다.

다른 문자로 인해 문제가 발생할 수 있습니까?

답변

2

조심해야 할 두 개의 ASCII 문자는 시작에 있어야하는 $ 및 체크섬 앞에 오는 *입니다. 사용자 지정 NMEA를 구문 분석하는 다른 사용자는 그 문자를 다른 곳에서 찾을 수 없습니다. 일부 파서는 새로운 라인이 시작되었다고 가정합니다. 직렬 포트 통신을 사용하면 문자가 전송 중에 손실되는 경우가 있기 때문에 문장 마커가 $ 시작되는 이유가됩니다.

자신의 NMEA 명령을 만들려면 P로 시작하고 3 자 코드를 사용하여 독점 메시지를 작성하는 제조업체 또는 회사를 나타내는 것이 일반적이므로 $ PSQU를 사용할 수 있습니다. NMEA 명령은 5 자 길이로 권장되지만 여러 하드웨어 및 소프트웨어 제조업체가 4 자에서 7 자까지의 독점 메시지가 있습니다.

분명히 자신 만의 파서를 작성한다면 원하는 것을 할 수 있습니다.

이 웹 사이트는 오히려 유용

http://www.gpsinformation.org/dale/nmea.htm

1

자신이 프로토콜을 확장하는 경우 ("독점"에 기반) - 원하는대로 넣을 수 있습니다. 나는 ASCII에 충실 하겠지만, 그 범위 내에서 야생으로 간다. (분명히 기존 메시지와 충돌하지 않도록 자신의 $ GPxxx를 만들어야합니다. 아마도 새 머리글 $ SQUEL, ...)

정의에 따르면 독점 메시지는 NMEA와 호환되지 않습니다.

NMEA 스트림을 수신하는 표준 파서는 '양호한'데이터와 일치하지 않는 것을 무시해야합니다. 이는 체크섬 오류 또는 새 메시지가 임의의 임의의 메시지와 함께 있다고 생각하는 것과 같이 대단히 손상된 메시지를 의미합니다.

기존 메시지를 단순히 작성하는 경우 *는 의미가 없으며 무시해야하지만 체크섬이 정확하고 파서가 페이로드를 이해하지 못하면 큰 문제가 발생할 위험이 있습니다.

+0

감사합니다, 아주 유익한! 나는 그것이 "NMEA 호환"에 의해 NMEA 문장 구조를 따르는 것을 의미한다고 생각합니다. 나는 그때 '*'를 회피 (또는 번역) 할 것입니다. – squelart

관련 문제