|
|
|
|
unmanned air ...
|
|
reference
|
|
Unmanned Aircraft Remote Control Message syntax
In this section, we detail a binary Unmanned Aircraft Remote Control Message Syntax that is only 600 bytes in size. This 4,800 bit message can be BYTE multiplexed at a rate of 1 message per second with 4,800 bps CELP encoded digitised GCS staff voice. The GCS staff voice together with one remote control message per second can be transmitted using the modem capability of an inexpensive satellite phone.
|
|
|
| |
We calculate a Remote Control Message length for a well equipped Unmanned Aircraft with:
-
three engines
-
three VHF communication systems
-
a Sense and Avoid system
-
two payload cameras
|
BLOCK 0 = preamble
|
|
section
|
Bytes
|
|
|
Preamble = 55:55:...:55:0F:0F
consisting of:
88 x NULL_0101
NULL_0101 = 01010101 = HEX 55
2 x Preamble_0
Preamble_0 = 00001111 = HEX 0F
|
90
|
90 Bytes
|
|
BLOCK 1 for Unmanned Aircraft remote control
|
|
section
|
Bytes
|
|
|
padding with NULL_0101
NULL_0101 = HEX 55 = 0101 0101
|
107
|
223 Bytes
BLOCK 1 is FEC encoded
223 B goes to 255 B FEC
|
|
Header
|
20
|
|
FCU
|
18
|
|
Settings
|
9
|
|
Communications systems
|
54
|
|
Sense and Avoid system
|
3
|
|
Payload
|
12
|
|
BLOCK 2 for flight plan update data
|
|
section
|
Bytes
|
|
|
Number of data Bytes = x = 0 to 255
|
1
|
223 Bytes
BLOCK 2 is FEC encoded
223 B goes to 255 B FEC
|
|
flight_plan_ID
|
4
|
|
flight_plan_section_ID
|
2
|
|
flight plan update data: x Bytes
|
x
|
|
padding with NULL_0101
NULL_0101 = HEX 55 = 0101 0101
|
233 - x - 8
|
|
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 only sending the BLOCK 1 + BLOCK 2 data (510 Bytes) in a single datagram.
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 = FCU (Flight Control Unit)
02 = SETTINGS (settings: ON, OFF)
03 = COMMS (comms systems control)
04 = SENSE (Sense and Avoid camera control)
05 = PAYLOAD (payload control)
06 = engine
07 = flaps
08 = FCU_general
09 = comms_system
0A = camera
|
|
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
|
1
|
Used in the Preamble
HEX 0F = BIN 0000 1111
|
Example
|
text format
|
binary format
|
|
BEGIN HEADER
|
01:00 (not included)
|
|
ID_msg
|
ID_msg133
|
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
|
|
ID_GCS_backup
|
ID_GCS_backup
|
09:2C:A1:23
|
|
END
|
02 (not included)
|
|
03:00:00:85:04:2C:00:00:85:05:02:7E:C3:06:01:15:CA:07:05:0F:08:2C:76:12:09:2C:A1:23
|
Note that the BEGIN HEADER and the END Item_IDs are not included to save message length.
return to top
FCU section
FCU section: engines

|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1:B2:B3:B4
|
|
30
|
eng_status
|
1
|
B1 = B1_0 B1_1 B1_2 B1_3 B1_4 B1_5 B1_6 B1_7
|
|
B1_0 B1_1 = 0 0 = data corruption
B1_0 B1_1 = 0 1 = AUTO control by UA FCU = ON
B1_0 B1_1 = 1 0 = for remote control from GCS ON
B1_0 B1_1 = 1 1 = use Radio Control transmitter
|
|
B1_2 B1_3 = 0 0 = data corruption
B1_2 B1_3 = 0 1 = no slave eng
B1_2 B1_3 = 1 0 = for master eng 1 + slave eng 3 = ON
B1_2 B1_3 = 1 1 = data corruption
|
|
31
|
eng_ID
|
1
|
0 to 255
|
|
32
|
eng_prop_pitch
|
1
|
0 to 255
0 = one extreme
255 = the other extreme
|
|
33
|
eng_carb_SET
|
1
|
0 to 255
0 = one extreme
255 = the other extreme
|
|
34 - 3F
|
unused
|
|
12 Item_ID Bytes reserved for future use
|
FCU engine binary message section length = 1 + 3 Bytes per engine
FCU section: flaps

