快速入门北斗短报文RDSS协议/北斗协议
北斗短报文协议,简称RDSS协议,最早是4.0版本,但是因为使用起来比较困难,所以在2015年前后推出了更加完善易用的2.1协议。
RDSS 2.1协议的语句都是以美元符号$开始,以英文字符,和*为分隔符,以回车换行符\r\n结束。主要使用到下面五条指令:
一、读取卡号
1,使用单片机往RD模块发送这条语句:$CCICA,0,00*7B\r\n
“CCICA”--读取北斗卡号的指令关键字。
“0”--监测本机加解密模块信息(不重要)
“00”--下属用户信息帧号(不重要)
“7B”--异或校验字节。将$到*(不包括$和*)之间的全部字节进行异或得到一个校验字节,然后转化成16进制数,取这个16进制数的高4位和低4位。比如校验字节转化成16进制数后是0X07,则这里就写07,不能省略0。
2,RD模块回复给单片机,比如 :$BDICI,0242286,00242286,0000011,6,60,3,N,0*38\r\n
“BDICI”--指令关键字。
“0242286”--北斗卡号,7位数字。
“00242286” --序列号(不重要)
“0000011” --通播地址(不重要)
“6” --标识用户特征。(不重要)0表示指挥机,1表示一类用户机,2表示二类用户机,3表示三类用户机,4表示指挥型用户机(进行身份认证),5表示一类用户机(进行身份认证),6表示二类用户机(进行身份认证),7表示三类用户机(进行身份认证)。
“60” --北斗卡的服务频度,这里60表示这张北斗卡每隔60秒发一次。
“3” --通信等级(不重要)
“N” --加密标志。(不重要)E表示加密,N表示非加密。
“0” --下属用户数。(不重要)一般是0。
“38”--异或校验字节。
注意,如果没有检测到北斗卡,则RD模块回复的语句是:
$BDICI,0000000,00000000,0000000,0,0,0,N,0*0B
二、读取信号状态
1,使用单片机往RD模块发送这条语句:$CCRMO,BSI,2,0*26\r\n
“CCRMO”--指令关键字。
“BSI”--默认参数(不重要)
“2”--打开指定语句(不重要)
“0”--语句的输出频度。0表示只输出1次。1表示每隔1秒输出1次。
“26”--异或校验字节。
2,RD模块回复给单片机,比如 :$BDBSI,08,01,4,4,0,0,1,0,1,4,0,0*53\r\n
“BDBSI”--指令关键字。
“08”--响应波速(读者不用纠结什么叫响应波速,不重要)
“01”--时差波速(读者不用纠结什么叫时差波速,不重要)
接下来的是10个波速的信号值。0最弱,4最强。有一个波速为4则表示信号较好,可以用于申请定位和发送消息。
“53”--异或校验字节。
三、申请定位
RDSS定位属于有源定位,精度是100米。而北斗的无源定位精度一般是5米内。
所以一般不把RDSS定位作为主要定位方式,而是采用RDSS作为通信,采用北斗无源定位模块作为定位。
1,使用单片机往RD模块发送这条语句:$CCDWA,0000000,V,1,L,,0,,,0*65\r\n
“CCDWA”--指令关键字。
“0000000”—默认用这个(不重要)
“V”—普通定位(不重要)
“1”—无高程(不重要)
“L”—普通高程指示(不重要)
“0”—天线高度,默认用0(不重要)
“0”—申请频度。默认用0表示只申请一次定位。
“65”--异或校验字节。
2,RD模块会回复单片机指令是否成功执行,比如 :$BDFKI,DWA,Y,Y,0,0060*0A\r\n
“BDFKI”--指令关键字。
“DWA”--关键字
“Y”--Y表示指令执行成功,N表示指令执行失败。
“Y”--Y表示频度设置成功,N表示频度设置失败(不重要)
“0”--发射抑制提示(不重要)
“0060”--频度等待时间。表示多少秒后才能再次重新发送。
“0A”--异或校验字节。
3,在几秒之内,卫星就会回复定位信息给RD模块,然后RD模块就会输出语句给单片机,比如:$BDDWR,1,0242286,021549.65,2240.4051,N,11402.5601,E,47,M,-3,M,1,V,V,L*1F\r\n
“BDDWR”—定位回复指令。
“1”--定位信息类型(不重要)
“0242286”--用户地址ID
“021549.65”—定位时间UTC。把最前面的02加上8,就是东8区的北京时间。
“2240.4051”—纬度
“N”—纬度方向。
“11402.5601”—经度
“E”—经度方向。
“47”—大地高度
“M”—大地高度的单位,M表示米。
“-3”—高程异常(不重要)
“M”—高程异常的单位,M表示米(不重要)
“1”—1表示定位精度100米,0表示定位精度20米。
“V”—V表示非紧急定位,A表示紧急定位。(不重要)
“V”—V表示非多值解,A表示多值解。(不重要)
“L”—L表示高程类型为普通,H表示高程类型为高空(不重要)
“1F”--异或校验字节。
四、收发信息
一般使用混合编码模式和代码编码模式。
以混合编码模式为例,电文首字母固定为“A4”,按照先后顺序将每个字符转换成16进制数大写。
如果16进制数不大于16,就在高位补0。
英文用一个字节表示,汉字用两个字节表示。比如,要发送信息“hello北斗”:
1,使用单片机往RD模块发送这条语句:$CCTXA,0242286,1,2,A468656C6C6FB1B1B6B7*7F
“CCTXA”--指令关键字。
“0242286”—收件人地址ID
“1”—1表示普通通信,0表示特快通信
“2”—2表示混合编码,1表示代码编码,0表示汉字编码
“A4…….”—电文内容。比如h的十六进制数是68。
“7F”--异或校验字节。
其中,
A4算一个字节,是混合编码的标识,后面可以跟77个字节的用户内容。
68656C6C6FB1B1B6B7算9个字节,这些用户内容是GBK编码,用户也可以采用UNICODE编码,只要在接收端也采用UNICODE解码即可。
如果是采用代码编码,去掉A4,上面的发送语句就是:$CCTXA,0242286,1,1,68656C6C6FB1B1B6B7*09
代码编码方式也是很主流的应用,可以发送78个字节的用户内容。
而混合编码因为需要A4这个字节做标明,所以就只能发送77字节的用户内容。
2,RD模块会回复单片机指令是否成功执行,比如 :$BDFKI,TXA,Y,Y,0,0060*15\r\n
“BDFKI”--指令关键字。
“TXA”—通信申请的关键字
“Y”--Y表示指令执行成功,N表示指令执行失败。
“Y”--Y表示频度设置成功,N表示频度设置失败(不重要)
“0”--发射抑制提示(不重要)
“0060”--频度等待时间。表示多少秒后才能再次重新发送。
“15”--异或校验字节。
3,如果设置的收件人地址ID是自己,所以在几秒之内,卫星就会转发信息给RD模块,然后RD模块就会输出语句给单片机,比如:$BDTXR,1,0242286,2,, A468656C6C6FB1B1B6B7*46\r\n
“BDTXR”—通信回复指令。
“1”—1表示普通通信(不重要)
“0242286”—发信人地址ID
“2”—2表示电文形式是混合传输,1表示代码传输,0表示汉字传输
“A4……”—电文内容
“1F”--异或校验字节。
如果发送端是用代码编码,那么接收端收到后输出的语句也是代码编码格式:
$BDTXR,1,0242286,1,, 68656C6C6FB1B1B6B7*10\r\n
4、用户使用北斗短报文发送信息时,内容既可以是英文数字,也可以是汉字,还可以是16进制数。
最多可以发送78个进制数/英文/数字,或者39个汉字。
五、获取当前时间
RDSS能获取时间,是因为北斗短报文卫星一直在向地面广播信号和时间。所以获取时间和获取信号一样,都不会占用北斗短报文的发送频度。
1,使用单片机往RD模块发送这条语句:$CCRMO,ZDA,2,0*21\r\n
“CCRMO”--指令关键字。
“ZDA”--默认参数(不重要)
“2”--打开指定语句(不重要)
“0”--语句的输出频度。0表示只输出1次。1表示每隔1秒输出1次。
“21”--异或校验字节。
2,RD模块回复给单片机,比如 :$BDZDA,1,005407.00,29,09,2019,-8,00,0,0,Y*04\r\n
“BDZDA”--指令关键字。
“1”--模式指示。1是RDSS定时结果,2是RNSS定时结果
“005407.00”--UTC时间
“29”--日
“09”--月
“2019”--年
“-8”--时区。通常以负值表示东经,靠近国际日更线的地区除外。所以-8表示东8区
“00”--本时区分钟差(不重要)
“0”—定时修正值(不重要)
“0”—精度指示。0是未检测,1是0-10纳秒,2是20-20纳秒,3是大于20纳秒
“Y”—Y是信号锁定,N是信号未锁定。
“04”—异或校验字节