Radar CAT062 1.18 报文协议解析
简介/声明 Radar 雷达,源于radio detection and ranging的缩写,意思为”无线电探测和测距”,即用无线电的方法发现目标并测定它们的空间位置。因此,雷达也被称为“无线电定位”。雷达是利用电磁波探测目标的电子设备。雷达发射电磁波对目标进行照射并接收其回波,由此获得目标至电磁波发射点的距离、距离变化率(径向速度)、方位、高度等信息。
解析文档均为欧洲航空交通管理 官方提供。
参考资料 EuroControl :cat062p9ed118.pdf
解析数据 1 3E0034BB7D25040203000E584F003806E501460641FD2601B70D4A000D33B3C37E2080780CCB000601000550000028002A003E04
数据格式
CAT = 062
LEN
FSPEC
Items of the first record
解析报文区域数据
16进制代码
解析值(二进制或十进制)
备注
0x3E
62
报文头,转换十进制为62
0x00
00
报文长度起始位
0x34
52
报文长度 LEN,为报文数据字节数
0xBB
10111011
I062/010、I062/015、I062/070、I062/105、I062/185
0x7D
01111101
I062/060、I062/245、I062/380、I062/040、I062/080
0x25
00100101
I062/136、I062/220、
0x04
00000100
I062/500
02
2
03
3
I062/010
00
0
I062/015
0E
14
58
88
4F
79
I062/070 日时间项
00
0
38
56
06
6
E5
229
01
1
46
70
06
6
41
65
I062/105 经纬度坐标
FD
253
26
38
01
1
B7
183
I062/185
0D
13
4A
74
I062/060
00
0
0D
13
33
51
B3
179
C3
195
7E
126
20
32
I062/245 目标识别
80
128
I062/380
78
120
0C
12
I062/040
CB
203
00
0
I062/080
06
6
01
1
I062/136
00
0
05
5
I062/220
50
80
I062/500
00
00
28
00
2A
00
3E
04
代码(部分解析可参考Cat020)
I062/070 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public static string I062_070 (byte [] byteData ) { uint rhs = ((uint )byteData[0 ] << 16 ) + ((uint )byteData[1 ] << 8 ) + byteData[2 ]; uint value0 = rhs / 128 ; uint value1 = value0 / 3600 ; uint value2 = (value0 - value1 * 3600 ) / 60 ; uint value3 = (value0 - value1 * 3600 ) % 60 ; uint value4 = ((rhs % 128 ) * 1000 ) / 128 ; return $"{DateTime.Now.ToShortDateString()} {value1} :{value2} :{value3} .{value4} " ; }
I062/245 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 public static string I062_245 (byte [] byteData ) { string str = "" ; for (int i = 1 ; i < byteData.Length; i++) { str += Convert.ToString(byteData[i], 2 ).PadLeft(8 , '0' ); } char [] strCharArray = str.ToCharArray(); string flno2BinaryStr = "" ; string result = "" ; for (int i = 0 ; i < strCharArray.Length; i++) { flno2BinaryStr += strCharArray[i] + "" ; if ((i + 1 ) % 6 == 0 ) { string flightNumberValue = Constants.flightNumberMap[flno2BinaryStr]; if (!string .IsNullOrEmpty(flightNumberValue)) { result += flightNumberValue; } flno2BinaryStr = "" ; } } return result; }
I062/105 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public static double [] I062_105 (byte [] byteData ) { double [] relDataArray = new double [2 ]; if (byteData.Length == 8 ) { string xCoordinate10 = byteData[0 ].ToString("X2" ) + byteData[1 ].ToString("X2" ) + byteData[2 ].ToString("X2" ) + byteData[3 ].ToString("X2" ); string yCoordinate10 = byteData[4 ].ToString("X2" ) + byteData[5 ].ToString("X2" ) + byteData[6 ].ToString("X2" ) + byteData[7 ].ToString("X2" ); relDataArray[0 ] = double .Parse(Convert.ToInt32(xCoordinate10, 16 ).ToString()) * 180 / Math.Pow(2 , 25 ); relDataArray[1 ] = double .Parse(Convert.ToInt32(yCoordinate10, 16 ).ToString()) * 180 / Math.Pow(2 , 25 ); return relDataArray; } return null ; }
I062/100 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public static double [] I062_100 (byte [] byteData ) { double [] relDataArray = new double [2 ]; if (byteData.Length == 6 ) { string xAngle16 = byteData[0 ].ToString("X2" ) + byteData[1 ].ToString("X2" ) + byteData[2 ].ToString("X2" ); string yAngle16 = byteData[3 ].ToString("X2" ) + byteData[4 ].ToString("X2" ) + byteData[5 ].ToString("X2" ); string xAngle10 = Convert.ToInt32(xAngle16, 16 ).ToString(); string yAngle10 = Convert.ToInt32(yAngle16, 16 ).ToString(); relDataArray[0 ] = double .Parse(xAngle10) * 0.5 ; relDataArray[1 ] = double .Parse(yAngle10) * 0.5 ; return relDataArray; } return null ; }