目前在一家北斗导航公司做小小实习生,2023.4月任务之一就是为联系编写属于公司的自定义协议。
要求是对rtk接收机通过串口发送过来的四条卫星导航定位信息($GPGGA、$GPRMC、#BESTPOS2A、#HEADINGA开头的四句报文)进行提取,生成一条我想要的信息($XHT开头)
我的思路是先对rtk发过来的这四句话筛选,得到$ 和 #开头的两种,再对两种语句进行校验和计算,如果校验通过,便对其再筛选。
$开头是用异或校验,在$和*之间每一位和后一位进行异或校验,得到校验和
#开头的是把*之前的所有字符进行crc32校验,具体原理自己百度。
先来句子看看吧,下面这四条语句便是接收机发过来的:
$GPGGA,021658.30,3119.52924134,N,12025.71518728,E,4,53,0.4,25.3666,M,7.9491,M,02,0*55
$GPRMC,021658.30,A,3119.52924134,N,12025.71518728,E,0.002,115.7,040423,6.1,W,D*28
#BESTPOS2A,COM1,0,58.0,FINE,2256,181036.300,119752,19,18;SOL_COMPUTED,NARROW_INT,31.32550422751,120.42859038966,25.3605,7.9491,WGS84,0.0095,0.0076,0.0180,"0",2.300,0.000,54,53,53,50,0,01,03,f3*6ef7d28e
#HEADINGA,COM1,0,58.0,FINE,2256,181036.300,119752,20,18;SOL_COMPUTED,NARROW_INT,1.9061,11.3497,-0.0133,0.0000,0.1247,0.2637,"999",54,47,47,44,3,01,3,f3*1c169c7a
*后面的是校验和,是发过来时候就有的,以第一条为例,我要做的是把第一条语句除了$和*后面的数($和*之间的内容),进行异或校验。校验完得到的数与*后面的数进行对比,一致就表示这条语句合格,这条语句在传输过程中是没有错误的,是完整的,可以利用。