|
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
|
|
BLOCK 1 for Unmanned Aircraft remote control
|
|
section
|
Bytes
|
|
padding with
NULL_0101
NULL_0101
= HEX 55 = 0101 0101
|
107
|
|
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
|
|
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
|
-
BLOCK 0 consists of a preamble section only
-
BLOCK 1 is FEC encoded to 255 Bytes, as is BLOCK 2, using Reed Solomon
RS(255,223) coding.
-
If the data in BLOCK 1 or in BLOCK 2 is less than 233 Bytes,
then the data is padded with
NULL_0101
to 233 Bytes.
NULL_0101
= 0101 0101, i.e. an alternating sequence of ONEs and ZEROs.
-
BLOCK 1 and 2 data may be encrypted using an algorithm that does not increase
the message size. Any encryption is performed prior to FEC encoding.
-
BLOCK 0 + FEC encoded BLOCK 1 + FEC encoded BLOCK 2 = 600 Bytes = 4,800 bits.
-
This Remote Control Message is BYTE multiplexed with the 4,800 bps digitised
voice channel to end up with a 9,600 bps digital data signal that can be
transmitted via a satellite phone modem.
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.
-
HEADER binary message section length = 20 Bytes
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_0
B1_1
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)
|
-
FCU binary message section length = 10 + 7 + 1 = 18 Bytes for a 3 engined
Unmanned Aircraft
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
|
|
B
2
_0
B2_0
B2_1
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
B2_7
= 1 1 = IGNORE: data corruption
|
|
B1
setting_value
|
name
|
Value
Bytes
|
comments on B2
|
|
71
|
lights_wing_RHS
|
1
|
B2 = B2_0 B2_1 B2_2 B2_3 B2_4 B2_5 B2_6 B2_7
|
|
B2
_0
B2_0
B2_1
B2_0
B2_1
= 1 0 =
lights_wing_RHS
= ON
B2_0
B2_1
= 1 1 = IGNORE: data corruption
|
|
lights_wing_LHS
|
B2_2
B2_3
= 0 0 = IGNORE: data corruption
B2_2
B2_3
= 0 1 =
lights_wing_LHS = OFF
B2_2
B2_3
= 1 0 =
lights_wing_LHS = ON
B2_2
B2_3
= 1 1 = IGNORE: data corruption
|
|
lights_TAIL
|
B2_4
B2_5
= 0 0 = IGNORE: data corruption
B2_4
B2_5
= 0 1 =
lights_TAIL = OFF
B2_4
B2_5
= 1 0 =
lights_TAIL = ON
B2_4
B2_5
= 1 1 = IGNORE: data corruption
|
|
wheel_brake
|
B2_6
B2_7
= 0 0 = IGNORE: data corruption
B2_6
B2_7
= 0 1 =
wheel_brake = OFF
B2_6
B2_7
= 1 0 =
wheel_brake = ON
B2_6
B2_7
= 1 1 = IGNORE: data corruption
|
|
B1
setting_value
|
name
|
Value
Bytes
|
comments on B2
|
|
72
|
lights_wing_RHS
|
1
|
B2 = B2_0 B2_1 B2_2 B2_3 B2_4 B2_5 B2_6 B2_7
|
|
B
2
_0
B2_0
B2_1
B2_0
B2_1
= 1 0 =
lights_wing_RHS
= ON
B2_0
B2_1
= 1 1 = IGNORE: data corruption
|
|
lights_wing_LHS
|
B2_2
B2_3
= 0 0 = IGNORE: data corruption
B2_2
B2_3
= 0 1 =
lights_wing_LHS = OFF
B2_2
B2_3
= 1 0 =
lights_wing_LHS = ON
B2_2
B2_3
= 1 1 = IGNORE: data corruption
|
|
lights_TAIL
|
B2_4
B2_5
= 0 0 = IGNORE: data corruption
B2_4
B2_5
= 0 1 =
lights_TAIL = OFF
B2_4
B2_5
= 1 0 =
lights_TAIL = ON
B2_4
B2_5
= 1 1 = IGNORE: data corruption
|
|
wheel_brake
|
B2_6
B2_7
= 0 0 = IGNORE: data corruption
B2_6
B2_7
= 0 1 =
wheel_brake = OFF
B2_6
B2_7
= 1 0 =
wheel_brake = ON
B2_6
B2_7
= 1 1 = IGNORE: data corruption
|
|
73 - 7F
|
unused
|
|
12 Item_ID Bytes reserved for future use
|
Example
|
Syntax
|
comments
|
|
BEGIN SETTINGS
|
01:04 (not included)
|
|
settings Settings_ID setting_value
|
80:70:57
|
|
settings Settings_ID setting_value
|
80:71:93
|
|
settings Settings_ID setting_value
|
80:72:AC
|
|
END
|
02 (not included)
|
-
SETTINGS binary message section length = 9 Bytes
return to top
Communication systems
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments B1:B2:B3:B4
|
|
80
|
receiver_control
|
1
|
B1_0
B1_0
B1_1
B1_0
B1_1
= 1 0 = receiver set ON
B1_0
B1_1
= 1 1 = IGNORE: data corruption
|
|
transmitter_control
|
B1_2
B1_3
= 0 0 = IGNORE: data corruption
B1_2
B1_3
= 0 1 = transmitter set OFF
B1_2
B1_3
= 1 0 = transmitter set ON
B1_2
B1_3
= 1 1 = IGNORE: data corruption
|
|
81
|
system_ID
|
8
|
eight ASCII characters
|
|
82
|
Rx_freq
|
4
|
0 to 4,294,967,295 kHz
for VHF comms
|
|
83
|
Tx_freq
|
4
|
0 to 4,294,967,295 kHz
for VHF comms
|
|
84
|
Tx_OP_power
|
1
|
0 to 255 dBm
for VHF comms
|
|
85 - 8F
|
unused
|
|
11 Item_ID Bytes reserved for future use
|
Example
|
text format
|
binary format
|
|
BEGIN COMMS
|
01:05 (not included)
|
|
BEGIN comms_system
|
01:0F (not included)
|
18 Bytes / VHF transceiver
|
|
comms_system Item_IDs
|
18 Bytes = VHF TxRx
|
|
END
|
02 (not included)
|
|
END
|
02 (not included)
|
-
Three VHF comms systems would require 3 x 18 = 54 Bytes
return to top
Reserved_1 for future use
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments B1:B2:B3:B4
|
|
90 - 9F
|
unused
|
|
16 Item_ID Bytes reserved for future use
|
|
A0 - A9
|
unused
|
|
16 Item_ID Bytes reserved for future use
|
|
AA
|
Preamble_1
|
0
|
Reserved for use in the Preamble
HEX AA = BIN 1010 1010
|
|
AB - AF
|
unused
|
|
14 Item_ID Bytes reserved for future use
|
return to top
S+A System
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments B1:B2:B3:B4
|
|
B0
|
SA_zoom_LHS_cam
|
1
|
0 - 255
0 = minimum zoom
255 = maximum zoom
|
|
B1
|
SA_zoom_FWD_cam
|
1
|
0 - 255
0 = minimum zoom
255 = maximum zoom
|
|
B2
|
SA_zoom_RHS_cam
|
1
|
0 - 255
0 = minimum zoom
255 = maximum zoom
|
|
B3 - BF
|
unused
|
|
13 Item_ID Bytes reserved for future use
|
Example
|
text format
|
binary format
|
|
BEGIN SENSE
|
01:08 (not included)
|
|
SA_zoom_LHS_cam 35
|
B0:23
|
|
SA_zoom_FWD_cam 105
|
B1:69
|
|
SA_zoom_RHS_cam 35
|
B2:23
|
|
END
|
02 (not included)
|
The cameras are assumed to be of the auto-focus type.
-
1 camera looking to the left of centre
-
1 camera looking straight ahead
-
1 camera looking to the right of centre
return to top
PAYLOAD system
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments B1:B2:B3:B4
|
|
C0
|
cam_ID
|
4
|
B1:B2:B3 = Char_1:Char_2:Char_3, eg. NIK (for Nikon)
B4 = 0 to 255 = camera ID number
|
|
C1
|
cam_mag_compass
|
2
|
degrees = B1:B2 / 100
B1:B2 = 0 to 655.35 degrees
only 0 to 359.99 degrees used
|
|
C2
|
cam_elev
|
2
|
elev = B1:B2 / 100
B1:B2 / 100 = 0 to +/- 327.67 degrees
|
|
C3
|
cam_zoom_set
|
1
|
0 to 255 in arbitrary units, where:
0 = minimum zoom
255 = maximum zoom
|
|
C4
|
take_one_photo
|
1
|
B1_0
B1_0
B1_1
B1_0
B1_1
= 1 0 = take one photograph
B1_0
B1_1
= 1 1 = IGNORE: data corruption
|
|
C5
|
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
|
|
C6
|
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
|
|
C7 - CF
|
unused
|
|
14 Item_ID Bytes reserved for future use
|
Example
|
text format
|
binary format
|
|
BEGIN PAYLOAD
|
01:06 (not included)
|
|
BEGIN camera
|
01:12 (not included)
|
6 Bytes
|
|
camera Item_IDs
|
6 Bytes
|
|
END
|
02 (not included)
|
|
END
|
02 (not included)
|
The cameras are assumed to support auto-focus: hence no need to report on focus
setting.
2 cameras would require 2 x 6 Bytes = 12 Bytes
return to top
Reserved_2 for future use
|
B0 HEX
Item_ID
|
name
|
Value
Bytes
|
comments B1:B2:B3:B4
|
|
D0 - DF
|
unused
|
|
16 Item_ID Bytes reserved for future use
|
|
E0 - EF
|
unused
|
|
16 Item_ID Bytes reserved for future use
|
|
F0
|
Preamble_1
|
0
|
Used in the Preamble
HEX F0 = BIN 1111 0000
|
|
F1 - FE
|
unused
|
|
14 Item_ID Bytes reserved for future use
|
|
FF
|
Do not use.
|
|
Reserved for compatibility with STANAG 4586.
|
return to top
|