|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1
|
|
40
|
FLAP_status
|
1
|
B1 = B1_0 B1_1 B1_2 B1_3 B1_4 B1_5 B1_6 B1_7
|
|
B1_0 B1_1 = 0 0 = IGNORE: data corruption
B1_0 B1_1 = 0 1 = AUTO control by UA FCU = ON
B1_0 B1_1 = 1 0 = for remote control from GCS ON
B1_0 B1_1 = 1 1 = use Radio Control transmitter
|
|
B1_2 B1_3 = 0 0 = IGNORE: data corruption
B1_2 B1_3 = 0 1 = no slave aileron
B1_2 B1_3 = 1 0 = for master LH + slave RH = ON
B1_2 B1_3 = 1 1 = IGNORE: data corruption
|
|
41
|
F_aileron_LHS_set
|
1
|
0 to +/- 127 degrees
|
|
42
|
F_aileron_RHS_set
|
1
|
0 to +/- 127 degrees
|
|
43
|
F_lift_set
|
1
|
0 to +/- 127 degrees
|
|
44
|
F_rudder_set
|
1
|
0 to +/- 127 degrees
|
|
45
|
F_elev_set
|
1
|
0 to +/- 127 degrees
|
|
46
|
F_airbrake_set
|
1
|
0 to +/- 127 degrees
|
|
47 - 4F
|
unused
|
|
9 Item_ID Bytes reserved for future use
|
FCU flaps binary message section length = 7 Bytes
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1
|
|
50 - 54
|
unused
|
|
5 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 section: general

|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments on B1:B2:B3:B4:B5
|
|
60
|
ENABLE_fuel_dump
|
1
|
B1 = B1_0 B1_1 B1_2 B1_3 B1_4 B1_5 B1_6 B1_7
|
|
B1_0 B1_1 = 0 0 = IGNORE: data corruption
B1_0 B1_1 = 0 1 = fuel dump facility DISABLED
B1_0 B1_1 = 1 0 = fuel dump facility ENABLED
B1_0 B1_1 = 1 1 = IGNORE: data corruption
|
|
DUMP_fuel_1
|
B1_2 B1_3 = 0 0 = IGNORE: data corruption
B1_2 B1_3 = 0 1 = NO dump of fuel in TANK 1
B1_2 B1_3 = 1 0 = DUMP fuel in TANK 1
B1_2 B1_3 = 1 1 = IGNORE: data corruption
|
|
DUMP_fuel_2
|
B1_4 B1_5 = 0 0 = IGNORE: data corruption
B1_4 B1_5 = 0 1 = NO dump of fuel in TANK 1
B1_4 B1_5 = 1 0 = DUMP fuel in TANK 1
B1_4 B1_5 = 1 1 = IGNORE: data corruption
|
|
DUMP_fuel_3
|
B1_6 B1_7 = 0 0 = IGNORE: data corruption
B1_6 B1_7 = 0 1 = NO dump of fuel in TANK 1
B1_6 B1_7 = 1 0 = DUMP fuel in TANK 1
B1_6 B1_7 = 1 1 = IGNORE: data corruption
|
|
61 - 6F
|
unused
|
|
15 Item_ID Bytes reserved for future use
|
FCU general binary message section length = 1 Byte
Example
|
text format
|
binary format
|
|
BEGIN FCU
|
01:02 (not included)
|
|
BEGIN engine
|
01:09 (not included)
|
3 Bytes per engine
|
|
FCU engine Item_IDs
|
3 Bytes per engine
|
|
END
|
02 (not included)
|
|
BEGIN flaps
|
01:0A (not included)
|
7 Bytes
|
|
FCU flaps Item_IDs
|
7 Bytes
|
|
END
|
02 (not included)
|
|
BEGIN FCU_general
|
01:0C (not included)
|
|
FCU general Item_IDs
|
1 Bytes for a four altimeter system
|
|
END
|
02 (not included)
|
|
END
|
02 (not included)
|
return to top
Settings

|
B1
setting_value
|
name
|
Value
Bytes
|
comments on B2
|
|
70
|
land_wheels_LHS
|
1
|
B2 = B2_0 B2_1 B2_2 B2_3 B2_4 B2_5 B2_6 B2_7
|
|
B2_0 B2_1 = 0 0 = IGNORE: data corruption
B2_0 B2_1 = 0 1 = land_wheel_LHS = OUT
B2_0 B2_1 = 1 0 = land_wheel_LHS = RETRACTED
B2_0 B2_1 = 1 1 = IGNORE: data corruption
|
|
land_wheels_RHS
|
B2_2 B2_3 = 0 0 = IGNORE: data corruption
B2_2 B2_3 = 0 1 = land_wheel_RHS = OUT
B2_2 B2_3 = 1 0 = land_wheel_RHS = RETRACTED
B2_2 B2_3 = 1 1 = IGNORE: data corruption
|
|
land_wheels_NOSE
|
B2_4 B2_5 = 0 0 = IGNORE: data corruption
B2_4 B2_5 = 0 1 = land_wheel_NOSE = OUT
B2_4 B2_5 = 1 0 = land_wheel_NOSE = RETRACTED
B2_4 B2_5 = 1 1 = IGNORE: data corruption
|
|
land_wheels_TAIL
|
B2_6 B2_7 = 0 0 = IGNORE: data corruption
B2_6 B2_7 = 0 1 = land_wheel_TAIL = OUT
B2_6 B2_7 = 1 0 = land_wheel_TAIL = RETRACTED
B2_6 | |