| |
We calculate a Status Message length for a well equipped Unmanned Aircraft with:
-
three engines
-
three battery units
-
one generator
-
five Power Supply Units
-
four altimeters (3 ultrasonic + 1 LIDAR)
-
five communication systems (3 VHF + 1 satellite modem + 1 GSM modem)
-
a Sense and Avoid system
-
four cameras
|
BLOCK 0
|
|
section
|
Bytes
|
|
|
Preamble = 55:55:55:55:55:55:0F:0F
consisting of:
6 x NULL_0101
NULL_0101 = 01010101 = HEX 55
2 x Preamble_0
Preamble_0 = 00001111 = HEX 0F
|
8
|
90 Bytes
BLOCK 0 has a checksum, but is not FEC encoded
|
|
padding with n x NULL_0101
|
34
|
|
Payload
|
44
|
|
BLOCK 0 checksum
|
4
|
|
BLOCK 1
|
|
section
|
Bytes
|
|
|
padding with NULL_0101
NULL_0101 = HEX 55 = 0101 0101
|
0
|
223 Bytes
BLOCK 1 is FEC encoded
223 B goes to 255 B FEC
|
|
Header
|
28
|
|
Power
|
54
|
|
GPS
|
67
|
|
Warnings
|
15
|
|
Communications systems
|
59
|
|
BLOCK 2
|
|
|
|
section
|
Bytes
|
|
|
padding with NULL_0101
NULL_0101 = HEX 55 = 0101 0101
|
2
|
223 Bytes
BLOCK 2 is FEC encoded
223 B goes to 255 B FEC
|
|
IMU
|
52
|
|
FCU
|
105
|
|
Sense and Avoid system
|
58
|
|
End_Of_String
|
1
|
Compatibility with STANAG 4586
"The length shall be a 32-bit unsigned integer of the number of bytes in
the “Message Data”. The length shall be
any number between 1 and 538.
Note the UDP protocol under IPv4 has a guaranteed minimum datagram size
of 576 bytes that must be supported by all implementations. Subtracting the IPv4 header size of 20 bytes
and the UDP header size of 8 bytes, leaves 548 bytes as the maximum amount data
that can be sent in a datagram that will guarantee interoperability. Therefore, no message or multi-message datagram
shall exceed this data limit.
Subtracting the message wrapper size of 24 bytes, gives 524 bytes as the
maximum message length of a single message with no room for another message in
the datagram. Extra care should be taken
when packing multiple messages in the same datagram." - STANAG 4586
One can comply with the message size recommended in STANAG 4586 by sending the BLOCK 0 data (90 Bytes) in one datagram, and the BLOCK 1 + BLOCK 2 data (510 Bytes) in a second datagram. Both BLOCK 0 and BLOCK1 contain the same message number, so the Ground Control Station can correctly reunite the data on receipt of the two datagrams.
return to top
Status Message keywords
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1:B2:B3:B4
|
|
00
|
End_Of_String
|
0
|
Reserved for use at the end of the BLOCK 2 section.
|
|
01
|
BEGIN
|
1
|
beginning of section; B1 = section ID (shown next)
|
|
00 = HEADER (message header data: message_ID,...)
01 = IMU (Inertial Measurement Unit)
02 = FCU (Flight Control Unit)
03 = POWER (electrical power supplies monitoring)
04 = WARNINGS (warning flags: ON, OFF)
05 = COMMS (status of comms systems; BER, RSSI)
06 = PAYLOAD (any warnings from payload)
07 = GPS (GPS data, received each second)
08 = SENSE (from Sense and Avoid system, if fitted)
09 = engine
0A = flaps
0B = altimeter
0C = FCU_general
0D = battery
0E = PSU
0F = comms_system
10 = GPS_satellite
11 = air_object
12 = camera
13 = generator
|
|
02
|
END
|
0
|
end of section
|
|
03
|
ID_msg
|
3
|
16,777,216 unique message IDs
sufficient for 194 day (each 24 hours) UA flight
|
|
04
|
ID_UA_source
|
4
|
B1:B2 = country code = the International Telephone Dialling Code, where the largest number = 1929 (the North American Numbering Plan) for Puerto Rico.
In STANAG 4586 a single Byte country code is used for NATO and "friendly" countries: no codes for others!
B3:B4 = 65,536 unique IDs
|
|
05
|
time_UTC
|
3
|
hhmmss with hh using 24 hour UTC GPS clock
eg: 231205 = 23h:12:05 = 5 seconds past 11:12 pm
|
|
06
|
date_UTC
|
3
|
Format is yymmdd
example 080117 = 17 JAN 2008
|
|
07
|
ID_BLK12_format
|
2
|
B1 = BLOCK 1 format ID from 0 to 255
B2 = BLOCK 2 format ID from 0 to 255
|
|
08
|
ID_GCS_destination
|
4
|
B1:B2 = country code = the International Telephone Dialling Code, where the largest number = 1929 (the North American Numbering Plan) for Puerto Rico.
B3:B4 = 65,536 unique IDs
|
|
09
|
ID_GCS_backup
|
4
|
B1:B2 = country code = the International Telephone Dialling Code, where the largest number = 1929 (the North American Numbering Plan) for Puerto Rico.
B3:B4 = 65,536 unique IDs
|
|
0A - 0E
|
unused
|
|
5 Item_ID Bytes reserved for future use.
|
|
0F
|
Preamble_0
|
0
|
Used in the Preamble
HEX 0F = BIN 0000 1111
|
Example
|
text format
|
binary format
|
|
BEGIN HEADER
|
01:00 (not included)
|
|
ID_msg
|
ID_msg 133
|
03:00:00:85
|
|
ID_UA_source
|
ID_UA_source GB_133
|
04:2C:00:00:85
|
|
time_UTC
|
time_UTC 16:35:23
|
05:02:7E:C3
|
|
date_UTC
|
date_UTC 071114
|
06:01:15:CA
|
|
ID_BLK12_format
|
ID_BLK12_format 5 15
|
07:05:0F
|
|
ID_GCS_destination
|
ID_GCS_destination
|
08:2C:76:12:46
|
|
ID_GCS_backup
|
ID_GCS_backup
|
09:2C:A1:23:77
|
|
END
|
02 (not included)
|
Note that the BEGIN HEADER and the END Item_IDs are not included to save message length.
return to top
IMU section
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1:B2:B3
|
|
10
|
IMU_gyro_x
|
3
|
0 to +/- 8,388,607 millidegrees / sec in B1:B2:B3 format
|
|
11
|
IMU_gyro_y
|
3
|
0 to +/- 8,388,607 millidegrees / sec in B1:B2:B3 format
|
|
12
|
IMU_gyro_z
|
3
|
0 to +/- 8,388,607 millidegrees / sec in B1:B2:B3 format
|
|
13
|
IMU_accel_AVG_x
|
3
|
0 to +/- 8,388,607 ug in B1:B2:B3 format (g = 9.8m/s2)
|
|
14
|
IMU_accel_AVG_y
|
3
|
0 to +/- 8,388,607 ug in B1:B2:B3 format (g = 9.8m/s2)
|
|
15
|
IMU_accel_AVG_z
|
3
|
0 to +/- 8,388,607 ug in B1:B2:B3 format (g = 9.8m/s2)
|
|
16
|
IMU_mag_x
|
3
|
0 +/- 8,388,607 nT in B1:B2:B3 format
Earth's magnetic field strength = 48,489 nT
|
|
17
|
IMU_mag_y
|
3
|
0 to +/- 8,388,607 nT in B1:B2:B3 frmat
|
|
18
|
IMU_mag_z
|
3
|
0 to +/- 8,388,607 nT in B1:B2:B3 format
|
|
19
|
IMU_inclin_x
|
2
|
0 to +/- 32,767 millidegrees in B1:B2 format
This is the "angle-of-attack".
|
|
1A
|
IMU_inclin_y
|
2
|
0 to +/- 32,767 millidegrees in B1:B2 format
This is the "horizontal situation indicator".
|
|
1B
|
IMU_temp
|
2
|
IMU_temp = B1:B2 / 100 in degrees Centigrade
B1B2 / 100 = 0 to 655.35 degrees Centigrade
|
|
1C
|
IMU_AMP_vib_x
|
3
|
0 to 16,777,215 ug in B1:B2:B3 format (g = 9.8m/s2)
vibration amplitude of largest peak in spectrum (not f=0)
|
|
1D
|
IMU_FREQ_vib_x
|
3
|
0 to 16,777,215 milliHz in B1:B2:B3 format
vibration frequency of largest peak in spectrum (not f=0)
suitable for engine related vibrations to 1,006,632 rpm
|
|
1E
|
IMU_AMP_vib_y
|
3
|
0 to 16,777,215 ug in B1:B2:B3 format (g = 9.8m/s2)
|
|
1F
|
IMU_FREQ_vib_y
|
3
|
0 to 16,777,215 milliHz in B1:B2:B3 format
|
|
20
|
IMU_AMP_vib_z
|
3
|
0 to 16,777,215 ug in B1:B2:B3 format (g = 9.8m/s2)
|
|
21
|
IMU_FREQ_vib_z
|
3
|
0 to 16,777,215 milliHz in B1:B2:B3 format
|
|
22 - 2E
|
unused
|
|
13 Item_ID Bytes reserved for future use.
|
|
2F
|
IMU_fault
|
1
|
B1 = 0 to 255
if B1 = 0 no fault is reported from the IMU
if B1 = 1 to 255, fault number B1 was reported by IMU
|
Example
|
text format
|
binary format
|
|
BEGIN IMU
|
01:01 (not included)
|
|
IMU Item_IDs
|
52 Bytes
|
|
END
|
02 (not included)
|
return to top
FCU section
FCU section: engine
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1:B2:B3:B4
|
|
30
|
eng_ID
|
1
|
0 to 255
|
|
31
|
eng_prop_pitch
|
2
|
0 to 255
0 = one extreme
255 = the other extreme
|
|
32
|
eng_speed_ACT
|
2
|
engine_speed = B1:B2 * 10
B1:B2 * 10 = 0 to 655,350 rpm
|
|
33
|
eng_carb_SET
|
1
|
0 to 255 where 255 = max setting
|
|
34
|
eng_TEMP
|
2
|
temp = B1:B2 / 100 degrees Centigrade
B1:B2 / 100 = 0 to 655.35 degrees Centigrade
|
|
35
|
eng_TEMP_exhaust
|
2
|
temp = B1:B2 / 100 degrees Centigrade
B1:B2 / 100 = 0 to 655.35 degrees Centigrade
|
|
36
|
eng_flow_rate_fuel
|
2
|
16 bit value from ADC in arbitrary units
|
|
37
|
eng_AMP_vib
|
3
|
0 to 16,777,215 ug in B1:B2:B3 format (g = 9.8m/s2)
vibration amplitude of largest peak in spectrum (not f=0)
|
|
38 - 3F
|
unused
|
|
8 Item_ID Bytes reserved for future use
|
FCU engine binary message section length = 15 Bytes per engine
FCU section: flaps
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1
|
|
40
|
F_aileron_LHS_set
|
1
|
0 to +/- 127 degrees
|
|
41
|
F_aileron_LHS_act
|
1
|
0 to +/- 127 degrees
|
|
42
|
F_aileron_RHS_set
|
1
|
0 to +/- 127 degrees
|
|
43
|
F_aileron_RHS_act
|
1
|
0 to +/- 127 degrees
|
|
44
|
F_lift_LHS_set
|
1
|
0 to +/- 127 degrees
|
|
45
|
F_lift_LHS_actual
|
1
|
0 to +/- 127 degrees
|
|
46
|
F_lift_RHS_set
|
1
|
0 to +/- 127 degrees
|
|
47
|
F_lift_RHS_actual
|
1
|
0 to +/- 127 degrees
|
|
48
|
F_rudder_set
|
1
|
0 to +/- 127 degrees
|
|
49
|
F_rudder_actual
|
1
|
0 to +/- 127 degrees
|
|
4A
|
F_elev_LHS_set
|
1
|
0 to +/- 127 degrees
|
|
4B
|
F_elev_LHS_actual
|
1
|
0 to +/- 127 degrees
|
|
4C
|
F_elev_RHS_set
|
1
|
0 to +/- 127 degrees
|
|
4D
|
3_elev_RHS_actual
|
1
|
0 to +/- 127 degrees
|
|
4E
|
F_airbrake_LHS_set
|
1
|
0 to +/- 127 degrees
|
|
4F
|
F_airbrake_LHS_act
|
1
|
0 to +/- 127 degrees
|
|
50
|
F_airbrake_RHS_set
|
1
|
0 to +/- 127 degrees
|
|
51
|
F_airbrake_RHS_act
|
1
|
0 to +/- 127 degrees
|
|
52 - 54
|
reserved
|
|
2 Item_ID Bytes reserved for future use
|
|
55
|
NULL_0101
|
0
|
This is a NULL command used to pad out BLOCKs
HEX 55 = BIN 0101 0101
The complimentary command is AA = NULL_1010
|
|
56 - 5F
|
unused
|
|
10 Item_ID Bytes reserved for future use
|
FCU flaps binary message section length = 18 Bytes
FCU section: general
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1:B2:B3:B4:B5
|
|
60
|
FCU_pressure_BARO
|
3
|
0 to 16,777,215 Pa
zero altitude = 101,325 Pa
|
|
61
|
FCU_speed_air_pitot
|
2
|
0 to 65,535 cm/s (= 2,359 kph = 1,466 mph)
|
|
62
|
FCU_fuel_1
|
2
|
0 to 65,535 millilitres (cc)
|
|
63
|
FCU_fuel_2
|
2
|
0 to 65,535 millilitres (cc)
|
|
64
|
FCU_fuel_3
|
2
|
0 to 65,535 millilitres (cc)
|
|
65
|
FCU_direction_wind
|
2
|
0 to 359 degrees: NORTH is 0 degrees
|
|
66
|
FCU_speed_wind
|
1
|
0 to 255 kph (= 158 mph)
|
|
67
|
FCU_height_AGL_ALT
|
4
|
B1 = altimeter_type
where U = ultrasonic; L = LIDAR; M = microwave
B2 = altimeter_ID from 0 to 255
B3:B4:B5 = 0 to 16,777,215 mm (16.7 km = FL550)
|
|
68
|
FCU_dx_OpFlow
|
2
|
0 to 65,535 cm (655 m/s = 2,359 kph = 1,465 mph)
|
|
69
|
FCU_dy_OpFlow
|
2
|
0 to 65,535 cm (655 m/s = 2,359 kph = 1,465 mph)
|
|
6A
|
FCU_dPITCH_OpFlow
|
2
|
0 to +/- 32,767 millidegrees
|
|
6B
|
FCU_dROLL_OpFlow
|
2
|
0 to +/- 32,767 millidegrees
|
|
6C
|
FCU_light_ambient
| |