diff options
Diffstat (limited to 'www/AIVDM.adoc')
-rw-r--r-- | www/AIVDM.adoc | 5438 |
1 files changed, 5438 insertions, 0 deletions
diff --git a/www/AIVDM.adoc b/www/AIVDM.adoc new file mode 100644 index 00000000..e4eb929c --- /dev/null +++ b/www/AIVDM.adoc @@ -0,0 +1,5438 @@ += AIVDM/AIVDO protocol decoding = +:description: The AIVDM Marine AIS protocol demystified, for programmers. +:keywords: AIS, AIVDM, AIVDO, standard, protocol, Automatic Identification System +Eric S. Raymond <esr@thyrsus.com> +v1.52, Aug 2016 + +This document is mastered in asciidoc format. If you are reading it in HTML, +you can find the original at the GPSD project website + +// If you are reading the asciidoc master of this document, the +// occasional comments led with '//!' are hints for GPSD developer tools +// that use the table layouts to generate code. + +If you find this document useful - and especially if it helps you make +money - please contribute to maintaining it by supporting the author's +full-time open-source work through <<PATREON>>. Even a few dollars a +week can make a difference. + +== Introduction == + +This is a description of how to decode AIVDM/AIVDO sentences. It +collects and integrates information from publicly available sources +and is intended to assist developers of open-source software for +interpreting these messages. + +AIVDM/AIVDO sentences are emitted by receivers for AIS, the marine +Automatic Identification System. AIS transmitters are fitted to +vessels, navigation markers, and certain types of shore station. They +periodically squawk their position (and course, when applicable), using +TDMA (Time Division Multiple Access) technology similar to the way +cellphones do to avoid mutual interference. AIS receivers make this data +available for navigation, anti-collision systems, and other uses. + +The International Maritime Organization's (IMO) International +Convention for the Safety of Life at Sea (SOLAS) requires operating AIS +transmitters on all international cargo vessels of more than 300 tons +displacement, all cargo vessels of more than 500 tons displacement, +and all passenger vessels; see <<SOLAS>> for details. Individual +maritime nations may have stricter and more detailed rules: for those +obtaining in U.S. waters, see <<US-REQUIREMENTS>>. + +AIS receivers report ASCII data packets as a byte stream over serial +or USB lines, using the NMEA 0183 or NMEA 2000 data formats. The RS422 +variant of serial specified as a physical layer by NMEA 0183 is common +in marine navigation systems; there may be a "pilot plug" +<<PILOTPLUG>> which converts to USB. Alternatively, newer AIS +receivers may report directly over RS232 or USB. + +AIS packets have the introducer "!AIVDM" or "!AIVDO"; AIVDM packets +are reports from other ships and AIVDO packets are reports from your +own ship. + +A lengthy description of AIS, focusing on the goals and history of the +system, but not describing the data protocols in any detail, can be +found at <<AIS>>. + +== Standards == + +Multiple standards bear on the AIVDM/AIVDO format. This document +exists because assembling them into a complete picture is technically +difficult and was long impeded by legal barriers as well. + +ITU Recommendation M.1371, "Technical Characteristics for a Universal +Shipborne Automatic Identification System Using Time Division Multiple +Access" <<ITU1371>>, issued in 2001, first described the bit-level +format of AIS radio messages. This standard was proprietary and +expensive when issued. I did not have access to it or any of its +followup revisions while assembling versions of this document up to +1.29. + +ITU-R M.1371 was expanded and clarified by "IALA Technical +Clarifications on Recommendation ITU-R M.1371-1" <<IALA>>, which +is freely available. + +There have been three minor revisions of ITU-R M.1371 since it was +originally issued. These add interpretations to packet bitfields that +were previously marked "spare" and "regional reserved". ITU-R M.1371 +revision 4 became available for free download, apparently at some +point in early 2011, well after most of this document was assembled. + +The ASCII format for AIVDM/AIVDO representations of AIS radio messages +seems to have been set by IEC-PAS 61162-100, "Maritime navigation and +radiocommunication equipment and systems" <<IEC-PAS>>. It is +proprietary and I have not looked at it. Various public sources +indicate that it has been "harmonized" with some version of NMEA 0183, +which I also have not looked at because it too is proprietary and +expensive, and surrounded by rapacious attack lawyers. + +== Information Sources == + +Together, the IALA Technical Clarifications at <<IALA>> and the +Coast Guard's AIS pages at <<NAVCEN>> describe AIS message payloads +type 1-24 almost completely. Certain specialized binary messages of +types 6 and 8 defined by the International Maritime Organization are +described in <<IMO236>> and <<IMO289>>. The detail information on +payload formats in this document is mostly derived from these public +sources. + +Kurt Schwehr is a research scientist at the Center for Coastal and +Ocean Mapping at the University of New Hampshire. Much of his research +involves AIS. His work blog at <<Schwehr>> contains sample messages +and descriptions of AIS operation in the wild that shed light on +various obscure corners of the specification. He has explained the +otherwise undocumented Repeat Indicator field and USCG extended AIVDM +to me by email. He also communicated some critical information from +<<IEC-PAS>>, and supplied information about new messages and fields in +ITU-1371-3. + +Descriptions of messages 25 and 26 are based on AIS transceiver vendor +documentation was originally forwarded to me by a source wishing to +remain anonymous; I later checked them against ITU1371-4. Message +type 27 was described in ITU1371-4 and added here after that became a +freely available download. + +Should you set out to write a decoder using this document, you are +likely to find that one of your challenges is finding enough AIS +packet data to make an effective regression test -- especially if you +live out of line of sight of any ship traffic and would get nothing +from running an AIS receiver. Fortunately, various AIS sites offer +live feeds over the Internet that aggregate AIS streams from all over +the world. Some charge subscriptions; others offer time-delayed access +for free and charge for a real-time feed. Still others are pool sites; +you join by contributing your feed and receive all feeds. + +AIS Hub (<<AISHUB>>) is a free, public AIS feed pool. It provides +exchange of AIS data in raw NMEA format; all AISHub members share +their own received AIS data and receive the merged feed from all other +participating parties. It is open-source friendly, offering a Linux +port in source of its software for collecting and forwarding AIS +data. Peter Stoyanov and the other AIS Hub principals have generously +donated a live feed to the GPSD project despite the fact that I live +60 miles inland and cannot send them anything interesting. + +Some of what this document explains about the quirks of real-world +encoders comes from examples provided by Kurt Schwehr. Other such +information, especially for the less common sentences, comes from +inspection of sentences forwarded to me from AIS Hub by various +interested parties, and more recently from AIS Hub itself. + +== Improving This Document == + +To avoid copyright difficulties, I rely only on freely redistributable +public documents and paraphrased reports from people who have seen the +relevant proprietary standards. If you are such a person, please help +by reporting the following to be included in future versions of this +document: + +* Sample sentences of types 16-17, 22-23, and 25-27. + +* Sample sentences of type 6 and 8 conforming to <<IMO236>>, + <<IMO289>>, and <<INLAND>>. + +For verification purposes, I need the raw sentences together with +decoded dumps of their field values. Please note that sample +sentences not accompanied by field dumps are *not* useful; I can get +plenty of those. + +== Open-Source Implementations == + +The GPSD project ships an AIVDM/AIVDO sentence decoder as part of the +daemon. This document was developed to be the specification for it, +and it will decode all sentence type described herein. + +The source-code repository of the GPSD project holds a conforming +standalone Python decoder, ais.py, that is not included in shipped +releases. It may be useful for developers working in that language. + +<<Schwehr>> includes links to a collection of Python scripts for +decoding and analyzing AIVDM sentences. Kurt Schwehr warns that this +is research code rather than a production tool. + +There is a http://gnuais.sourceforge.net/[GNU AIS] project at +SourceForge. It seems intended primarily to work directly +with AIS radios. + +http://www.maritec.co.za/aisvdmvdodecoding.php[The Maritec decoder] +looks to be pretty high-quality and can be exercised through a +public web form. This is a useful resource for anyone qualifying +an AIS decoder. + +== AIVDM/AIVDO Sentence Layer == + +AIVDM/AIVDO is a two-layer protocol. The outer layer is a variant of +NMEA 0183, the ancient standard for data interchange in marine +navigation systems; NMEA 0183 is described at <<NMEA>>. + +Here is a typical AIVDM data packet: + +-------------------------------------------------------------------- +!AIVDM,1,1,,B,177KQJ5000G?tO`K>RA1wUbN0TKH,0*5C +-------------------------------------------------------------------- + +And here is what the fields mean: + +Field 1, !AIVDM, identifies this as an AIVDM packet. + +Field 2 (1 in this example) is the count of fragments in the currently +accumulating message. The payload size of each sentence is limited by +NMEA 0183's 82-character maximum, so it is sometimes required to split +a payload over several fragment sentences. + +Field 3 (1 in this example) is the fragment number of this +sentence. It will be one-based. A sentence with a fragment count of +1 and a fragment number of 1 is complete in itself. + +Field 4 (empty in this example) is a sequential message ID for +multi-sentence messages. + +Field 5 (B in this example) is a radio channel code. AIS uses the high +side of the duplex from two VHF radio channels: AIS Channel A is +161.975Mhz (87B); AIS Channel B is 162.025Mhz (88B). In the wild, +channel codes '1' and '2' may also be encountered; the standards +do not prescribe an interpretation of these but it's obvious enough. + +Field 6 (177KQJ5000G?tO`K>RA1wUbN0TKH in this example) is the data +payload. We'll describe how to decode this in later sections. + +Field 7 (0) is the number of fill bits requires to pad the data +payload to a 6 bit boundary, ranging from 0 to 5. Equivalently, +subtracting 5 from this tells how many least significant bits of the +last 6-bit nibble in the data payload should be ignored. Note that +this pad byte has a tricky interaction with the <<<ITU-1371>>> +requirement for byte alignment in over-the-air AIS messages; see the +detailed discussion of message lengths and alignment in a later +section. + +The \*-separated suffix (\*5C) is the NMEA 0183 data-integrity checksum +for the sentence, preceded by "*". It is computed on the entire +sentence including the AIVDM tag but excluding the leading "!". + +For comparison, here is an example of a multifragment sentence with a +nonempty message ID field: + +-------------------------------------------------------------------- +!AIVDM,2,1,3,B,55P5TL01VIaAL@7WKO@mBplU@<PDhh000000001S;AJ::4A80?4i@E53,0*3E +!AIVDM,2,2,3,B,1@0000000000000,2*55 +-------------------------------------------------------------------- + +Technically, NMEA0183 does not actually require that a !-led sentence +be AIS. This format can be used for any encapsulated data. The +syntax and semantics of fields 1-4 are fixed, and the fill-bit field +and NEA checksum are required, but the payload fields may contain any +encapsulated data. + +It is, however, a safe bet that any such sentence containing an A or B +channel code in field 5 is AIVDM/AIVDO. + +== Talker IDS == + +The AI prefix commonly found on these sentences is an NMEA talker ID +for a mobile AIS station. Other possible values are as listed: + +.AIS talker IDs +[width="25%",frame="topbot",options="header"] +|================================================ +| !AB | NMEA 4.0 Base AIS station +| !AD | MMEA 4.0 Dependent AIS Base Station +| !AI | Mobile AIS station +| !AN | NMEA 4.0 Aid to Navigation AIS station +| !AR | NMEA 4.0 AIS Receiving Station +| !AS | NMEA 4.0 Limited Base Station +| !AT | NMEA 4.0 AIS Transmitting Station +| !AX | NMEA 4.0 Repeater AIS station +| !BS | Base AIS station (deprecated in NMEA 4.0) +| !SA | NMEA 4.0 Physical Shore AIS Station +|================================================ + +== AIVDM/AIVDO Payload Armoring == + +The data payload is an ASCII-encoded bit vector. Each character +represents six bits of data. To recover the six bits, subtract 48 +from the ASCII character value; if the result is greater than 40 +subtract 8. According to <<IEC-PAS>>, the valid ASCII characters for +this encoding begin with "0" (64) and end with "w" (87); however, the +intermediate range "X" (88) to "\_" (95) is not used. + +.ASCII payload armoring +[width="25%",frame="topbot",options="header"] +|====================================== +| Char |ASCII |Decimal |Bits +|"0" | 48 | 0 |000000 +|"1" | 49 | 1 |000001 +|"2" | 50 | 2 |000010 +|"3" | 51 | 3 |000011 +|"4" | 52 | 4 |000100 +|"5" | 53 | 5 |000101 +|"6" | 54 | 6 |000110 +|"7" | 55 | 7 |000111 +|"8" | 56 | 8 |001000 +|"9" | 57 | 9 |001001 +|":" | 58 |10 |001010 +|";" | 59 |11 |001011 +|"<" | 60 |12 |001100 +|"=" | 61 |13 |001101 +|">" | 62 |14 |001110 +|"?" | 63 |15 |001111 +|"@" | 64 |16 |010000 +|"A" | 65 |17 |010001 +|"B" | 66 |18 |010010 +|"C" | 67 |19 |010011 +|"D" | 68 |20 |010100 +|"E" | 69 |21 |010101 +|"F" | 70 |22 |010110 +|"G" | 71 |23 |010111 +|"H" | 72 |24 |011000 +|"I" | 73 |25 |011001 +|"J" | 74 |26 |011010 +|"K" | 75 |27 |011011 +|"L" | 76 |28 |011100 +|"M" | 77 |29 |011101 +|"N" | 78 |30 |011110 +|"O" | 79 |31 |011111 +|"P" | 80 |32 |100000 +|"Q" | 81 |33 |100001 +|"R" | 82 |34 |100010 +|"S" | 83 |35 |100011 +|"T" | 84 |36 |100100 +|"U" | 85 |37 |100101 +|"V" | 86 |38 |100110 +|"W" | 87 |39 |100111 +|"`" | 96 |40 |101000 +|"a" | 97 |41 |101001 +|"b" | 98 |42 |101010 +|"c" | 99 |43 |101011 +|"d" |100 |44 |101100 +|"e" |101 |45 |101101 +|"f" |102 |46 |101110 +|"g" |103 |47 |101111 +|"h" |104 |48 |110000 +|"i" |105 |49 |110001 +|"j" |106 |50 |110010 +|"k" |107 |51 |110011 +|"l" |108 |52 |110100 +|"m" |109 |53 |110101 +|"n" |110 |54 |110110 +|"o" |111 |55 |110111 +|"p" |112 |56 |111000 +|"q" |113 |57 |111001 +|"r" |114 |58 |111010 +|"s" |115 |59 |111011 +|"t" |116 |60 |111100 +|"u" |117 |61 |111101 +|"v" |118 |62 |111110 +|"w" |119 |63 |111111 +|====================================== + +Concatenate all six-bit quantities found in the payload, MSB first. +This is the binary payload of the sentence. + +== AIS Payload Data Types == + +Data in AIS message payloads (what you get after undoing the AIVDM/AIVDO +armoring) is encoded as bitfields in the sentence. Bitfields may be +interpreted in one of the following ways: + +- Signed or unsigned integer +- Float (scaled from signed integer) +- Flag or Boolean +- Index into a controlled vocabulary +- Reserved bits +- Spare bits +- Strings + +Numeric bitfields are interpreted as big-endian twos-complement +integers; when signed, the sign bit is the highest. + +Float fields have an associated divisor which should be applied +to convert to the correct units. In one case, the ROT field in message +types 1-3, the scaling operation involves a more elaborate formula. + +Flags are encoded as 1 for true/yes/on, 0 for false/no/off. + +Indices into controlled vocabularies are numeric bitfields which +must be interpreted using per-field string lists specified in the +standards. + +Spare fields generally seem to have been inserted in order to put +certain field starts on 8-bit boundaries, and should be ignored. Decoders +should not, however, assume that spare fields will be all zeroes. + +Reserved fields should not be ignored, as they may be assigned for +extension data in minor revisions of the AIS standard; it is noted in +the message descriptions where this has already occurred. It is good +practice for a decoder to make reserved fields available to client +applications as uninterpreted bitfields. + +Character-string fields within AIS messages are encoded in a special +way, referred to as "six-bit" in the tables below. First, chop the +string field into consecutive six-bit nibbles without padding (each +span of three 8-bit bytes includes 4 of these). Each six-bit nibble +maps to an ASCII character. Nibbles 0-31 map to the characters "@" ( +ASCII 64) through "\_" (ASCII 95) respectively; nibbles 32-63 map to +characters " " (ASCII 32) though "?" (ASCII 63). Lowercase ASCII +letters, the backtick, right and left curly brackets, pipe bar, tilde +and DEL cannot be encoded. + +.Sixbit ASCII +[width="25%",frame="topbot"] +|========================================================================================== +|000000 | 0 |"@" |010000 |16 |"P" |100000 |32 |" " |110000 |48 |"0" +|000001 | 1 |"A" |010001 |17 |"Q" |100001 |33 |"!" |110001 |49 |"1" +|000010 | 2 |"B" |010010 |18 |"R" |100010 |34 |""" |110010 |50 |"2" +|000011 | 3 |"C" |010011 |19 |"S" |100011 |35 |"\#" |110011 |51 |"3" +|000100 | 4 |"D" |010100 |20 |"T" |100100 |36 |"$" |110100 |52 |"4" +|000101 | 5 |"E" |010101 |21 |"U" |100101 |37 |"%" |110101 |53 |"5" +|000110 | 6 |"F" |010110 |22 |"V" |100110 |38 |"&" |110110 |54 |"6" +|000111 | 7 |"G" |010111 |23 |"W" |100111 |39 |"\'" |110111 |55 |"7" +|001000 | 8 |"H" |011000 |24 |"X" |101000 |40 |"(" |111000 |56 |"8" +|001001 | 9 |"I" |011001 |25 |"Y" |101001 |41 |")" |111001 |56 |"9" +|001010 |10 |"J" |011010 |26 |"Z" |101010 |42 |"\*" |111010 |58 |":" +|001011 |11 |"K" |011011 |27 |"[" |101011 |43 |"\+" |111011 |59 |";" +|001100 |12 |"L" |011100 |28 |"{backslash}" |101100 |44 |"," |111100 |60 |"<" +|001101 |13 |"M" |011101 |29 |"]" |101101 |45 |"-" |111101 |61 |"=" +|001110 |14 |"N" |011110 |30 |"\^" |101110 |46 |"." |111110 |62 |">" +|001111 |15 |"O" |011111 |31 |"\_" |101111 |47 |"/" |111111 |63 |"?" +|========================================================================================== + +According to the standard, trailing unused characters in six-bit +fields will be represented by "@" (six-bit zero); however, real-world +encoders are not careful about this and often have nonzero garbage +after the "@". The terminating "@" should not be considered part of +the text, and any non-"@" characters after it should be discarded. It +is also common to space-fill short fields such as ship and station +name, so a decoder should strip trailing spaces after stripping +at-signs and the garbage after them. + +Trailing string fields are often specified as "up to" a certain number of bits. +Decoders should be prepared to handle any field length up to that +number, including zero. + +== AIS Payload Interpretation == + +The following table describes message types that are international +standards from <<ITU1371>> and its revisions. There are also local +and regional extensions used on inland waterways such as the Danube +and the Thames and in British and Irish coastal waters; pointers +to some of these are included later in this document. + +Note that many sources use 1-origin numbering for the bits. We'll +use 0-origin in this document. + +The first 6 bits of the payload (0-5) are the message type. Message +types are as follows: + +.Message types +[width="50%",frame="topbot"] +|====================================================== +|01 |Position Report Class A +|02 |Position Report Class A (Assigned schedule) +|03 |Position Report Class A (Response to interrogation) +|04 |Base Station Report +|05 |Static and Voyage Related Data +|06 |Binary Addressed Message +|07 |Binary Acknowledge +|08 |Binary Broadcast Message +|09 |Standard SAR Aircraft Position Report +|10 |UTC and Date Inquiry +|11 |UTC and Date Response +|12 |Addressed Safety Related Message +|13 |Safety Related Acknowledgement +|14 |Safety Related Broadcast Message +|15 |Interrogation +|16 |Assignment Mode Command +|17 |DGNSS Binary Broadcast Message +|18 |Standard Class B CS Position Report +|19 |Extended Class B Equipment Position Report +|20 |Data Link Management +|21 |Aid-to-Navigation Report +|22 |Channel Management +|23 |Group Assignment Command +|24 |Static Data Report +|25 |Single Slot Binary Message, +|26 |Multiple Slot Binary Message With Communications State +|27 |Position Report For Long-Range Applications +|====================================================== + +In normal operation, an AIS transceiver will broadcast a position report +(type 1, 2, or 3) every 2 to 10 seconds depending on the vessel's +speed while underway, and every 3 minutes while the vessel is at +anchor and stationary. It will send a type 5 identification every 6 +minutes. (More detail is at <<IALA>>, part 2.3) + +Class 6 is used for unencrypted structured extension messages systems +conforming to the Inland AIS standard defined by <<INLAND>>, and by local +authorities such as the St. Lawrence Seaway and the U.S Coast Guard's +PAWSS. This document describes all of the Class 6 special message +formats approved for use in <<IMO236>>, <<IMO289>>, and <<INLAND>>. + +Class 8 is in common use for private encrypted messages, such as +location transmission in military exercises. It is also used for +unencrypted structured extension messages by Inland AIS, and by local +authorities such as the St. Lawrence Seaway and PAWSS. This document +describes all of the Class 8 special message formats approved for use +in <<IMO236>>, <<IMO289>>, and <<INLAND>>. + +Classes 12 and 14 are used for text messaging, nominally safety-related +but also for traffic control and occasionally chatter. + +In practice, message types other than 1, 3, 4, 5, 18, and 24 are +unusual or rare; many AIS transmitters never emit them. + +An MMSI is a Mobile Marine Service Identifier, a unique 9-digit ID for +the ship's radio(s). The first three digits convey information about +the country in which the ID was issued <<ITU-MID>>. US vessels +travelling solely in U.S. waters sometimes incorrectly omit the +leading "3", the geography code for North and Central America and +Caribbean, emitting 8-digit MMSIs beginning with the U.S. country code +of 669. + +According to <<MMSI>>, different formats of MMSI are used for +different classes of transmitter. In the format descriptions below, a +MID is a three-digit decimal literal ranging from 201 to 775 that +identifies a country or other maritime jurisdiction. See <<ITU-MID>> +for a list of MIDs. + +.MID formats +[frame="topbot",options="header"] +|============================================================================== +|8MIDXXXXX | Diver's radio (not used in the U.S. in 2013) +|MIDXXXXXX | Ship +|0MIDXXXXX | Group of ships; the U.S. Coast Guard, for example, is 03699999 +|00MIDXXXX | Coastal stations +|111MIDXXX | SAR (Search and Rescue) aircraft +|99MIDXXXX | Aids to Navigation +|98MIDXXXX | Auxiliary craft associated with a parent ship +|970MIDXXX | AIS SART (Search and Rescue Transmitter) +|972XXXXXX | MOB (Man Overboard) device +|974XXXXXX | EPIRB (Emergency Position Indicating Radio Beacon) AIS +|============================================================================== + +Detailed descriptions of message types 1-24 follow. Message types 1-22 +are derived from <<IALA>>. Message type 23 was described to me by Mike +Greene based on <<IEC-62287>>. Message type 24 was described to me by +<<Schwehr>>, whose Python toolkit decodes it. Message types 25-26 are +reported by <<Schwehr>>, who observes they were added in Version 3 of +<<ITU1371>>. Message type 27 is direct from <<ITU1371>> version 4. + +The "Member" column in these tables is not derived from any of the ITU +standards or amendments. I have invented it in order to be able to +describe a lossless textual encoding of AIS sentences in JSON. These +names are also chosen for suitability as structure/object member names +in computer languages, so that application programming interfaces +across different languages can have a common and readily intelligible +set to use. + +The "T" column declares the data type of the field, and may have +any of the values in the following table. It is intended to be used +for generating bitfield-extraction code directly from the message +type descriptions. + +[frame="topbot",options="header"] +|============================================================================== +|u| Unsigned integer +|U| Unsigned integer with scale - renders as float, suffix is decimal places +|i| Signed integer +|I| Signed integer with scale - renders as float, suffix is decimal places +|b| Boolean +|e| Enumerated type (controlled vocabulary) +|x| Spare or reserved bit +|t| String (packed six-bit ASCII) +|d| Data (uninterpreted binary) +|a| Array boundary, numeric suffix is maximum array size. + ^ before suffix means preceding fields is the length. + Following fields are repeated to end of message +|============================================================================== + +The field breakdowns in this document have been checked against live +decoded data rendered by known-good implementations for message types +1-15, 18-21, and 24. Described but unchecked are 16-17, 22-23, and +25-27. Also, the interpretation of IMO extension subtypes of messages +6 and 8 has yet to be tested. + +Bit lengths and length ranges are given because decoders should check +them against the message type. Messages with correct checksums but the +wrong payload length for their type occur with about 0.3% frequency on +AISHub; if you don't reject these, your clients will see spurious +zeros or garbage. + +=== Types 1, 2 and 3: Position Report Class A === + +Type 1, 2 and 3 messages share a common reporting structure for +navigational information; we'll call it the Common Navigation Block +(CNB). This is the information most likely to be of interest for +decoding software. Total of 168 bits, occupying one AIVDM sentence. + +//: Type CNB +.Common Navigation Block +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 1-3 +|6-7 | 2 |Repeat Indicator |repeat |u|Message repeat count +|8-37 |30 |MMSI |mmsi |u|9 decimal digits +|38-41 | 4 |Navigation Status |status |e|See "Navigation Status" +|42-49 | 8 |Rate of Turn (ROT) |turn |I3|See below +|50-59 |10 |Speed Over Ground (SOG) |speed |U1|See below +|60-60 | 1 |Position Accuracy |accuracy |b|See below +|61-88 |28 |Longitude |lon |I4|Minutes/10000 (see below) +|89-115 |27 |Latitude |lat |I4|Minutes/10000 (see below) +|116-127 |12 |Course Over Ground (COG)|course |U1|Relative to true north, + to 0.1 degree precision +|128-136 | 9 |True Heading (HDG) |heading |u|0 to 359 degrees, + 511 = not available. +|137-142 | 6 |Time Stamp |second |u|Second of UTC timestamp +|143-144 | 2 |Maneuver Indicator |maneuver |e|See "Maneuver Indicator" +|145-147 | 3 |Spare | |x|Not used +|148-148 | 1 |RAIM flag |raim |b|See below +|149-167 |19 |Radio status |radio |u|See below +|============================================================================== + +The Repeat Indicator is a directive to an AIS transceiver that this +message should be rebroadcast. This was intended as a way of getting +AIS messages around hills and other obstructions in coastal waters, +but is little used as base station coverage is more effective. It is +intended that the bit be incremented on each retransmission, to a +maximum of three hops. A value of 3 indicates "Do not repeat". + +.Navigation Status +[width="50%",frame="topbot"] +|================================================================= +|0 | Under way using engine +|1 | At anchor +|2 | Not under command +|3 | Restricted manoeuverability +|4 | Constrained by her draught +|5 | Moored +|6 | Aground +|7 | Engaged in Fishing +|8 | Under way sailing +|9 | Reserved for future amendment of Navigational Status for HSC +|10| Reserved for future amendment of Navigational Status for WIG +|11| Reserved for future use +|12| Reserved for future use +|13| Reserved for future use +|14| AIS-SART is active +|15| Not defined (default) +|================================================================= + +Note, the AIS-SART value was added after <<IALA>> and designates an +AIS transmitter in an survival craft such as a lifeboat. See +<<AIS-SART>> for the field specification and <<SART>> for +background. + +Turn rate is encoded as follows: + +* 0 = not turning +* 1...126 = turning right at up to 708 degrees per minute or higher +* 1...-126 = turning left at up to 708 degrees per minute or higher +* 127 = turning right at more than 5deg/30s (No TI available) +* -127 = turning left at more than 5deg/30s (No TI available) +* 128 (80 hex) indicates no turn information available (default) + +Values between 0 and 708 degrees/min coded by ROT~AIS~=4.733 * +SQRT(ROT~sensor~) degrees/min where ROT~sensor~ is the Rate of Turn as +input by an external Rate of Turn Indicator. ROT~AIS~ is rounded to +the nearest integer value. Thus, to decode the field value, divide by 4.733 +and then square it. Sign of the field value should be preserved when +squaring it, otherwise the left/right indication will be lost. + +Speed over ground is in 0.1-knot resolution from 0 to 102 knots. +Value 1023 indicates speed is not available, value 1022 indicates +102.2 knots or higher. + +The position accuracy flag indicates the accuracy of the fix. A value of +1 indicates a DGPS-quality fix with an accuracy of < 10ms. 0, the +default, indicates an unaugmented GNSS fix with accuracy > 10m. + +Longitude is given in in 1/10000 min; divide by 600000.0 to obtain +degrees. Values up to plus or minus 180 degrees, East = positive, West +\= negative. A value of 181 degrees (0x6791AC0 hex) indicates that +longitude is not available and is the default. + +Latitude is given in in 1/10000 min; divide by 600000.0 to obtain +degrees. Values up to plus or minus 90 degrees, North = positive, +South = negative. A value of 91 degrees (0x3412140 hex) indicates +latitude is not available and is the default. + +Course over ground will be 3600 (0xE10) if that data is not available. + +Seconds in UTC timestamp should be 0-59, except for these special values: + +* 60 if time stamp is not available (default) +* 61 if positioning system is in manual input mode +* 62 if Electronic Position Fixing System operates in estimated (dead + reckoning) mode, +* 63 if the positioning system is inoperative. + +The Regional Reserved field is intended for use by local maritime +authorities. It is not known to be in any actual use up to 2009. + +The Maneuver Indicator (143-144) may have these values: + +.Maneuver Indicator +[width="50%",frame="topbot",options="header"] +|=========================================================== +|0 | Not available (default) +|1 | No special maneuver +|2 | Special maneuver (such as regional passing arrangement) +|=========================================================== + +Riverine and inland navigation systems conforming to <<INLAND>> +designate this field "Blue Sign" with the following enumerated +values: + +.Blue Sign +[width="50%",frame="topbot",options="header"] +|=========================================================== +|0 | Not available (default) +|1 | No +|2 | Yes +|=========================================================== + +The interpretation of bits 143-147 has been a bit unstable. In +<<IALA>> and therefore in the original <<ITU1371>>, they were +described like this: + +[width="50%",frame="topbot",options="header"] +|================================= +|Field |Len |Description +|143-145 | 3 |Regional Reserved +|146-147 | 2 |Spare +|================================= + +The interpretation of 143-144 as a special maneuver field is new in +revision 3 of <<ITU1371>>. + +The RAIM flag indicates whether Receiver Autonomous Integrity +Monitoring is being used to check the performance of the EPFD. +0 = RAIM not in use (default), 1 = RAIM in use. See <<RAIM>> for +a detailed description of this flag. + +Bits 149-167 are diagnostic information for the radio system. Consult +<<IALA>> for detailed description of the latter. + +=== Type 4: Base Station Report === + +This message is to be used by fixed-location base stations to +periodically report a position and time reference. Total of 168 bits, +occupying one AIVDM sentence. + +The standard uses "EPFD" to designate any Electronic Position Fixing Device. + +//: Type 4 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 4 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |MMSI |mmsi |u|9 decimal digits +|38-51 | 14 |Year (UTC) |year |u|UTC, 1-9999, 0 = N/A (default) +|52-55 | 4 |Month (UTC) |month |u|1-12; 0 = N/A (default) +|56-60 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|61-65 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|66-71 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|72-77 | 6 |Second (UTC) |second |u|0-59; 60 = N/A (default) +|78-78 | 1 |Fix quality |accuracy |b|As in Common Navigation Block +|79-106 | 28 |Longitude |lon |I4|As in Common Navigation Block +|107-133 | 27 |Latitude |lat |I4|As in Common Navigation Block +|134-137 | 4 |Type of EPFD |epfd |e|See "EPFD Fix Types" +|138-147 | 10 |Spare | |x|Not used +|148-148 | 1 |RAIM flag |raim |b|As for common navigation block +|149-167 | 19 |SOTDMA state |radio |u|As in same bits for Type 1 +|============================================================================== + +.EPFD Fix Types +[width="50%",frame="topbot",options="header"] +|=================================== +|Code |Position Fix Type +|0 |Undefined (default) +|1 |GPS +|2 |GLONASS +|3 |Combined GPS/GLONASS +|4 |Loran-C +|5 |Chayka +|6 |Integrated navigation system +|7 |Surveyed +|8 |Galileo +|=================================== + +Note: though values 9-15 are marked "not used" in <<IALA>>, the EPFD +type value 15 (all field bits 1) is not uncommon in the wild; it +appears some receivers emit it as the undefined value. Decoders should +be prepared to accept this. + +=== Type 5: Static and Voyage Related Data === + +Message has a total of 424 bits, occupying two AIVDM sentences. + +In practice, the information in these fields (especially ETA and +destination) is not reliable, as it has to be hand-updated by +humans rather than gathered automatically from sensors. + +Also note that it is fairly common in the wild for this message to +have a wrong bit length (420 or 422). Robust decoders should ignore +trailing garbage and deal gracefully with a slightly truncated +destination field. + +//: Type 5 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member/Type |T|Encoding +|0-5 | 6 |Message Type |type |u|Constant: 5 +|6-7 | 2 |Repeat Indicator |repeat |u|Message repeat count +|8-37 | 30 |MMSI |mmsi |u|9 digits +|38-39 | 2 |AIS Version |ais_version |u|0=<<ITU1371>>, + 1-3 = future editions +|40-69 | 30 |IMO Number |imo |u|IMO ship ID number +|70-111 | 42 |Call Sign |callsign |t|7 six-bit characters +|112-231 |120 |Vessel Name |shipname |t|20 six-bit characters +|232-239 | 8 |Ship Type |shiptype |e|See "Codes for Ship Type" +|240-248 | 9 |Dimension to Bow |to_bow |u|Meters +|249-257 | 9 |Dimension to Stern |to_stern |u|Meters +|258-263 | 6 |Dimension to Port |to_port |u|Meters +|264-269 | 6 |Dimension to Starboard |to_starboard |u|Meters +|270-273 | 4 |Position Fix Type |epfd |e|See "EPFD Fix Types" +|274-277 | 4 |ETA month (UTC) |month |u|1-12, 0=N/A (default) +|278-282 | 5 |ETA day (UTC) |day |u|1-31, 0=N/A (default) +|283-287 | 5 |ETA hour (UTC) |hour |u|0-23, 24=N/A (default) +|288-293 | 6 |ETA minute (UTC) |minute |u|0-59, 60=N/A (default) +|294-301 | 8 |Draught |draught |U1|Meters/10 +|302-421 |120 |Destination |destination |t|20 6-bit characters +|422-422 | 1 |DTE |dte |b|0=Data terminal ready, + 1=Not ready (default). +|423-423 | 1 |Spare | |x|Not used +|============================================================================== + +<<INLAND>> specifies the following: + +* the IMO Number field should be zeroed for inland vessels. +* ATIS code should be used for inland vessels +* ship dimensions should be set to the maximum rectangle size of the convoy +* draught information should be rounded up to nearest decimeter +* For the destination, UN/LOCODE and ERI terminal codes should be used + +Ship dimensions will be 0 if not available. For the dimensions to bow +and stern, the special value 511 indicates 511 meters or greater; for +the dimensions to port and starboard, the special value 63 indicates +63 meters or greater. + +.Codes for Ship Type +[width="50%",frame="topbot",options="header"] +|============================================================== +|Code |Ship & Cargo Classification +|0 |Not available (default) +|1-19 |Reserved for future use +|20 |Wing in ground (WIG), all ships of this type +|21 |Wing in ground (WIG), Hazardous category A +|22 |Wing in ground (WIG), Hazardous category B +|23 |Wing in ground (WIG), Hazardous category C +|24 |Wing in ground (WIG), Hazardous category D +|25 |Wing in ground (WIG), Reserved for future use +|26 |Wing in ground (WIG), Reserved for future use +|27 |Wing in ground (WIG), Reserved for future use +|28 |Wing in ground (WIG), Reserved for future use +|29 |Wing in ground (WIG), Reserved for future use +|30 |Fishing +|31 |Towing +|32 |Towing: length exceeds 200m or breadth exceeds 25m +|33 |Dredging or underwater ops +|34 |Diving ops +|35 |Military ops +|36 |Sailing +|37 |Pleasure Craft +|38 |Reserved +|39 |Reserved +|40 |High speed craft (HSC), all ships of this type +|41 |High speed craft (HSC), Hazardous category A +|42 |High speed craft (HSC), Hazardous category B +|43 |High speed craft (HSC), Hazardous category C +|44 |High speed craft (HSC), Hazardous category D +|45 |High speed craft (HSC), Reserved for future use +|46 |High speed craft (HSC), Reserved for future use +|47 |High speed craft (HSC), Reserved for future use +|48 |High speed craft (HSC), Reserved for future use +|49 |High speed craft (HSC), No additional information +|50 |Pilot Vessel +|51 |Search and Rescue vessel +|52 |Tug +|53 |Port Tender +|54 |Anti-pollution equipment +|55 |Law Enforcement +|56 |Spare - Local Vessel +|57 |Spare - Local Vessel +|58 |Medical Transport +|59 |Noncombatant ship according to RR Resolution No. 18 +|60 |Passenger, all ships of this type +|61 |Passenger, Hazardous category A +|62 |Passenger, Hazardous category B +|63 |Passenger, Hazardous category C +|64 |Passenger, Hazardous category D +|65 |Passenger, Reserved for future use +|66 |Passenger, Reserved for future use +|67 |Passenger, Reserved for future use +|68 |Passenger, Reserved for future use +|69 |Passenger, No additional information +|70 |Cargo, all ships of this type +|71 |Cargo, Hazardous category A +|72 |Cargo, Hazardous category B +|73 |Cargo, Hazardous category C +|74 |Cargo, Hazardous category D +|75 |Cargo, Reserved for future use +|76 |Cargo, Reserved for future use +|77 |Cargo, Reserved for future use +|78 |Cargo, Reserved for future use +|79 |Cargo, No additional information +|80 |Tanker, all ships of this type +|81 |Tanker, Hazardous category A +|82 |Tanker, Hazardous category B +|83 |Tanker, Hazardous category C +|84 |Tanker, Hazardous category D +|85 |Tanker, Reserved for future use +|86 |Tanker, Reserved for future use +|87 |Tanker, Reserved for future use +|88 |Tanker, Reserved for future use +|89 |Tanker, No additional information +|90 |Other Type, all ships of this type +|91 |Other Type, Hazardous category A +|92 |Other Type, Hazardous category B +|93 |Other Type, Hazardous category C +|94 |Other Type, Hazardous category D +|95 |Other Type, Reserved for future use +|96 |Other Type, Reserved for future use +|97 |Other Type, Reserved for future use +|98 |Other Type, Reserved for future use +|99 |Other Type, no additional information +|============================================================== + +Note that garbage values greater than 99 are supposed to be unused, +but are not uncommon in the wild; AIS transmitters seem prone to put +junk in this field when it's not explicitly set. Decoders should +treat these like value 0 rather than throwing an exception until and +unless the controlled vocabulary is extended to include the unknown +values. + +=== Type 6: Binary Addressed Message === + +Message type 6 is an addressed point-to-point message with unspecified +binary payload. The St. Lawrence Seaway AIS system, the USG PAWSS +system, and the Port Authority of London use this payload for local +extension messages. <<IMO236>> and <<IMO289>> describe payload use as +international extension messages. This type is variable in length up +to a maximum of 1008 bits (up to 5 AIVDM sentence payloads). + +//: Type 6 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70 | 1 |Retransmit flag |retransmit|b|0 = no retransmit (default) + 1 = retransmitted +|71 | 1 |Spare | |x|Not used +|72-81 | 10 |Designated Area Code |dac |u|Unsigned integer +|82-87 | 6 |Functional ID |fid |u|Unsigned integer +|88 |920 |Data |data |d|Binary data + May be shorter than 920 bits. +|============================================================================== + +Interpretation of the binary payload is controlled by: + +* The Designated Area Code, which is a jurisdiction code: 366 for the + United States. It uses the same encoding as the area designator in + MMMSIs; see <<ITU-MID>>. 1 designates international (ITU) messages. + +* The FID, which is the Functional ID for a message subtype. In some + sources this is abbreviated FI. + +The following is a non-exhaustive list of standardized DAC-FID pairs +in use for type 6. + +|============================================================================== +| DAC |FID | Source | Status | Description +| 1 | 12 | <<IMO236>> | Deprecated | Dangerous cargo indication +| 1 | 14 | <<IMO236>> | Deprecated | Tidal window +| 1 | 16 | <<IMO236>> | Deprecated/In Use| Number of persons on board +| 1 | 16 | <<IMO289>> | Standard | Number of persons on board +| 1 | 18 | <<IMO289>> | Standard | Clearance time to enter port +| 1 | 20 | <<IMO289>> | Standard | Berthing data (addressed) +| 1 | 23 | <<IMO289>> | In use | Area notice (addressed) +| 1 | 25 | <<IMO289>> | Standard | Dangerous Cargo indication +| 1 | 28 | <<IMO289>> | Standard | Route info addressed +| 1 | 30 | <<IMO289>> | Standard | Text description addressed +| 1 | 32 | <<IMO289>> | Standard | Tidal Window +| 200 | 21 | <<INLAND>> | Standard | ETA at lock/bridge/terminal +| 200 | 22 | <<INLAND>> | Standard | RTA at lock/bridge/terminal +| 200 | 55 | <<INLAND>> | Standard | Number of persons on board +| 235 | 10 | <<IALA-A126>> | In use | AtoN monitoring data (UK) +| 250 | 10 | <<IALA-A126>> | In use | AtoN monitoring data (ROI) +|============================================================================== + +DAC/FID pairs are assigned separately per message type. + +Note that the apparent presence of one of these DAC/FID pairs does +not guarantee that the message is structured. Decoders should +perform range validation on the structured fields and interpret the +message as unstructured if any check fails. (As of Aug 2014 no such +collisions have been in the wild; but see the parallel note for Type 8.) + +A list of binary layouts for selected subtypes of message 6 follows. + +==== IMO236 Dangerous Cargo Indication ==== + +This message should be used as a response to a request for Dangerous +Cargo Indication from a competent authority. The message content is +used to identify the port where the documents for the dangerous goods +cargo can be found, e. g. last and next port of call, and to allow +the requesting authority to form a danger estimate. + +A message 6 subtype. DAC = 001 FID = 12. Fixed length: 360 bits. +This is the <<IMO236>> version, now deprecated; there is a later +<<IMO289>> version. + +//: Type 6(1/12) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit|u|0 = no retransmit (default), + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 12 +|88-117 | 30 |Last Port Of Call |lastport |t|5 6-bit characters, UN locode +|118-121 | 4 |ETA month (UTC) |lmonth |u|1-12, 0=N/A (default) +|122-126 | 5 |ETA day (UTC) |lday |u|1-31, 0=N/A (default) +|127-131 | 5 |ETA hour (UTC) |lhour |u|0-23, 24=N/A (default) +|132-137 | 6 |ETA minute (UTC) |lminute |u|0-59, 60=N/A (default) +|138-167 | 30 |Next Port Of Call |nextport |t|5 6-bit characters, UN locode +|168-171 | 4 |ETA month (UTC) |nmonth |u|1-12, 0=N/A (default) +|172-176 | 5 |ETA day (UTC) |nday |u|1-31, 0=N/A (default) +|177-181 | 5 |ETA hour (UTC) |nhour |u|0-23, 24=N/A (default) +|182-187 | 6 |ETA minute (UTC) |nminute |u|0-59, 60=N/A (default) +|188-307 |120 |Main Dangerous Good |dangerous |t|20 6-bit characters +|308-331 | 24 |IMD Category |imdcat |t|4 6-bit characters +|332-344 | 13 |UN Number |unid |u|1-3363 UN Number +|345-354 | 10 |Amount of Cargo |amount |u|Unsigned integer +|355-356 | 2 |Unit of Quantity |unit |e|See "Cargo Unit Codes" +|357-359 | 3 |Spare | |x|Not used +|============================================================================== + +.Cargo Unit Codes +[width="50%",frame="topbot",options="header"] +|=================================== +|Code |Unit +|0 |Not available (default) +|1 |kg +|2 |metric tons +|3 |metric kilotons +|=================================== + +==== IMO236 Tidal Window ==== + +This message should be used by shore stations to inform vessels about +tidal windows which allow a vessel the safe passage of a fairway. The +message includes 1-3 predictions of current speed and current direction. +Acknowledgment is required. + +A message 6 subtype. DAC = 001 FID = 14. Variable length: 190-376 bits +This is the <<IMO236>> version; there is an <<IMO289>> version with +different widths for the latitude, longitude, and current-speed fields +(also the order of lat/lon is swapped). + +//: Type 6(1/14) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|See Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit|b|0 = no retransmit (default), + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 14 +|88-91 | 4 |Month |month |u|1-12; 0 = N/A (default) +|92-96 | 5 |Day |day |u|1-31; 0 = N/A (default) +|97 | | |tidals |a3|Tidal information array +|0-26 | 27 |Latitude |lat |I4|Unit = minutes * 0.0001, + 91000 = N/A (default), + N positive, S negative. +|27-54 | 28 |Longitude |lon |I4|Unit = minutes * 0.0001, + 181000 = N/A (default), + E positive, W negative. +|55-59 | 5 |From UTC Hour |from_hour |u|0-23, 24 = N/A (default) +|60-65 | 6 |From UTC Minute |from_min |u|0-59, 60 = N/A (default) +|66-70 | 5 |To UTC Hour |to_hour |u|0-23, 24 = N/A (default) +|71-76 | 6 |To UTC Minute |to_min |u|0-59, 60 = N/A (default) +|77-85 | 9 |Current Dir. Predicted |cdir |u|0-359 deg, 360-N/A (default) +|86-92 | 7 |Current Speed Predicted|cspeed |U1|0-126, units of 0.1 knots, + 127 = N/A (default). +|============================================================================= + +The group of fields from longitude on may repeat twice more to convey up to +three points of tidal information. + +==== IMO236 Number of persons on board ==== + +This message should be used by a ship to report the number of persons +on board, e.g. on request by a competent authority. Acknowledgement +required. + +A message 6 subtype. DAC = 001 FID = 16. + +<<IMO236>> describes a fixed-length, 72-bit message with this layout: + +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 16 +|55-68 | 14 |# persons on board |persons |u|Unsigned integer + 0 = N/A (default) + 8191 = >= 8191 persons. +|69-71 | 3 |Spare | |x|Not used +|============================================================================== + +OPEN-QUESTION: Note that though this is a message 6 subtype and +described in <<IMO236>> with the attribute "addressed", there is no +destination address. A strikeout in <<IMO236>> suggests that this was +originally a subtype of 8. It would be good defensive implementation +for a decoder to accept either. Bit length may be used to distinguish +them. + +<<IMO289>> describes a fixed-length, 136-bit message with this layout: + +//: Type 6(1/16) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit|b|0 = no retransmit (default), + 1 = retransmitted. +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 16 +|88-100 | 13 |# persons on board |persons |u|Unsigned integer, + 0 = N/A (default), + 8191 = >= 8191 persons. +|101-135 | 35 |Spare | |x|Not used +|============================================================================== + +==== IMO289 Clearance Time To Enter Port ==== + +This message provides specific ships with information on the port to call and +time to enter. It should be transmitted by an authority competent to grant +use of the port. + +A message 6 subtype. DAC = 001 FID = 18. Fixed length: 360 bits. + +//: Type 6(1/18) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit |b|0 = no retransmit (default), + 1 = retransmitted. +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 18 +|88-97 | 10 |Message Linkage ID |linkage |u|Unsigned integer +|98-101 | 4 |Month (UTC) |month |u|1-12; 0 = N/A (default) +|102-106 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|107-111 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|112-117 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|118-237 |120 |Name of Port & Berth |portname |t|20 6-bit characters +|238-267 | 30 |Destination |destination|t|5 6-bit characters +|268-292 | 25 |Longitude |lon |I3|Unit = minutes * 0.001, + 181000 = N/A (default). +|293-316 | 24 |Latitude |lat |I3|Unit = minutes * 0.001, + 91000 = N/A (default). +|317-359 | 43 |Spare | |x|Not used +|============================================================================== + +==== IMO 289 Berthing Data (addressed) ==== + +This message provides information on the ship's berth. If sent from a +ship it is a berthing request; if it is transmitted by a competent +authority it is a berthing assignment. + +A message 6 subtype. DAC = 001 FID = 20. Fixed Length: 360 bits. + +The 2-bit fields after "availability" describe services which may be +available at the berth. They are valid only if this master availability +bit is on. + +//: Type 6(1/20) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member/Type |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit |b|0 = no retransmit (default) + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|AC = 001 +|82-87 | 6 |FID |fid |u|ID = 20 +|88-97 | 10 |Message Linkage ID |linkage |u|Unsigned integer +|98-106 | 9 |Berth length |berth_length|u|In 1m steps, 1-510m, + 511 = >= 511m + 0 = N/A (default). +|107-114 | 8 |Berth Water Depth |berth_depth |U1|0.1-25.4m in 0.1 steps + 255 = >= 25.5m + 0 = N/A (default) +|115-117 | 3 |Mooring Position |position |e|See "Mooring Position" +|118-121 | 4 |Month (UTC) |month |u|1-12; 0 = N/A (default) +|122-126 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|127-131 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|132-137 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|138-138 | 1 |Services Availability|availability|b|0 = services unknown (default) + 1 = services known +|139-140 | 2 |Agent |agent |e|See "Service Status" +|141-142 | 2 |Bunker/fuel |fuel |e|See "Service Status" +|143-144 | 2 |Chandler |chandler |e|See "Service Status" +|145-146 | 2 |Stevedore |stevedore |e|See "Service Status" +|147-148 | 2 |Electrical |electrical |e|See "Service Status" +|149-150 | 2 |Potable water |water |e|See "Service Status" +|151-152 | 2 |Customs house |customs |e|See "Service Status" +|153-154 | 2 |Cartage |cartage |e|See "Service Status" +|155-156 | 2 |Crane(s) |crane |e|See "Service Status" +|157-158 | 2 |Lift(s) |lift |e|See "Service Status" +|159-160 | 2 |Medical facilities |medical |e|See "Service Status" +|161-162 | 2 |Navigation repair |navrepair |e|See "Service Status" +|163-164 | 2 |Provisions |provisions |e|See "Service Status" +|165-166 | 2 |Ship repair |shiprepair |e|See "Service Status" +|167-168 | 2 |Surveyor |surveyor |e|See "Service Status" +|169-170 | 2 |Steam |steam |e|See "Service Status" +|171-172 | 2 |Tugs |tugs |e|See "Service Status" +|173-174 | 2 |Waste disposal (solid) |solidwaste |e|See "Service Status" +|175-176 | 2 |Waste disposal (liquid) |liquidwaste |e|See "Service Status" +|177-178 | 2 |Waste disposal (hazardous)|hazardouswaste|e|See "Service Status" +|179-180 | 2 |Reserved ballast exchange |ballast |e|See "Service Status" +|181-182 | 2 |Additional services|additional |e|See "Service Status" +|183-184 | 2 |Regional reserved 1|regional1 |e|See "Service Status" +|185-186 | 2 |Regional reserved 2|regional2 |e|See "Service Status" +|187-188 | 2 |Reserved for future|future1 |e|See "Service Status" +|189-190 | 2 |Reserved for future|future2 |e|See "Service Status" +|191-310 |120 |Name of Berth |berth_name |t|20 6-bit characters +|311-335 | 25 |Longitude |berth_lon |I3|Minutes * 0.001, + 181000 = N/A (default) +|336-359 | 24 |Latitude |berth_lat |I3|Minutes * 0.001, + 91000 = N/A (default) +|============================================================================== + +The UTC timestamp refers to the time requested or granted for berthing. + +The longitude and latitude refer to the center of the berth. + +.Mooring Position +[width="50%",frame="topbot",options="header"] +|=================================== +|Code |Position +|0 |Not available (default) +|1 |Port-side to +|2 |Starboard-side to +|3 |Mediterranean (end-on) mooring +|4 |Mooring buoy +|5 |Anchorage +|6-7 |Reserved for future use +|=================================== + +.Service Status +[width="50%",frame="topbot",options="header"] +|============================================================================= +|Code |Meaning +|0 |Not available or requested (default) +|1 |Service available +|2 |No data or unknown +|3 |Not to be used +|============================================================================= + +==== IMO289 Area Notice (addressed) ==== + +This should be used to convey time- and location-dependent information about +hazards to navigation. For information-lifetime restrictions and usage +guidance, refer to <<ITU1371>>. + +A message 6 subtype. DAC = 001 FID = 23. 230 to 1013 bits. There is a +related Message 8 subtype for broadcast use. + +The message consists of a fixed-length header of 143 bits, followed by 1 to +10 sub-area indications which are fixed-length records 87 bits long. Here +is the message header format: + +//: Type 6(1/23) +.Area Notice (addressed) message header +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit |b|0 = no retransmit (default), + 1 = retransmitted. +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 23 +|88-97 | 10 |Message Linkage ID |linkage |u|Unsigned integer +|98-104 | 7 |Notice Description |notice |e|See "Area Notice Description" +|105-108 | 4 |Month (UTC) |month |u|1-12; 0 = N/A (default) +|109-113 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|114-118 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|119-124 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|125-142 | 18 |Duration |duration |In minutes, + 262143 = N/A (default), + 0 = cancel this notice. +|143 | | |subarea |a10|Subarea array +|0-2 | 2 | |shape |u|Subarea shape +|3-86 | 85 |Subarea Payload |payload |d|Subarea payload +|============================================================================== + +The Message Linkage field is, as usual, for linking to a textual explanatory +message sent with the same linkage ID. The standard says that in this context +it has the semantics of being an identifier of or reference to an area. + +Notice description types are as follows: + +.Area Notice Description +[frame="topbot",options="header"] +|============================================================================== +| 0| Caution Area: Marine mammals habitat +| 1| Caution Area: Marine mammals in area - reduce speed +| 2| Caution Area: Marine mammals in area - stay clear +| 3| Caution Area: Marine mammals in area - report sightings +| 4| Caution Area: Protected habitat - reduce speed +| 5| Caution Area: Protected habitat - stay clear +| 6| Caution Area: Protected habitat - no fishing or anchoring +| 7| Caution Area: Derelicts (drifting objects) +| 8| Caution Area: Traffic congestion +| 9| Caution Area: Marine event +| 10| Caution Area: Divers down +| 11| Caution Area: Swim area +| 12| Caution Area: Dredge operations +| 13| Caution Area: Survey operations +| 14| Caution Area: Underwater operation +| 15| Caution Area: Seaplane operations +| 16| Caution Area: Fishery – nets in water +| 17| Caution Area: Cluster of fishing vessels +| 18| Caution Area: Fairway closed +| 19| Caution Area: Harbor closed +| 20| Caution Area: Risk (define in associated text field) +| 21| Caution Area: Underwater vehicle operation +| 22| (reserved for future use) +| 23| Environmental Caution Area: Storm front (line squall) +| 24| Environmental Caution Area: Hazardous sea ice +| 25| Environmental Caution Area: Storm warning (storm cell or line of storms) +| 26| Environmental Caution Area: High wind +| 27| Environmental Caution Area: High waves +| 28| Environmental Caution Area: Restricted visibility (fog, rain, etc.) +| 29| Environmental Caution Area: Strong currents +| 30| Environmental Caution Area: Heavy icing +| 31| (reserved for future use) +| 32| Restricted Area: Fishing prohibited +| 33| Restricted Area: No anchoring. +| 34| Restricted Area: Entry approval required prior to transit +| 35| Restricted Area: Entry prohibited +| 36| Restricted Area: Active military OPAREA +| 37| Restricted Area: Firing – danger area. +| 38| Restricted Area: Drifting Mines +| 39| (reserved for future use) +| 40| Anchorage Area: Anchorage open +| 41| Anchorage Area: Anchorage closed +| 42| Anchorage Area: Anchorage prohibited +| 43| Anchorage Area: Deep draft anchorage +| 44| Anchorage Area: Shallow draft anchorage +| 45| Anchorage Area: Vessel transfer operations +| 46| (reserved for future use) +| 47| (reserved for future use) +| 48| (reserved for future use) +| 49| (reserved for future use) +| 50| (reserved for future use) +| 51| (reserved for future use) +| 52| (reserved for future use) +| 53| (reserved for future use) +| 54| (reserved for future use) +| 55| (reserved for future use) +| 56| Security Alert - Level 1 +| 57| Security Alert - Level 2 +| 57| Security Alert - Level 3 +| 59| (reserved for future use) +| 60| (reserved for future use) +| 61| (reserved for future use) +| 62| (reserved for future use) +| 63| (reserved for future use) +| 64| Distress Area: Vessel disabled and adrift +| 65| Distress Area: Vessel sinking +| 66| Distress Area: Vessel abandoning ship +| 67| Distress Area: Vessel requests medical assistance +| 68| Distress Area: Vessel flooding +| 69| Distress Area: Vessel fire/explosion +| 70| Distress Area: Vessel grounding +| 71| Distress Area: Vessel collision +| 72| Distress Area: Vessel listing/capsizing +| 73| Distress Area: Vessel under assault +| 74| Distress Area: Person overboard +| 75| Distress Area: SAR area +| 76| Distress Area: Pollution response area +| 77| (reserved for future use) +| 78| (reserved for future use) +| 79| (reserved for future use) +| 80| Instruction: Contact VTS at this point/juncture +| 81| Instruction: Contact Port Administration at this point/juncture +| 82| Instruction: Do not proceed beyond this point/juncture +| 83| Instruction: Await instructions prior to proceeding beyond this point/juncture +| 84| Proceed to this location – await instructions +| 85| Clearance granted – proceed to berth +| 86| (reserved for future use) +| 87| (reserved for future use) +| 88| Information: Pilot boarding position +| 89| Information: Icebreaker waiting area +| 90| Information: Places of refuge +| 91| Information: Position of icebreakers +| 92| Information: Location of response units +| 93| VTS active target +| 94| Rogue or suspicious vessel +| 95| Vessel requesting non-distress assistance +| 96| Chart Feature: Sunken vessel +| 97| Chart Feature: Submerged object +| 98| Chart Feature: Semi-submerged object +| 99| Chart Feature: Shoal area +|100| Chart Feature: Shoal area due north +|101| Chart Feature: Shoal area due east +|102| Chart Feature: Shoal area due south +|103| Chart Feature: Shoal area due west +|104| Chart Feature: Channel obstruction +|105| Chart Feature: Reduced vertical clearance +|106| Chart Feature: Bridge closed +|107| Chart Feature: Bridge partially open +|108| Chart Feature: Bridge fully open +|109| (reserved for future use) +|110| (reserved for future use) +|111| (reserved for future use) +|112| Report from ship: Icing info +|113| (reserved for future use) +|114| Report from ship: Miscellaneous information – define in associated text field +|115| (reserved for future use) +|116| (reserved for future use) +|117| (reserved for future use) +|118| (reserved for future use) +|119| (reserved for future use) +|120| Route: Recommended route +|121| Route: Alternative route +|122| Route: Recommended route through ice +|123| (reserved for future use) +|124| (reserved for future use) +|125| Other – Define in associated text field +|126| Cancellation – cancel area as identified by Message Linkage ID +|127| Undefined (default) +|============================================================================== + +Subarea types are as follows: + +[frame="topbot",options="header"] +|============================================================================== +| 0 | Circle or point +| 1 | Rectangle +| 2 | Sector +| 3 | Polyline +| 4 | Polygon +| 5 | Associated text +| 6-7 | Reserved +|============================================================================== + +Subarea payload layouts are as follows: + +.Circle or Point +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member/Type |T|Units +|0-2 | 3 |Shape of area |shape |e|Constant: 0 +|3-4 | 2 |Scale factor |scale |u|Exponent for area dimensions + 1 = meters (default) +|5-29 | 25 |Longitude |lon |I3|Longitude of center point, + Unit = minutes * 0.001, + 181000 = N/A (default). +|30-53 | 24 |Latitude |lat |I3|Latitude of center point, + Unit = minutes * 0.001, + 91000 = N/A (default). +|54-56 | 3 |Precision |precision |u|Decimal places of precision + (defaults to 4) +|57-68 | 12 |Radius |radius |u|Radius of area + 0 = point (default), + else 1-4095 * 10^scale m +|69-86 | 18 |Spare | |x|Not used +|============================================================================== + +.Rectangle +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member/Type |T|Units +|0-2 | 3 |Shape of area |shape |e|Constant: 1 +|3-4 | 2 |Scale factor |scale |u|Exponent for area dimensions + 1 = meters (default) +|5-29 | 25 |Longitude |lon |I3|Longitude of SW corner + Unit = minutes * 0.001, + 181000 = N/A (default). +|30-53 | 24 |Latitude |lat |I3|Latitude of SW corner + Unit = minutes * 0.001, + 91000 = N/A (default). +|54-56 | 3 |Precision |precision |u|Decimal places of precision + (defaults to 4) +|57-64 | 8 |E dimension |east |u|Box dimension east + 0 = N/S line (default), + else 1-255 * 10^scale m +|65-72 | 8 |N dimension |north |u|Box dimension north + 0 = E/W line (default), + else 1-255 * 10^scale m +|73-81 | 9 |Orientation |orientation |u|Degrees clockwise from true N, + 0 = no rotation (default), + else 1-359, + 360-511 reserved. +|82-86 | 5 |Spare | |x|Not used +|============================================================================== + +.Sector +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member/Type |T|Units +|0-2 | 3 |Shape of area |shape |e|Constant: 2 +|3-4 | 2 |Scale factor |scale |u|Exponent for area dimensions + 1 = meters (default) +|5-29 | 25 |Longitude |lon |I3|Longitude of center point, + Unit = minutes * 0.001, + 181000 = N/A (default). +|30-53 | 24 |Latitude |lat |I3|Latitude of center point, + Unit = minutes * 0.001, + 91000 = N/A (default). +|54-56 | 3 |Precision |precision |u|Decimal places of precision + (defaults to 4) +|57-68 | 12 |Radius |radius |u|Radius of area + 0 = point (default), + else 1-4095 * 10^scale m +|69-77 | 9 |Left boundary |left |u|Degrees clockwise from true N, + 0 = no rotation (default), + else 1-359, + 360-511 reserved. +|78-86 | 9 |Right boundary |right |u|Degrees clockwise from true N, + 0 = no rotation (default), + else 1-359, + 360-511 reserved. +|============================================================================== + +.Polyline +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member/Type |T|Units +|0-2 | 3 |Shape of area |shape |e|Constant: 3 +|3-4 | 2 |Scale factor |scale |u|Exponent for area dimensions + 1 = meters (default) +|5 | | |waypoints |a4|Waypoints array +|0-9 |10 |Bearing |bearing |u|True bearing in half-degree + steps from previous waypoint; + 720 = N/A (default). +|10-19 |10 |Distance |distance |u|Distance from prev. waypoint, + 0 = no point (default), + else 1-1023 * 10^scale m +|============================================================================== + +The last two fields are repeated 4 times; the final 2 bits of 87 are +unused. A polyline must be preceded by either (a) a circle, in which +case the first bearing is from the center, or (b) a polyline, in which +case the first bearing is from the implied last point. + +.Polygon +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member/Type |T|Units +|0-2 | 3 |Shape of area |shape |e|Constant: 4 +|3-4 | 2 |Scale factor |scale |u|Exponent for area dimensions + 1 = meters (default) +|5 | | |vertices |a4|Vertices array +|0-9 |10 |Bearing |bearing |u|True bearing in half-degree + steps from previous vertex; + 720 = N/A (default). +|10-19 |10 |Distance |distance |u|Distance from prev. vertex, +|============================================================================== + +The last two fields are repeated 4 times; the final 2 bits of 87 are +unused. A polygon must be preceded by a circle; the first bearing is +from the circle center, which is treated as the zero vertex. There is +an implied boundary from the last polygon vertex to the zero vertex. + +.Associated text +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member/Type |T|Units +|0-2 | 3 |Shape of area |shape |e|Constant: 5 +|3-86 |84 |Text |text |t|14 chars of packed 6-bit. +|============================================================================== + +==== IMO289 Dangerous Cargo Indication ==== + +See the IMO236 variant for the meaning of this message. + +A message 6 subtype. DAC = 001 FID = 25. Variable length: 117-576 bits. +This is the <<IMO289>> version; there is an earlier <<IMO236>> version +with a different layout, deprecated in <<IMO289>>. + +//: Type 6(1/25) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit|b|0 = no retransmit (default) + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 25 +|88-89 | 2 |Unit of Quantity |unit |e|See "Cargo Unit Codes" +|90-99 | 10 |Amount of Cargo |amount |u|Unsigned integer + 0 = N/A (default) + 0 = N/A (default) +|100 | | |cargos |a28|Cargo types array +|0-3 | 4 |Cargo code |code |e|See "Cargo Codes" +|4-16 | 13 |Cargo subtype |subtype |u|Unsigned integer + 0 = N/A (default) +|============================================================================== + +The last two fields may repeat to describe up to 28 subcargos. The count +of repetitions must be computed from the message payload length. + +For cargo unit codes, see the description of the IMO236 variant of +this message. + +.Cargo Codes +[width="50%",frame="topbot",options="header"] +|=================================== +|Code |Code under which cargo is carried +|0 |Not available (default) +|1 |IMDG Code (in packed form) +|2 |IGC code +|3 |BC Code (from 1.1.2011 IMSBC) +|4 |MARPOL Annex I List of oils (Appendix 1) +|5 |MARPOL Annex II IBC Code +|6 |Regional use +|7-15 |Reserved for future use +|=================================== + +The subtype field may be interpreted as an IMDG class or division code +(if the cargotype is 1 = IMDG code) or as a UN number (if the +cargotype is 2 = IGC code) or as a pair of BC class and IMDG class (if +the cargotype is 3 = BC code) or as a MARPOL Annex I code (if +the cargotype is 4 = MARPOL Annex I) or as a MARPOL Annex II code (if +the cargotype is 5 = MARPOL Annex II). + +.Dangerous Cargo Indication: MARPOL Annex I list of oils +[width="50%",frame="topbot",options="header"] +|=================================== +|0 | N/A (default) +|1 | asphalt solutions +|2 | oils +|3 | distillates +|4 | gas oil +|5 | gasoline blending stocks +|6 | gasoline +|7 | jet fuels +|8 | naphtha +|9-15 | reserved for future use +|=================================== + +.Dangerous Cargo Indication: MARPOL Annex II list of oils +[width="50%",frame="topbot",options="header"] +|=================================== +|0 | N/A (default) +|1 | Category X +|2 | Category Y +|3 | Category Z +|4 | Other substances +|5-7 | reserved for future use +|=================================== + +==== IMO289 Route Information (addressed) ==== + +The content of this message is a time and a list of waypoints describing a +course. It has a broadcast equivalent that is a message 8 subtype. + +A message 6 subtype. DAC = 001 FID = 28. Variable length: 204-1029 bits. + +//: Type 6(1/28) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit|b|0 = no retransmission (default), + 1 = retransmitted. +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 28 +|88-97 | 10 |Message Linkage ID|linkage |u|Unsigned integer +|98-100 | 3 |Sender Class |sender |u|0 = ship (default), + 1 = authority, + 27 = reserved for future use +|101-105 | 5 |Route Type |rtype |e|See "Route Type Codes" +|106-109 | 4 |Start month (UTC) |month |u|1-12, 0=N/A (default) +|110-114 | 5 |Start day (UTC) |day |u|1-31, 0=N/A (default) +|115-119 | 5 |Start hour (UTC) |hour |u|0-23, 24=N/A (default) +|120-125 | 6 |Start minute (UTC)|minute |u|0-59, 60=N/A (default) +|126-143 | 18 |Duration |duration |u|Minutes from start time, + 0 = cancel route, + 262,143 = N/A (default), +|144-148 | 5 | |waycount |u|Waypoint count (1-16), + Values 17-31 are not used. +|149 | | |waypoints |a^16|Waypoint array +|0-27 | 28 |Longitude |lon |I4|Minutes * 0.0001, + 181000 = N/A (default), + E positive, W negative. +|28-54 | 27 |Latitude |lat |I4|Minutes * 0.0001, + 91000 = N/A (default), + N positive, S negative. +|============================================================================== + +The final pair of fields in the table above is a waypoint. The message may +end with 1 to 16 waypoints. + +.Route Type Codes +[width="50%",frame="topbot",options="header"] +|=================================== +|0 |Undefined (default) +|1 |Mandatory +|2 |Recommended +|3 |Alternative +|4 |Recommended route through ice +|5 |Ship route plan +|6-30 |Reserved for future usage +|31 |Cancel route identified by message linkage +|=================================== + +==== IMO289 Text description (addressed) ==== + +This message may be used to attach a text description to another message with +a Message Linkage ID matching this one. It is intended that the combination +of MMSI and Message Linkage ID should be unique. + +A message 6 subtype. DAC = 001 FID = 30. Variable length: 104-1028 bits. + +Intended to be used to associate a text annotation with another message +via the Message Linkage ID field. + +//: Type 6(1/30) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit |u|0 = no retransmit (default), + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 30 +|88-97 | 10 |Message Linkage ID|linkage |u|Unsigned integer +|98-? | 6-930 |Description |description|t|String +|============================================================================== + +There is an equivalent subtype of message 8 that is a broadcast description. + +==== Tidal Window (IMO289) ==== + +See the <<IMO239>> version of this message for intended meaning. + +A message 6 subtype. DAC = 001 FID = 32. Variable length: 186-362 bits. +This is the <<IMO289>> version; there is an <<IMO289>> version with +different bit widths for the latitude and longitude fields. + +//: Type 6(1/32) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit|b|0 = no retransmit (default), + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 001 +|82-87 | 6 |FID |fid |u|FID = 32 +|88-91 | 4 |Month |month |u|1-12; 0 = N/A (default) +|92-96 | 5 |Day |day |u|1-31; 0 = N/A (default) +|97 | | |tidals |a3|Tidal information array +|0-24 | 25 |Longitude |lon |I3|Unit = minutes * 0.001, + 181000 = N/A (default), + E positive, W negative. +|25-48 | 24 |Latitude |lat |I3|Unit = minutes * 0.001. + 91000 = N/A (default), + N positive, S negative. +|49-53 | 5 |From UTC Hour |from_hour |u|0-23, 24 = N/A (default) +|54-59 | 6 |From UTC Minute |from_min |u|0-59, 60 = N/A (default) +|60-64 | 5 |To UTC Hour |to_hour |u|0-23, 24 = N/A (default) +|65-70 | 6 |To UTC Minute |to_min |u|0-59, 60 = N/A (default) +|71-79 | 9 |Current Dir. Predicted |cdir |u|0-359 true bearing, + 360 = N/A (default). +|80-87 | 8 |Current Speed Predicted|cspeed |U1|0-250, units of 0.1 knots, + 251 = speed >= 25.1 knots, + 255 = N/A (default). +|============================================================================= + +The group of fields from longitude on may repeat twice more to convey up to +three points of tidal information. + +==== ETA at lock/bridge/terminal (Inland AIS) ==== + +A message 6 subtype. DAC = 200 FID = 21. Fixed length, 248 bits. + +Should be used by inland vessels only, to send an ETA report to a +lock, bridge or terminal in order to apply for a time slot in resource +planning. + +An acknowledgement by Inland AIS message 22 should be received within +15 minutes. Otherwise, the Inland AIS message 21 should be repeated +once. + +//: Type 6(200/21) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70 | 1 |Retransmit flag |retransmit|u|0 = no retransmit (default), + 1 = retransmitted +|71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 200 +|82-87 | 6 |FID |fid |u|FID = 21 +|88-99 | 12 |UN Country Code |country |t|2 six-bit characters +|100-117 | 18 |UN/LOCODE |locode |t|3 six-bit characters +|118-147 | 30 |Fairway section |section |t|5 six-bit characters +|148-177 | 30 |Terminal code |terminal |t|5 six-bit characters +|178-207 | 30 |Fairway hectometre |hectometre|t|5 six-bit characters +|208-211 | 4 |ETA month |month |u|1-12, 0=N/A (default) +|212-216 | 5 |ETA day |day |u|1-31, 0=N/A (default) +|217-221 | 5 |ETA hour |hour |u|0-23, 24=N/A (default) +|222-227 | 6 |ETA minute |minute |u|0-59, 60=N/A (default) +|228-230 | 3 |Assisting Tugs |tugs |u|0-6, 7 = unknown (default) +|231-242 | 12 |Air Draught |airdraught|u|0-4000 * 0.01m, + 0 = Unknown (default) +|243-247 | 5 |Spare | |x|Not used +|============================================================================== + +<<INLAND>> says of the Destination MMSI field "a virtual MMSI number +should be used for each country, each national AIS network should +route messages addressed to other countries using this virtual MMSI +number". + +OPEN-QUESTION: <<INLAND>> does not specify whether ETA time is UTC +or local. + +==== RTA at lock/bridge/terminal (Inland AIS) ==== + +A message 6 subtype. DAC = 200 FID = 22. Fixed length, 232 bits. + +This message should be sent by base stations only, to assign a RTA at +a lock, bridge or terminal to a certain vessel in response to the +preceding ETA request. + +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit|u|0 = no retransmit (default), + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 200 +|82-87 | 6 |FID |fid |u|FID = 21 +|88-99 | 12 |UN Country Code |country |t|2 six-bit characters +|100-117 | 18 |UN/LOCODE |locode |t|3 six-bit characters +|118-147 | 30 |Fairway section |section |t|5 six-bit characters +|148-177 | 30 |Terminal code |terminal |t|5 six-bit characters +|178-207 | 30 |Fairway hectometre |hectometre|t|5 six-bit characters +|208-211 | 4 |RTA month |month |u|1-12, 0=N/A (default) +|212-216 | 5 |RTA day |day |u|1-31, 0=N/A (default) +|217-221 | 5 |RTA hour |hour |u|0-23, 24=N/A (default) +|222-227 | 6 |RTA minute |minute |u|0-59, 60=N/A (default) +|228-229 | 2 |Status |status |e|See "Status Codes" below +|230-231 | 2 |Spare | |x|Not used +|============================================================================== + +OPEN-QUESTION: <<INLAND>> does not specify whether ETA time is UTC +or local. + +OPEN-QUESTION: No default is specified for the Status field. + +.Lock/Bridge/Terminal status codes +[frame="topbot",options="header"] +|============================================================================== +| 0 | Operational +| 1 | Limited operation +| 2 | Out of order +| 3 | N/A +|============================================================================== + +==== Number of persons on board (Inland AIS) ==== + +This message should be sent by inland vessels only, to inform about +the number of persons (passengers, crew, and shipboard personnel) on +board. + +A message 6 subtype. DAC = 200 FID = 55. Fixed length, 168 bits. + +//: Type 6(200/55) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit|u|0 = no retransmit (default), + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 200 +|82-87 | 6 |FID |fid |u|FID = 55 +|88-95 | 8 |# crew on board |crew |u|Unsigned integer + 0-254, + 255 = Unknown (default) +|96-108 | 13 |# passengers on board|passengers|u|Unsigned integer + 0-8190, + 8191 = Unknown (default) +|109-116 | 8 |# personnel on board |personnel |u|Unsigned integer + 0-254, + 255 = Unknown (default) +|117-167 | 51 |Spare | |x|Not used +|============================================================================== + +==== AtoN monitoring data (GLA) ==== + +This message provides AtoN (Aid to navigation) monitoring data for the General +Lighthouse Authorities (GLA), which consists of Trinity House (England & +Wales), Northern Lighthouse Board (Scotland) and the Commissioners of Irish +Lights (Ireland). It is described in <<IALA-A126>>. + +A message 6 subtype. DAC = 235 or 250 FID = 10. Fixed length: 136 bits. + +DAC and FI are user configurable, DAC=235/FI=10 is used in UK, DAC=250/FI=10 +in the Republic Of Ireland. + +The interval between the transmissions of these messages will be synchronized +with message 21, although not necessarily at the same reporting rate. If +Message 21 is not used at a particular site, then the reporting interval +should be selected to minimize the power requirement of the transponder, +whilst still providing enough data to enable meaningful diagnostic analysis. + +OPEN-QUESTION: <<INLAND>> lists a broadcast (type 8) variant of this +message, but without indicating how the Destination MMSI field is to +be set or interpreted. Robust implementations should accept and +process this variant. + +//: Type 6(235-250:10) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-70 | 1 |Retransmit flag |retransmit |u|0 = no retransmit (default), + 1 = retransmitted +|71-71 | 1 |Spare | |x|Not used +|72-81 | 10 |DAC |dac |u|DAC = 235 or 250 +|82-87 | 6 |FID |fid |u|FID = 10 +|88-97 | 10 |Analogue |ana_int |u|0.05-36V, 0.05V step + Supply voltage to AIS Unit + 0 = Not Used +|98-107 | 10 |Analogue (ext. #1)|ana_ext1 |u|0.05-36V, 0.05V step + 0 = Not Used +|108-117 | 10 |Analogue (ext. #2)|ana_ext2 |u|0.05-36V, 0.05V step + 0 = Not Used +|118-119 | 2 |RACON status |racon |u|00 = no RACON installed + 01 = RACON not monitored + 10 = RACON operational + 11 = RACON ERROR +|120-121 | 2 |Light status |light |u|00 = no light or no monitoring + 01 = Light ON + 10 = Light OFF + 11 = Light ERROR +|122 | 1 |Health |health |b|0 = Good Health, 1 = Alarm +|123-130 | 8 |Status (external) |stat_ext |u|7 Digital Input 0=Off, 1=On + : + : + 0 Digital Input 0=Off, 1=On +|131-131 | 1 |Position status |off_pos |b|0=On position, 1=Off position +|132-135 | 4 |Spare | |x|Not used +|============================================================================== + +=== Type 7: Binary Acknowledge === + +Message type 7 is a receipt acknowledgement to the senders of a +previous messages of type 6. Total length varies between 72 and 168 +bits by 32-bit increments, depending on the number of destination +MMSIs included. + +//: Type 7 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 7 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-69 | 30 |MMSI number 1 |mmsi1 |u|9 decimal digits +|70-71 | 2 |Sequence for MMSI 1 |mmsiseq1 |u|Not used +|72-101 | 30 |MMSI number 2 |mmsi2 |u|9 decimal digits +|102-103 | 2 |Sequence for MMSI 2 |mmsiseq2 |u|Not used +|104-133 | 30 |MMSI number 3 |mmsi3 |u|9 decimal digits +|134-135 | 2 |Sequence for MMSI 3 |mmsiseq3 |u|Not used +|136-165 | 30 |MMSI number 4 |mmsi4 |u|9 decimal digits +|166-167 | 2 |Sequence for MMSI 4 |mmsiseq4 |u|Not used +|============================================================================== + +Use of the MMSI sequence fields was introduced in ITU-1371-5 to +indicate the sequence number of the Type 6 to which this responds. +In earlier versions these were spare fields. + +=== Type 8: Binary Broadcast Message === + +Message type 8 is a broadcast message with unspecified binary payload. +The St. Lawrence Seaway AIS system, the USG PAWSS system, and the Port +Authority of London use this payload for local extension +messages. <<IMO236>> and <<IMO289>> describe payload use as +international extension messages. This type is variable in length up +to a maximum of 1008 bits (up to 5 AIVDM sentence payloads). + +//: Type 8 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |Designated Area Code |dac |u|Unsigned integer +|50-55 | 6 |Functional ID |fid |u|Unsigned integer +|56 |952 |Data |data |d|Binary data, + May be shorter than 952 bits. +|============================================================================== + +Interpretation of the binary payload is controlled by DAC/FID as in +message type 6. The following is a non-exhaustive list of standardized +DAC-FID pairs in use for type 8: + +[frame="topbot",options="header"] +|============================================================================== +| DAC |FID | Sub | Source | Status | Description +| 1 | 11 | | <<IMO236>> | Deprecated/In Use | Meteorological/Hydrological Data +| 1 | 13 | | <<IMO236>> | Deprecated | Fairway closed +| 1 | 15 | | <<IMO236>> | Deprecated | Extended ship and voyage +| 1 | 17 | | <<IMO89>> | In use | VTS-Generated/Synthetic targets +| 1 | 19 | | <<IMO289>> | Standard | Marine traffic signals +| 1 | 21 | | <<IMO289>> | Standard | Weather observation from ship +| 1 | 22 | | <<IMO289>> | In use | Area notice (broadcast) +| 1 | 24 | | <<IMO289>> | Standard | Extended ship and voyage +| 1 | 26 | | <<IMO289>> | Standard | Environmental +| 1 | 27 | | <<IMO289>> | Standard | Route info broadcast +| 1 | 29 | | <<IMO289>> | Standard | Text description broadcast +| 1 | 31 | | <<IMO289>> | In use | Meteorological and Hydrological +| 200 | 10 | | <<INLAND>> | Standard | Ship static and voyage related data +| 200 | 23 | | <<INLAND>> | Standard | EMMA warning report +| 200 | 24 | | <<INLAND>> | Standard | Water levels +| 200 | 40 | | <<INLAND>> | Standard | Signal status +| 316/366 | 1 | 2 | <<SEAWAY>> | In use | Wind +| 316/366 | 1 | 1 | <<SEAWAY>> | In use | Weather station +| 316/366 | 1 | 3 | <<SEAWAY>> | In use | Water level +| 316/366 | 1 | 6 | <<SEAWAY>> | In use | Water flow +| 316/366 | 2 | 1 | <<SEAWAY>> | In use | Lockage Order +| 316/366 | 2 | 2 | <<SEAWAY>> | In use | Estimated Lock Times +| 316/366 | 32 | 1 | <<SEAWAY>> | In use | Seaway Version Message +| 366 | 1 | 4 | <<SEAWAY>> | In use | PAWS Hydro / Current +| 366 | 1 | 6 | <<SEAWAY>> | In use | PAWS Hydro / Salinity Temp +| 366 | 1 | 3 | <<SEAWAY>> | In use | PAWS Vessel Procession Order +|============================================================================== + +DAC/FID pairs are assigned separately per message type. For St. Lawrence +Seaway messages, the DAC may be 316 (Canada) or 366 (U.S.) depending +on the transmitter location. + +Note that the apparent presence of one of these DAC/FID pairs does +not guarantee that the message is structured. Decoders should +perform range validation on the structured fields and interpret the +message as unstructured if any check fails. Actual false matches with +DAC/FID = 200/10 have been observed in the wild. + +DAC/FID pairs 1/23, 1/28, and 1/30 have addressed versions described +under type 6. + +FID types 11-15 are being phased out and are not to be used after 1 +Jan 2013. The deprecated IMO236 1/11 has a different binary layout from +the IMO289 1/31. FID type 17 is in use; there is a proposed +update for it in <<IMO289>>. + +Breakdowns of Message 8 subtypes from <<IMO289>> follow. + +==== Meteorological and Hydrological Data (IMO236) ==== + +A message 8 subtype. DAC = 001 FID = 11. Fixed length, 352 bits. +This is in use and described in <<IMO236>>, but has been deprecated by +<<289>> in favor of a message with the same title but FID = 31 and a +different binary layout. <<IMO236>> specifies a maximum interval between +broadcast of this message of 12 minutes. + +//: Type 8(1/11) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |u|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 11 +|56-79 | 24 |Latitude |lat |I3|Unit = minutes * 0.001, + 0x7FFFFF = N/A (default), + E positive, W negative. +|80-104 | 25 |Longitude |lon |I3|Unit = minutes * 0.001, + 0xFFFFFF = N/A (default), + N positive, S negative. +|105-109 | 5 |Day (UTC) |day |u|1-31, 31=N/A (default) +|110-114 | 5 |Hour (UTC) |hour |u|0-23, 31=N/A (default) +|115-120 | 6 |Minute (UTC) |minute |u|0-59, 63=N/A (default) +|121-127 | 7 |Average Wind Speed |wspeed |u|10-min avg wind speed, knots, + 127 = N/A (default). +|128-134 | 7 |Gust Speed |wgust |u|10-min max wind speed, knots, + 127 = N/A (default). +|135-143 | 9 |Wind Direction |wdir |u|0-359, degrees from true north + 511 = N/A (default) +|144-152 | 9 |Wind Gust Direction|wgustdir |u|0-359, degrees fom true north + 511 = N/A (default) +|153-163 | 11 |Air Temperature |temperature |u|Dry bulb temp: 0.1 deg C + -60.0 to +60.0, + 2047 = N/A (default), +|164-170 | 7 |Relative Humidity |humidity |u|0-100%, units of 1%, + 127 = N/A (default). +|171-180 | 10 |Dew Point |dewpoint |u|-20.0 to +50.0: 0.1 deg C, + 1023 = N/A (default), +|181-189 | 9 |Air Pressure |pressure |u|800-1200hPa: units 1hPa, + 511 = N/A (default). +|190-191 | 2 |Pressure Tendency |pressuretend|e|0 = steady, + 1 = decreasing, + 2 = increasing, + 3 - N/A (default). +|192-199 | 8 |Horiz. Visibility |visibility |U1|0-25.0, units of 0.1nm + 255 = N/A (default) +|200-208 | 9 |Water Level |waterlevel |I1|-10.0 to +30.0 in 0.1m, + 511 = N/A (default). +|209-210 | 2 |Water Level Trend |leveltrend |e|0 = steady, + 1 = decreasing, + 2 = increasing, + 3 - N/A (default). +|211-218 | 8 |Surface Current Speed |cspeed |U1|0.0-25.0 knots: units 0.1 knot +|219-227 | 9 |Surface Current Direction |cdir |u|0-359: deg from true north, + 511 = N/A (default) +|228-235 | 8 |Current Speed #2 |cspeed2 |U1|0.0-25.0 in units of 0.1 knot, + 255 = N/A (default). +|236-244 | 9 |Current Direction #2 |cdir2 |u|0-359: deg. fom true north, + 511 = N/A (default) +|245-249 | 5 |Measurement Depth #2 |cdepth2 |U1|0-30m down: units 0.1m, + 31 = N/A (default). +|250-257 | 8 |Current Speed #3 |cspeed3 |U1|0.0-25.0: units of 0.1 knot, + 255 = N/A (default). +|258-266 | 9 |Current Direction #3 |cdir3 |u|0-359: degrees fom true north, + 511 = N/A (default). +|267-271 | 5 |Measurement Depth #3 |cdepth3 |U1|0-30m down: units 0.1m, + 31 = N/A (default). +|272-279 | 8 |Wave height |waveheight|U1|0-25m: units of 0.1m, + 255 = N/A (default). +|280-285 | 6 |Wave period |waveperiod|u|Seconds 0-60: + 63 = N/A (default). +|286-294 | 9 |Wave direction |wavedir |u|0-359: deg. fom true north, + 511 = N/A (default). +|295-302 | 8 |Swell height |swellheight|U1|0-25m: units of 0.1m + 255 = N/A (default). +|303-308 | 6 |Swell period |swellperiod|u|Seconds 0-60: + 63 = N/A (default). +|309-317 | 9 |Swell direction |swelldir |u|0-359: deg. fom true north, + 511 = N/A (default). +|318-321 | 4 |Sea state |seastate |e|See "Beaufort Scale" +|322-331 | 10 |Water Temperature |watertemp |U1|-10.0 to 50.0: units 0.1 C, + 1023 = N/A (default). +|332-334 | 3 |Precipitation |preciptype |e|See "Precipitation Types" +|335-343 | 9 |Salinity |salinity |U1|0.0-50.0%: units 0.1%, + 511 = N/A (default) +|344-345 | 2 |Ice |ice |e| 0 = No + 1 = Yes + 2 = (reserved for future use) + 3 = not available = default +|346-351 | 6 |Spare | |x|Not used +|============================================================================== + +<<IMO236>> says "If there is no data available, default value to be +transmitted is the highest available binary value for that particular +data field.", the above table reflects that. The day, hour and minute +have to be considered not available when all three are set to their +individual "N/A" value. For the latitude and the longitude, the +highest positive value is used, as the highest available binary value +for a signed integer is -1, which would forbid the -0.001/-0.001 +position. The replacement FID=31 message has different default values +that remove any ambiguities. + +<<IMO236>> gives the length of this message as 352, but lists only 336 +payload bits. + +Water level is deviation from local chart datum and includes tide. + +The waveheight field is labeled as "Significant" in <<IMO236>>, +for whatever that means. + +The seastate field has a note in <<IMO236>> reading "(manual input?)"? + +WMO 306 Code table 4.201 specifies the following precipitation type values: + +.Precipitation Types +[width="50%",frame="topbot",options="header"] +|=================================== +|Code |Precipitation Type +|0 |Reserved +|1 |Rain +|2 |Thunderstorm +|3 |Freezing rain +|4 |Mixed/ice +|5 |Snow +|6 |Reserved +|7 |N/A (default) +|=================================== + +.Beaufort Scale +[width="50%",frame="topbot",options="header"] +|=========================================================================== +|Scale|Description | Sea Conditions +|0 |Calm |Flat. +|1 |Light air |Ripples without crests. +|2 |Light breeze |Small wavelets. +| Crests of glassy appearance, not breaking. +|3 |Gentle breeze |Large wavelets. +| Crests begin to break; scattered whitecaps. +|4 |Moderate breeze|Small waves. +|5 |Fresh breeze |Moderate (1.2 m) longer waves. Some foam and spray. +|6 |Strong breeze |Large waves with foam crests and some spray. +|7 |High wind |Sea heaps up and foam begins to streak. +|8 |Gale |Moderately high waves with breaking crests +| forming spindrift. Streaks of foam. +|9 |Strong gale |High waves (6-7 m) with dense foam. +| Wave crests start to roll over. Considerable spray. +|10 |Storm |Very high waves. The sea surface is white and there +| is considerable tumbling. Visibility is reduced. +|11 |Violent storm |Exceptionally high waves. +|12 |Hurricane force|Huge waves. Air filled with foam and spray. Sea +| completely white with driving spray. Visibility +| greatly reduced. +|13 | |N/A (default) +|14-15| |Reserved +|=========================================================================== + +==== Fairway Closed ==== + +This message should be broadcast from shore stations to inform ships, +in particular to give guidance to large vessels about temporary closed +fairways or sections in ports. + +A message 8 subtype. DAC = 001 FID = 13. Fixed length, 472 bits. +Described in <<IMO236>> but deprecated by <<IMO289>>. + +//: Type 8(1/13) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 13 +|56-175 |120 |Reason For Closing |reason |t|20 6-bit characters +|176-295 |120 |Location Of Closing From|closefrom|t|20 6-bit characters +|296-415 |120 |Location of Closing To |closeto |t|20 6-bit characters +|416-425 | 10 |Radius extension |radius |u|0-1000, 10001 = N/A (default) +|426-427 | 2 |Unit of extension |extunit |u|0=m, 1=km, 2=nm, 3=cables +|428-432 | 5 |From day (UTC) |fday |u|1-31, 0=N/A (default) +|433-436 | 4 |From month (UTC) |fmonth |u|1-12, 0=N/A (default) +|437-441 | 5 |From hour (UTC) |fhour |u|0-23, 24=N/A (default) +|442-447 | 6 |From minute (UTC) |fminute |u|0-59, 60=N/A (default) +|448-452 | 5 |To day (UTC) |tday |u|1-31, 0=N/A (default) +|453-456 | 4 |To month (UTC) |tmonth |u|1-12, 0=N/A (default) +|457-461 | 5 |To hour (UTC) |thour |u|0-23, 24=N/A (default) +|462-467 | 6 |To minute (UTC) |tminute |u|0-59, 60=N/A (default) +|468-471 | 4 |Spare | |x|Not used +|============================================================================== + +No default is specified for the radius field in the standard. + +==== IMO236 Extended Ship Static and Voyage Related Data ==== + +This message should be used by a ship to report the height over keel. + +A message 8 subtype. DAC = 001 FID = 15 in <<IMO236>>. Fixed length, 72 bits. +Deprecated in <<IMO289>>. + +//: Type 8(1/15) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 15 +|55-66 | 11 |Air Draught |airdraught|u|Height in meters, + 0 = N/A (default), + 2047 = >= 2047 m, +|67-71 | 5 |Spare | |x|Not used +|============================================================================== + +==== VTS-Generated/Synthetic targets ==== + +A message 8 subtype. DAC = 001 FID = 17. Variable length: 176-536 +bits. This message is laid out identically in <<IMO236>> and +<<IMO289>>. In <<IMO236>> it is titled "Pseudo-AIS Targets". + +//: Type 8(1/17) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 17 +|56 | | |targets |a4|Synthetic targets array +|0-1 | 2 |Identifier type |idtype |e|0 = id is the MMSI number, + 1 = id is the IMO number, + 2 = id is the call sign, + 3 = Other (default). +|2-43 | 42 |Target identifier |id |u|Target ID data. +|44-47 | 4 |Spare | |x|Not used +|48-71 | 24 |Latitude |lat |I3|Minutes * 0.001, + 91000 = N/A (default), + N positive, S negative. +|72-96 | 25 |Longitude |lon |I3|Minutes * 0.001, + 181000 = N/A (default), + E positive, W negative. +|97-105 | 9 |Course Over Ground |course |u|0-359 deg from true north, + 360 = N/A (default). +|106-111 | 6 |Time Stamp |second |u|Second of UTC timestamp. +|112-121 | 10 |Speed Over Ground |speed |u|0-254 in knots, 255 = N/A. +|============================================================================== + +The interpretation of the target identifier field depends on the +preceding type key. For 0 and 1 it is a big-endian unsigned binary +integer (as shown above). For type 2 and 3 it is 6-bit ASCII text. An +unknown target is expressed by type 3 and the string "@@@@@@@". + +OPEN-QUESTION: <<IMO289>> says: "When MMSI or IMO number is used, the +least significant bit should equal bit zero of the Target Identifier." +It is unclear how "bit zero" is to be interpreted, but it is not +possible to reconcile interpreting it as the leading bit of the field +with AIS big-endian encoding. Settling this awaits live testing. + +The trailing eight fields may be repeated up to 3 times (for a total of 1 to 4 +field groups) to represent up to 4 targets. + +==== IMO289 Marine Traffic Signal ==== + +This message provides information on a signal station and status of +the control signal at the entrance of a harbour or channel where the +shipping direction controlled so that the traffic flow be kept in +order. + +A message 8 subtype described in <<IMO289>>. DAC = 001 FID = 19. Fixed +length: 360 bits. + +//: Type 8(1/19) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |u|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 19 +|56-65 | 10 |Message Linkage ID |linkage |u|Unsigned integer +|66-185 | 120 |Name of Signal Station|station |t|20 6-bit chars +|186-210 | 25 |Longitude |lon |I3|Unit = minutes * 0.001 + 181000 = N/A (default) + E positive, W negative. +|211-234 | 24 |Latitude |lat |I3|Unit = minutes * 0.001 + 91000 = N/A (default) + N positive, S negative. +|235-236 | 2 |Status of Signal |status |u|0=N/A (default + 1 = In regular service + 2 = Irregular service + 3 = Reserved for future use +|237-241 | 5 |Signal In Service |signal |e|See "Marine Traffic Signals" +|242-246 | 5 |UTC hour |hour |u|0-23, 24=N/A (default) +|247-252 | 6 |UTC minute |minute |u|0-59, 60=N/A (default) +|253-257 | 5 |Expected Next Signal |nextsignal|e|See "Marine Traffic Signals" +|258-359 | 102 |Spare | |x|Not used +|============================================================================== + +.Marine Traffic Signals +[width="50%",frame="topbot",options="header"] +|=========================================================================== +|Code |Position Fix Type +| 0 |N/A (default) +| 1 |IALA port traffic signal 1: Serious emergency – all vessels to stop +| or divert according to instructions. +| 2 |IALA port traffic signal 2: Vessels shall not proceed. +| 3 |IALA port traffic signal 3: Vessels may proceed. One way traffic. +| 4 |IALA port traffic signal 4: Vessels may proceed. Two way traffic. +| 5 |IALA port traffic signal 5: A vessel may proceed only when it has +| received specific orders to do so. +| 6 |IALA port traffic signal 2a: Vessels shall not proceed, except that +| vessels which navigate outside the main channel need not comply with +| the main message. +| 7 |IALA port traffic signal 5a: A vessel may proceed only when it has +| received specific orders to do so; except that vessels which navigate +| outside the main channel need not comply with the main message. +| 8 |Japan Traffic Signal - I = "in-bound" only acceptable. +| 9 |Japan Traffic Signal - O = "out-bound" only acceptable. +| 10 |Japan Traffic Signal - F = both "in- and out-bound" acceptable. +| 11 |Japan Traffic Signal - XI = Code will shift to "I" in due time. +| 12 |Japan Traffic Signal - XO = Code will shift to "O" in due time. +| 13 |Japan Traffic Signal - X = Vessels shall not proceed, except a vessel +| which receives the direction from the competent authority. +|14-31|Reserved +|=========================================================================== + +==== IMO289 Weather observation report from ship ==== + +There are two variants of this message. They are distinguished by bit 56, +the WMO bit. Field layouts after that bit vary depending on it. + +A message 8 subtype described in <<IMO289>>. DAC = 001 FID = 21. Fixed +length: 360 bits. + +//: Type 8(1/21) +.Weather observation report from ship: Non-WMO variant +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 21 +|56-56 | 1 |Variant |wmo |b|Constant: 0 in this variant +|57-176 | 120 |Location |location |t|20 6-bit characters +|177-201 | 25 |Longitude |lon |I3|Unit = minutes * 0.001, + 181000 = N/A (default), + E positive, W negative. +|202-225 | 24 |Latitude |lat |I3|Unit = minutes * 0.001, + 91000 = N/A (default), + N positive, S negative. +|226-230 | 5 |UTC Day |day |u|1-31, 0=N/A (default) +|231-235 | 5 |UTC hour |hour |u|0-23, 24=N/A (default) +|236-241 | 6 |UTC minute |minute |u|0-59, 60=N/A (default) +|242-245 | 4 |Present Weather |weather |u|wmocode: 0-15 +|246-246 | 1 |Visibility Limit |vislimit |b|See below +|247-253 | 7 |Horiz. Visibility |visibility |U1|0.0-12.6nm, units = nm*0.1, + 127 = N/A (default). +|254-260 | 7 |Relative Humidity |humidity |u|0-100%: units of 1%, + 127 = N/A (default). +|261-267 | 7 |Average Wind Speed |wspeed |u|10-min avg wind speed knots, + 127 = N/A (default). +|268-276 | 9 |Wind Direction |wdir |u|0-359, deg. fom true north, + 360 = N/A (default). +|277-285 | 9 |Air Pressure |pressure |u|800-1200hPa: units 1hPa, + 402 = pressure >= 1201 hPa, + 403 - N/A (default), + else add 400 to value, +|286-289 | 4 |Pressure Tendency |pressuretend|u|WMO FM13 code +|290-300 | 11 |Air Temperature |airtemp |I1|Dry bulb temp: units 0.1C, + -60.0 to +60.0, + -1024 = N/A (default). +|301-310 | 10 |Water Temperature |watertemp |I1|-10.0 to 50.0 in 0.1 C, + 601 = N/A (default), + else -10C after scaling. +|311-316 | 6 |Wave period |waveperiod |u|Seconds: 0-60, + 63 = N/A (default). +|317-324 | 8 |Wave height |waveheight |U1|0-25m in units of 0.1m, + 255 = N/A (default). +|325-333 | 9 |Wave direction |wavedir |u|0-359: deg. fom true north, + 360 = N/A (default). +|334-341 | 8 |Swell height |swellheight |U1|0-25m: units 0.1m, + 255 = N/A (default) +|342-350 | 9 |Swell direction |swelldir |u|0-359: deg, fom true north, + 360 = N/A (default). +|351-356 | 6 |Swell period |swellperiod |u|Seconds: 0-60, + 63 = N/A (default). +|357-359 | 3 |Spare | |x|Not used +|============================================================================== + +The vislimit bit, when on, indicates that the maximum range of the +visibility equipment was reached and the visibility reading shall be +regarded as > x.x NM. + +The standard (<<IMO289>>) does not list the WMO FM13 codes. +The following table applies: + +.Weather observation report from ship: WMO Code 45501 +[width="50%",frame="topbot",options="header"] +|=========================================================================== +|Code |Precipitation Type +| 0 |Clear (no clouds at any level) +| 1 |Cloudy +| 2 |Rain +| 3 |Fog +| 4 |Snow +| 5 |Typhoon/hurricane +| 6 |Monsoon +| 7 |Thunderstorm +| 8 |N/A (default) +| 9-15|Reserved for future use +|=========================================================================== + +.Weather observation report from ship: WMO variant +[frame="topbot",options="header"] +|============================================================================== +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 21 +|56-56 | 1 |Variant |wmo |u|Constant: 1 in this variant +|57-72 | 16 |Longitude |lon |I3|Unsigned: minutes * 0.01, + E positive, W negative, + Lon = (value / 100) – 180, + 65536 = N/A (default). +|73-87 | 15 |Latitude |lat |I3|Unsigned: minutes * 0.01, + N positive, S negative, + Lat = (value / 100) – 90, + 32767 = N/A (default). +|88-91 | 4 |UTC Month |month |u|1-12, 15=N/A (default) +|92-97 | 6 |UTC Day |day |u|1-31, 63=N/A (default) +|98-102 | 5 |UTC hour |hour |u|0-23, 31=N/A (default) +|103-105 | 3 |UTC minute |minute |u|0-50, 7=N/A (default), + Minute = (value * 10). +|106-112 | 7 |Course Over Ground |course |u|0-359, unit = 1 degree, + average over last 10 minutes. +|113-117 | 5 |Speed Over Ground |speed |U1|0-14.5m/s: + SOG = (value * 0.5) for 0-29, + 30 = 15 m/s and more, + average over last 10 minutes. + 31 = N/A (default) +|118-124 | 7 |Heading of the ship |heading |u|5-360: units of 5 degrees, + HDT = (value * 5) for 1-72, + average over last 10 minutes. + 127 = N/A (default) +|125-135 | 11 |Pressure at sea level |pressure|U1|90-1100 hPa: + P = (value/10)+900 for 0-2000 +|136-145 | 10 |Pressure Change |pdelta |U1|-50-+50hPa: units of 0.1hPa, + d = (value/10)-50 for 0-100, + averaged over last 3 hours. + 1023 = N/A (default) +|146-149 | 4 |Pressure Tendency |ptend |u|WMO BUFR table 010063: + Averaged over last 3 hours, + 0-8, 15 = N/A. +|150-156 | 7 |True Wind Direction |twinddir|u|005-360: deg: + average over last 10 minutes, + dir = (value*5), value 1-72, + 0 = calm, + 127 = N/A (default). +|157-164 | 8 |True Wind Speed |twindspeed|u|0-127 m/s: + average over last 10 mins, + speed = value * 0.5, + 255 = N/A (default). +|165-171 | 7 |Relative Wind Direction|rwinddir |u|005-360 deg: + average over last 10 mins, + dir = (value*5) for 1-72, + 0 = calm, + 127 = N/A (default). +|172-179 | 8 |Relative Wind Speed |rwindspeed|U1|0-127 m/s: + average over last 10 mins, + speed = val*0.5 for 0-254, + 255 = N/A (default). +|180-187 | 8 |Maximum Gust Speed |mgustspeed|U1|0-127 m/s: + speed = val*0.5 for 0-254, + 255 = N/A (default), +|188-194 | 7 |Maximum Gust Direction |mgustdir |u|05-360 deg: + dir = (value*5) for 1-72, + 0 = calm, + 127 = N/A (default). +|195-204 | 10 |Air Temperature |airtemp |U1|Dry bulb temp: units 0.1C, + 223-323K (c.-50C - +50C). + T = (val/10)+223 for 0-1000, + 1023 = N/A (default). +|205-211 | 7 |Relative Humidity |humidity |u|0-100%: units of 1%, + 127 = N/A (default). +|212-220 | 9 |Sea Surface Temperature|surftemp |U1|268-318K (c.-5C - +45C): + T = (val/10)+268 for 0-500, + 511 = N/A (default). +|221-226 | 6 |Horiz. Visibility |visibility|U2|0-50000m, + Vis = (val**2)*13.073 for 0-62, + 63 = N/A (default). +|227-235 | 9 |Present Weather |weather |u|BUFR table 020003: + Codes 0-510, + 511 = N/A (default). +|236-240 | 5 |Past Weather 1 |pweather1 |u|BUFR table 020005: + Codes 0-30, + 31 = N/A (default). +|241-245 | 5 |Past Weather 2 |pweather2 |u|BUFR table 020004: + Codes 0-30, + 31 = N/A (default). +|246-249 | 4 |Total Cloud Cover |totalcloud|u|0-100%: + Cover = val * 10% for 0-10, + 15 = N/A (default.) +|250-253 | 4 |Cloud amount (low) |lowclouda |u|0-14: BUFR table 020011: + 15 = N/A (default). +|254-259 | 6 |Cloud type (low) |lowcloudt |u|0-62: BUFR table 020012: + 63 = N/A (default). +|260-265 | 6 |Cloud type (middle) |midcloudt |u|0-62: BUFR table 020012: + 63 = N/A (default). +|266-271 | 6 |Cloud type (high) |highcloudt|u|0-62: BUFR table 020012: + 63 = N/A (default). +|272-278 | 7 |Height of cloud base |cloudbase |U2|0-2500m: + h = (value**2)*.0.16 for 0-125, + 126 = more than 2500m, + 127 = N/A (default). +|279-283 | 5 |Period of Wind Waves |wwperiod |u|0-30s: + 31 = N/A (default). +|284-289 | 6 |Height of Wind Waves |wwheight |u|Height in meters: 0-30, + h = (value * 0.5) for 0-60, + 63 = N/A (default). +|290-295 | 6 |First Swell Direction |swelldir1 |u|10-360 deg: + dir = (value*10) for 1-36, + 0 = calm, + 63 = N/A (default). +|296-300 | 5 |First Swell Period |swperiod1 |u|Period in seconds: 0-30, + 31 = N/A (default). +|301-306 | 6 |First Swell Height |swheight1 |U1|Height in meters: 0-30, + h = (value * 0.5) for 0-60, + 63 = N/A (default). +|307-312 | 6 |Second Swell Direction |swelldir2 |u|10-360 deg: + dir = (value*10) for 1-36, + 0 = calm, + 63 = N/A (default). +|313-317 | 5 |Second Swell Period |swperiod2 |u|Period in seconds: 0-30, + 31 = N/A (default). +|318-323 | 6 |Second Swell Height |swheight2 |U1|Height in meters: 0-30, + h = (value * 0.5) for 0-60, + 63 = N/A (default). +|324-330 | 7 |Ice deposit (thickness)|icedeposit|u|Thickness: 0-126cm, + 127 = N/A (default). +|331-333 | 3 |Rate of Ice Accretion |icerate |u|0-6: BUFR table 020032: + 7 = N/A (default). +|334-336 | 3 |Cause of Ice Accretion |icecause |u|0-6: BUFR table 020033: + 7 = N/A (default). +|337-341 | 5 |Sea Ice Concentration |seaice |u|0-30: BUFR table 020034: + 31 = N/A (default). +|342-345 | 4 |Amount and Type of Ice |icetype |u|0-14: BUFR table 020035: + 15 = N/A (default). +|346-350 | 5 |Ice Situation |icestate |u|0-30: BUFR table 020036: + 31 = N/A (default). +|351-355 | 5 |Ice Development |icedevel |u|0-30: BUFR table 020037: + 31 = N/A (default). +|356-359 | 4 |Bearing of Ice Edge |icebearing|u|Bearing: 45-360 deg, + dir = (value*45) for 1-8, + 15 = N/A (default). +|============================================================================== + +The "minute" entry actually only identifies the end of a 10-minute interval. + +In <<IMO289>>, the Latitude formula is given as "Lat = (value / 100) – 9000". +This is incorrect; the decrement needs to be 90 for the range to be -90..+90. + +Swell directions are arrival directions. + +==== IMO289 Area Notice (broadcast) ==== + +This should be used to broadcast time- and location-dependent information about +hazards to navigation. For information-lifetime restrictions and usage +guidance, refer to <<ITU1371>>. + +A message 8 subtype. DAC = 001 FID = 22. 196 to 981 bits. There is a +related Message 6 subtype for addressed use. + +The message consists of a fixed-length header of 111 bits, followed by 1 to +10 sub-area indications which are fixed-length records 87 bits long. Here +is the message header format: + +//: Type 8(1/22) +.Area Notice (addressed) message header +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 22 +|56-65 | 10 |Message Linkage ID |linkage |u|Unsigned integer +|66-72 | 7 |Notice Description |notice |u|See table below +|73-76 | 4 |Month (UTC) |month |u|1-12; 0 = N/A (default) +|77-81 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|82-86 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|87-92 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|93-110 | 18 |Duration |duration |In minutes, + 262143 = N/A (default), + 0 = cancel this notice. +|143 | | |subarea |a10|Subarea array +|0-2 | 2 | |shape |u|Subarea shape +|3-86 | 85 |Subarea Payload |payload |d|Subarea payload +|============================================================================== + +The sub-area indications are as described under the addressed form, +message type 6 with DAC = 1 and FID = 23. + +==== IMO289 Extended Ship Static and Voyage Related Data ==== + +This message should be used by a ship to report the height over keel. + +A message 8 subtype. DAC = 001 FID = 24 in <<IMO289>>. Fixed length, 360 bits. +Replaces a deprecated trial message from <<IMO236>>. + +//: Type 8(1/24) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in CNB +|8-37 | 30 |Source MMSI |mmsi |u|9 digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 24 +|56-65 | 10 |Message Linkage ID |linkage |u|Unsigned integer +|66-78 | 13 |Air Draught |airdraught |u|Unsigned int, in 0.1m + 1-81.9 m. + 0 = N/A (default) + 81.91 = >= 81.91 m +|79-108 | 30 |Last Port Of Call |lastport |t|5 6-bit chars, UN locode +|109-138 | 30 |Next Port Of Call |nextport |t|5 6-bit chars, UN locode +|139-168 | 30 |Second Port Of Call |secondport |t|5 6-bit chars, UN locode +|169-170 | 2 |AIS Class A |ais_state |e|See "SOLAS Status" +|171-172 | 2 |Automatic Tracking Aid |ata_state |e|See "SOLAS Status" +|173-174 | 2 |BNWAS |bnwas_state |e|See "SOLAS Status" +|175-176 | 2 |ECDIS Back-up |ecdisb_state |e|See "SOLAS Status" +|177-178 | 2 |Paper Nautical Chart |chart_state |e|See "SOLAS Status" +|179-180 | 2 |Echo sounder |sounder_state |e|See "SOLAS Status" +|181-182 | 2 |Electronic plotting aid|epaid_state |e|See "SOLAS Status" +|183-184 | 2 |Emergency steering gear|steer_state |e|See "SOLAS Status" +|185-186 | 2 |GNSS |gnss_state |e|See "SOLAS Status" +|187-188 | 2 |Gyro compass |gyro_state |e|See "SOLAS Status" +|189-190 | 2 |LRIT |lrit_state |e|See "SOLAS Status" +|191-192 | 2 |Magnetic compass |magcomp_state |e|See "SOLAS Status" +|193-194 | 2 |NAVTEX |navtex_state |e|See "SOLAS Status" +|195-196 | 2 |Radar (ARPA) |arpa_state |e|See "SOLAS Status" +|197-198 | 2 |Radar (S-band) |sband_state |e|See "SOLAS Status" +|199-200 | 2 |Radar (X-band) |xband_state |e|See "SOLAS Status" +|201-202 | 2 |Radio HF |hfradio_state |e|See "SOLAS Status" +|203-204 | 2 |Radio INMARSAT |inmarsat_state|e|See "SOLAS Status" +|205-206 | 2 |Radio MF |mfradio_state |e|See "SOLAS Status" +|207-208 | 2 |Radio VHF |vhfradio_state|e|See "SOLAS Status" +|209-210 | 2 |Speed Log over ground |grndlog_state |e|See "SOLAS Status" +|211-212 | 2 |Speed Log through water|waterlog_state|e|See "SOLAS Status" +|213-214 | 2 |THD |thd_state |e|See "SOLAS Status" +|215-216 | 2 |Track control system |tcs_state |e|See "SOLAS Status" +|217-218 | 2 |VDR/S-VDR |vdr_state |e|See "SOLAS Status" +|219-220 | 2 |Reserved | |x|Not used +|221-224 | 4 |Ice Class |iceclass |e|See "Ice Class" +|225-242 | 18 |Shaft Horsepower |horsepower |u|Total ship HP: 1hp units, + 262,142 = >= 262,142hp, + 262,143 = N/A (default). +|243-254 | 12 |VHF Working Channel |vhfchan |u|Channel number, + 0 = N/A (default). +|255-296 | 42 |Lloyd's Ship Type |lshiptype |t|7 six-bit characters +|297-314 | 18 |Gross Tonnage |tonnage |u|0-262,141, + 262,142 = >= 262,142hp, + 262,143 = N/A (default). +|315-316 | 2 |Laden or Ballast |lading |e|0 = N/A (default), + 1 = Laden, + 2 = Ballast, + 3 = Not in use. +|317-318 | 2 |Heavy Fuel Oil Bunkered|heavyoil |e|0 = N/A (default), + 1 = No, + 2 = Yes, + 3 = Not in use. +|319-320 | 2 |Light Fuel Oil Bunkered|lightoil |e|0 = N/A (default), + 1 = No, + 2 = Yes, + 3 = Not in use. +|321-322 | 2 |Diesel Oil Bunkered |dieseloil |e|0 = N/A (default), + 1 = No, + 2 = Yes, + 3 = Not in use. +|323-336 | 14 |Total Bunker Oil |totaloil |u|0-16381 in tonnes, + 16382 = >= 16382 tonnes, + 16382 = N/A (default). +|337-349 | 13 |Number of persons |persons |u|0 = N/A (default), + 1-8190, + 8191 = >= 8191. +|350-359 | 10 |Spare | |x|Not used +|============================================================================== + +The special value of 81.91 for air draught is probably a drafting +error in <<IMO289>>, as the scaled field does not have the precision +required to represent it. The actual special value is unknown. + +The 2-bit _state fields describe the operational state of various sorts of +SOLAS-required navigational equipment. GNSS systems may include GPS, Loran-C, or GLONASS. BNWAS is the Bridge Navigational Watch Alarm System. THD is a +Transmitting Heading Device. Paper Nautical Chart state is officially +"ECDIS/Paper Nautical Chart" state in <<IMO289>>. Status codes should be +interpreted according to the following table: + +.SOLAS Status +[width="50%",frame="topbot",options="header"] +|============================================================================= +|Code |Meaning +|0 |Not available or requested (default) +|1 |Equipment operational +|2 |Equipment not operational +|3 |No data (equipment may or may not be on board/or its status is unknown) +|============================================================================= + +.Ice Class +[width="50%",frame="topbot",options="header"] +|============================================================================= +|Code |Meaning +|0 |Not classified +|1 |IACS PC 1 +|2 |IACS PC 2 +|3 |IACS PC 3 +|4 |IACS PC 4 +|5 |IACS PC 5 +|6 |IACS PC 6 / FSICR IA Super / RS Arc5 +|7 |IACS PC 7 / FSICR IA / RS Arc4 +|8 |FSICR IB / RS Ice3 +|9 |FSICR IC / RS Ice2 +|10 |RS Ice1 +|11-14|Reserved for future use +|15 |Not available = default +|============================================================================= + +ACS = International Association of Classification Societies + +PC = Polar Class. For further details, see IACS Req. 2007 Requirements +concerning POLAR CLASS and MSC/Circ.1056 and MEPC/Circ.399 on +Guidelines for ships operating in Arctic ice-covered waters. + +FSICR = Finnish-Swedish Ice Class Rules. For further details, see +Finnish Maritime Administration's Bulletin No.10/10.12.2008 Ice class +regulations 2008 (Finnish-Swedish ice class rules). Note: Authorized +classification society equivalents for the Finnish-Swedish Ice Class +Rules should also be recognized, as issued in the Finnish Maritime +Administration's Bulletin No.4/2.4.2007 (as amended). Both bulletins +can be found at www.fma.fi. + +RS = Russian Maritime Register of Shipping. For further details see +Rules for the classification and construction of seagoing ships, +Edition 2008. + +VHF channel number is encoded according to Recommendation ITU-R M.1084. + +The lshiptype field uses Lloyd's Register STATCODE 5 encoding. + +==== IMO289 Environmental ==== + +A message 8 subtype. DAC = 001 FID = 26. Variable length: 168-1008 bits. + +//: Type 8(1/26) +.Environmental message header +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 26 +|56 | | |reports |a5|Sensor records array +|0-3 | 4 |Sensor Report Type |sensor |u|See table below +|4-8 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|9-13 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|14-19 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|20-26 | 7 |Site ID |site |u|Binary ID of sensor site +|27-111 | 85 |Sensor payload |payload |d|Sensor payload data +|============================================================================== + +The fixed header is followed by 1-5 sensor records, each 112 bits +long. The Sensor Report Type is interpreted as follows, and controls +the interpretation of the sensor payload data. + +.Sensor report types +[frame="topbot",options="header"] +|============================================================================== +| 0 | Site location +| 1 | Station ID +| 2 | Wind +| 3 | Water level +| 4 | Current flow (2D) +| 5 | Current flow (3D) +| 6 | Horizontal current flow +| 7 | Sea state +| 8 | Salinity +| 9 | Weather +| 10| Air gap/Air draft +| 11| (reserved for future use) +|============================================================================== + +Here are the payload types for each variant: + +.Site location payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-27 | 28 |Longitude |lon |I4|As in Common Navigation Block +|28-54 | 27 |Latitude |lat |I4|As in Common Navigation Block +|55-65 | 11 |Altitude |alt |u|Sensor altitude above MSL, + 0-200 in units of 0.1m, + 2001 = 200.1 m or higher, + 2002 = N/A (default), + 2003-2046 reserved. +|66-69 | 4 |Sensor owner |owner |e|See "Sensor Owner Codes" +|70-72 | 3 |Data timeout |timeout |e|See "Data Timeout Codes" +|73-84 | 12 |Spare | |x|Not used +|============================================================================== + +.Sensor Owner Codes +[frame="topbot",options="header"] +|============================================================================== +| 0 | Unknown (default) +| 1 | Hydrographic office +| 2 | Inland waterway authority +| 3 | Coastal directorate +| 4 | Meteorological service +| 5 | Port Authority +| 6 | Coast guard +| 7-13 | (reserved for future use) +| 14 | (reserved for regional use) +|============================================================================== + +.Data Timeout Codes +[frame="topbot",options="header"] +|============================================================================== +| 0 | No time period (default) +| 1 | 10 minutes +| 2 | 1 hour +| 3 | 6 hours +| 4 | 12 hours +| 5 | 24 hours +| 6-7 | (reserved for future use) +|============================================================================== + +.Station ID payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +| 0 | 84 |Name |name |t|14 chars of six-bit ASCII. +| 84 | 1 |Spare | |x|Not used +|============================================================================== + +.Wind report payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-6 | 7 |Average Wind Speed |wspeed |u|10-min avg wind speed, + 0-120 in 1-knot units, + 121 = 121 knots or greater, + 122 = N/A (default), + 123-126 = reserved. +|7-13 | 7 |Wind Gust |wgust |u|10-min max wind speed, + 0-120 in 1-knot units, + 121 = 121 knots or greater, + 122 = N/A (default), + 123-126 = reserved. +|14-22 | 9 |Wind Direction |wdir |u|0-359, degrees fom true north + >=360 = N/A (default) +|23-31 | 9 |Wind Gust Direction|wgustdir |u|0-359, degrees fom true north + >=360 = N/A (default) +|32-34 | 3 |Sensor Description |sensortype |e|See "Sensor Types" +|35-41 | 7 |Forecast Wind Speed|fwspeed |u|Predicted average wind speed, + 0-120 in 1-knot units, + 121 = 121 knots or greater, + 122 = N/A (default), + 123-126 = reserved. +|42-48 | 7 |Forecast Wind Gust |fwgust |u|Predicted max wind speed, + 0-120 in 1-knot units, + 121 = 121 knots or greater, + 122 = N/A (default), + 123-126 = reserved. +|49-57 | 9 |Forecast Wind Direction|fwdir |u|0-359, degrees fom true north + >=360 = N/A (default) +|58-62 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|63-67 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|68-73 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|74-81 | 8 |Duration |duration |u|Forecast duration in minutes, + 255 = N/A (default), + 0 = cancel forecast. +|82-84 | 3 |Spare | |x|Not used +|============================================================================== + +The timestamp group is intended as a valid time of forecast. + +.Sensor Types +[frame="topbot",options="header"] +|============================================================================== +| 0 | No data (default) +| 1 | Raw real time +| 2 | Real time with quality control +| 3 | Predicted (based on historical statistics) +| 4 | Forecast (predicted, refined with real-time information) +| 5 | Nowcast (a continuous forecast) +| 6 | (reserved for future use) +| 7 | Sensor not available +|============================================================================== + +.Water level report payload +[frame="topbot",options="header"] +|============================================================================== +|0-0 | 1 |Water Level Type |absolute |b|False if relative to + reference datum. +|1-16 | 16 |Water Level |level |i|In 0.001 meter steps, + -327.67 to 327.67, + -32767 = -327.67m or less, + 32767 = 327.67m or more, + -32768 = N/A (default). +|17-18 | 2 |Water Level Trend |leveltrend |u| 0 = increasing, + 1 = decreasing, + 2 = steady, + 3 = N/A (default). +|19-23 | 5 |Vertical Reference Datum |datum |u|See table below +|24-26 | 3 |Sensor Description |sensortype |e|See "Sensor Types" +|27-27 | 1 |Forecast Water Level Type|absolute |b|False if relative to + reference datum. +|28-43 | 16 |Forecast Water Level |level |i|In 0.001 meter steps, + -327.67 to 327.67, + -32767 = -327.67m or less, + 32767 = 327.67m or more, + -32768 = N/A (default). +|44-48 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|49-53 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|54-59 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|60-67 | 8 |Duration |duration |u|Forecast duration in minutes, + 255 = N/A (default), + 0 = cancel forecast. +|68-84 | 17 |Spare | |x|Not used +|============================================================================== + +IMO289 says water level is in 0.1m steps, but this is incompatible with the +two digits of precision in the range. + +The timestamp group is intended as a valid time of forecast. + +.Vertical Reference Datum +[frame="topbot",options="header"] +|============================================================================== +| 0 | Mean Lower Low Water (MLLW) +| 1 | International Great Lakes Datum (IGLD-85) +| 2 | Local river datum +| 3 | Station Datum (STND) +| 4 | Mean Higher High Water (MHHW) +| 5 | Mean High Water (MHW) +| 6 | Mean Sea Level (MSL) +| 7 | Mean Low Water (MLW) +| 8 | National Geodetic Vertical Datum (NGVD-29) +| 9 | North American Vertical Datum (NAVD-88) +| 10 | World Geodetic System (WGS-84) +| 11 | Lowest Astronomical Tide (LAT) +| 12 | pool +| 13 | gauge +| 14 | Unknown/not available (default) +| 15-30| Reserved for future use +|============================================================================== + +.Current flow (2D) report payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-7 | 8 |Current Speed #1 |cspeed1 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|8-16 | 9 |Current Direction #1 |cdir1 |u|0-359: deg from true north, + >=360 = N/A (default). +|17-25 | 9 |Measurement Depth #1 |cdepth1 |u|0-360m down: units 1m, + 361 = 361m or greater, + 362 = N/A (default), + 363-511 (reserved). +|26-33 | 8 |Current Speed #2 |cspeed2 |U1|0.0-24.5 knots, + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|34-42 | 9 |Current Direction #2 |cdir2 |u|0-359: deg. fom true north, + >=360 = N/A (default) +|43-51 | 9 |Measurement Depth #2 |cdepth2 |u|0-360m down: units 1m, + 361 = 361m or greater, + 362 = N/A (default), + 363-511 (reserved). +|52-59 | 8 |Current Speed #3 |cspeed3 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|60-68 | 9 |Current Direction #3 |cdir3 |u|0-359: degrees fom true north, + >=360 = N/A (default). +|69-77 | 9 |Measurement Depth #3 |cdepth3 |u|0-360m down: units 1m, + 361 = 361m or greater, + 362 = N/A (default), + 363-511 (reserved). +|78-80 | 3 |Sensor Description |sensortype|e|See "Sensor Types" +|81-84 | 4 |Spare | |x|Not used +|============================================================================== + +.Current flow (3D) payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-7 | 8 |Current Vector component North (u) #1|cnorth1 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|8-15 | 8 |Current Vector component East (v) #1|ceast1 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|16-23 | 8 |Current Vector component Up (z) #1 |cup1 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|24-32 | 9 |Measurement Depth #1 |cdepth1 |u|0-360m down: + units 1m, + 361 = 361m or greater, + 362 = N/A (default), + 363-511 (reserved). +|33-40 | 8 |Current Vector component North (u) #2|cnorth2 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|41-48 | 8 |Current Vector component East (v) #2|ceast2 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|49-56 | 8 |Current Vector component Up (z) #2 |cup2 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|57-65 | 9 |Measurement Depth #2 |cdepth2 |u|0-360m down: + units 1m, + 361 = 361m or greater, + 362 = N/A (default), + 363-511 (reserved). +|66-68 | 3 |Sensor Description |sensortype|e|See "Sensor Types" +|69-84 | 16 |Spare | |x|Not used +|============================================================================== + +.Horizontal current report payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-8 | 9 |Current Bearing #1 |bearing1 |u|0-359: deg from true north, + >=360 = N/A (default). +|9-15 | 7 |Current Distance #1 |distance1 |u|0-120m: + 121 = 121m or greater, + 122 = N/A (default), + 123-127 (reserved). +|16-23 | 8 |Current Speed #1 |speed1 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|24-32 | 9 |Current Direction #1 |direction1|u|0-359: deg from true north, + >=360 = N/A (default). +|33-41 | 9 |Measurement Depth #1 |depth1 |u|0-360m down: units 1m, + 361 = 361m or greater, + 362 = N/A (default), + 363-511 (reserved). +|42-50 | 9 |Current Bearing #2 |bearing1 |u|0-359: deg from true north, + >=360 = N/A (default). +|51-57 | 7 |Current Distance #2 |distance1 |u|0-120m: + 121 = 121m or greater, + 122 = N/A (default), + 123-127 (reserved). +|58-65 | 8 |Current Speed #2 |speed1 |U1|0.0-24.5 knots: + units 0.1 knots, + 246 = speed >= 24.6 knots, + 247 = N/A (default), + 248-255 (reserved). +|66-74 | 9 |Current Direction #2 |direction1|u|0-359: deg from true north, + >=360 = N/A (default). +|75-83 | 9 |Measurement Depth #2 |depth1 |u|0-360m down: units 1m, + 361 = 361m or greater, + 362 = N/A (default), + 363-511 (reserved). +|84-84 | 1 |Spare | |x|Not used +|============================================================================== + +.Sea state report payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-7 | 8 |Swell Height |swheight |U1|Units 0.1m: 0.0-24.5m, + 246 = height >= 24,6m, + 247 = N/A (default), + 248-255 reserved, + else h = (value * 0.5). +|8-13 | 6 |Swell Period |swperiod |u|Period in seconds: + 0-60, + 61 = N/A (default), + 62-63 (reserved). +|14-22 | 9 |Swell Direction |swelldir |u|0-359 deg: + 0-359 true bearing, + 360 = N/A (default), + 361-511 reserved, +|23-26 | 4 |Sea State |seastate |u|Beaufort scale: 0-12 + >= 13 = N/A (default) +|27-29 | 3 |Swell Sensor Description |swelltype |e|See "Sensor Types" +|30-39 | 10 |Water Temperature |watertemp |U1|-10.0 to 50.0: + units 0.1 C, + >=601 = N/A (default). + 602-1023 reserved, + else -10.0m after scaling. +|40-46 | 7 |Water Temperature Depth |distance1 |U1|0.0-12.0m: 0.1m units, + 121 = 12.1m or greater, + 122 = N/A (default), + 123-126 (reserved). +|47-49 | 3 |Depth Sensor Description |depthtype |e|See "Sensor Types" + +|50-57 | 8 |Wave Height |waveheight|U1|Height 0.0-24.5m: + units 0.1m, + 246 = height >= 24.6m, + 247 N/A (default), + 248-255 reserved. +|58-63 | 6 |Wave Period |waveperiod|u|0-60: units of seconds, + 61 = N/A (default), + 62-63 reserved. +|64-72 | 9 |Wave Direction |wavedir |u|0-359: true bearing, + 360 = N/A (default), + 361-511 reserved. +|73-75 | 3 |Wave Sensor Description |wavetype |e|See "Sensor Types" +|76-84 | 9 |Salinity |salinity |U1|0.0-50.0%: + units of 0.1% + 501 = salinity >= 50.1% + 502 = data N/A (default) + 503 - sensor N/A, + 504-511 reserved. +|============================================================================== + +The standard does not fix the meaning of a water temperature depth of 127. + +.Salinity report payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-9 | 10 |Water Temperature |watertemp |U1|-10.0 to 50.0: + units 0.1 C, + >=601 = N/A (default). + 602-1023 reserved, + else -10.0m after scaling. +|10-19 | 10 |Conductivity |conductivity |U1|In Siemens/m, 0.0-7.0, + 0.1 S/m steps, + 701 = not less than 7.01, + 702 = data N/A, + 703 = sensor N/A (default), + 704-1023 (reserved). +|20-35 | 16 |Water Pressure |pressure |U1|Water pressure: 0.0-6000.0, + 0.1 decibar steps, + 60001 = pressure >= 6000.1, + 60002 = data N/A, + 60003 = sensor N/A (default), + 60004-65536 reserved. +|36-44 | 9 |Salinity |salinity |U1|0.0-50.0%: + units of 0.1% + 501 = salinity >= 50.1% + 502 = data N/A (default) + 503 - sensor N/A, + 504-511 reserved. +|45-46 | 2 |Salinity Type |salinitytype|e|0 = measured, + 1 = calculated using PSS-78, + 2 = calculated using other method, + 3 = reserved. +|47-49 | 3 |Sensor Description |sensortype |e|See "Sensor Types" +|50-84 | 35 |Spare | |x|Not used +|============================================================================== + +No default is specified for salinity type. + +.Weather report payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-10 | 11 |Air Temperature |temperature|i|Dry bulb temp: 0.1 deg C + -60.0 to +60.0, + -1024 = data N/A (default), + 601-1023 reserved. +|11-13 | 3 |Temp. Sensor Type |sensortype |e|See "Sensor Types" +|14-15 | 2 |Precipitation Type |preciptype |e|0 = rain, + 1 = rain and snow, + 2 = rain and snow, + 3 = other. +|16-23 | 8 |Horiz. Visibility |visibility |U1|Units of 0.1 nautical miles, + 0.0-24.0, + 241 = visibility >= 24.1nm, + 242 = data N/A, + 243 = sensor N/A (default), + 244-255 reserved. +|24-33 | 10 |Dew Point |dewpoint |i|-20.0 to +50.0: 0.1 deg C, + 501 = N/A (default), + 502-511 reserved, + -511--201 reserved. +|34-36 | 3 |Dewpoint Sensor Type|dewtype |e|See "Sensor Types". + + + +|37-45 | 9 |Air Pressure |pressure |u|0 = pressure <= 800hpA, + 1-401 = 800-1200hPa, + 402 = pressure >= 1201 hPa, + 403 - data N/A (default), + 404-511 reserved. +|46-47 | 2 |Pressure Tendency |pressuretend |e|0 = steady, + 1 = decreasing, + 2 = increasing, + 3 - N/A (default). +|48-50 | 3 |Pressure Sensor Type|pressuretype|e|See "Sensor Types" +|51-59 | 9 |Salinity |salinity |U1|0.0-50.0%: + units of 0.1% + 501 = salinity >= 50.1% + 502 = data N/A (default) + 503 - sensor N/A, + 504-511 reserved. +|60-84 | 25 |Spare | |x|Not used +|============================================================================== + +The standard does not specify how to code 'Precipitation Type' when +there is none. + +.Air Gap/Air Draft report payload +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-12 | 13 |Air Draught |airdraught |U1|1-81.9m in 0.1m steps, + 8191 = distance >= 81.91m, + 0 = N/A (default). +|13-25 | 13 |Air Gap |airgap |U1|1-81.9m in 0.1m steps, + 8191 = distance >= 81.91m, + 0 = N/A (default). +|26-27 | 2 |Air Gap Trend |gaptrend |e|0 = steady, + 1 = rising, + 2 = falling, + 3 = N/A (default). +|28-40 | 13 |Forecast Air Gap |fairgap |U1|1-81.9m in 0.1m steps, + 8191 = distance >= 81.91m, + 0 = N/A (default). +|41-45 | 5 |Day (UTC) |day |u|1-31; 0 = N/A (default) +|46-50 | 5 |Hour (UTC) |hour |u|0-23; 24 = N/A (default) +|51-56 | 6 |Minute (UTC) |minute |u|0-59; 60 = N/A (default) +|57-84 | 28 |Spare | |x|Not used +|============================================================================== + +Air draught is the vertical distance measured from the ship's +waterline to the highest point on the ship. Air gap is the vertical +distance measured from the surface of the water to the sensor. + +The timestamp is for the forecast air gap. + +==== IMO289 Route Information (broadcast) ==== + +The content of this message is a time and a list of waypoints describing a +course. It has an addressed equivalent that is a message 6 subtype. + +A message 8 subtype. DAC = 001 FID = 27. Variable length: 172-997 bits. + +//: Type 8(1/27) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 27 +|56-65 | 10 |Message Linkage ID|linkage |u|Unsigned integer +|66-68 | 3 |Sender Class |sender |u|0 = ship (default), 1 = authority, + 27 = reserved for future use. +|69-73 | 5 |Route Type |rtype |e|See below +|74-77 | 4 |Start month |month |u|1-12, 0=N/A (default) +|78-82 | 5 |Start day |day |u|1-31, 0=N/A (default) +|83-87 | 5 |Start hour |hour |u|0-23, 24=N/A (default) +|88-93 | 6 |Start minute |minute |u|0-59, 60=N/A (default) +|94-111 | 18 |Duration |duration |u|Minutes from start time, + 0 = cancel route, + 262,143 = not available (default). +|112-116 | 5 |Waypoint count |waycount |u|1-16, values 17-31 are not used. +|117 | | |waypoints|a^16|Waypoint array +|0-27 | 28 |Longitude |lon |I4|Unit = minutes * 0.0001, + 181000 = N/A (default), + E positive, W negative. +|28-54 | 27 |Latitude |lat |I4|Unit = minutes * 0.001, + 91000 = N/A (default), + N positive, S negative. +|============================================================================== + +The final pair of fields in the table above is a waypoint. The message may +end with 1 to 16 waypoints. + +For interpretation of the Route Type field, see the table under the "Route +Information (addressed)" message (DAC=1, FID=28). + +==== IMO289 Text description (broadcast) ==== + +A message 8 subtype. DAC = 001 FID = 29. Variable length: 72-1032 bits. + +Intended to be used to associate a text annotation with another message +via the Message Linkage ID field. + +//: Type 8(1/29) +[frame="topbot",options="header"] +|============================================================================= +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 29 +|56-65 | 10 |Message Linkage ID|linkage |u|Unsigned integer +|66-? | 6-966 |Description |description|t|String +|============================================================================== + +There is an equivalent subtype of message 6 that is an addressed description. + +==== Meteorological and Hydrological Data (IMO289) === + +A message 8 subtype. DAC = 001 FID = 31. Fixed length, 360 bits. +Supersedes an <<IMO236>> message with the same title but FID = 11 and +a different binary layout. The exact differences are: (a) The +addition of the Position Accuracy field, (b) water level has 12 bits +of precision rather than 9 (units of centimeters rather than +decimeters), and (c) end padding changes from 6 to 10 bits. + +//: Type 8(1/31) +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |DAC |dac |u|DAC = 001 +|50-55 | 6 |FID |fid |u|FID = 31 +|56-80 | 25 |Longitude |lon |I3|Unit = minutes * 0.001, + E positive, We negative, + 181000 = N/A (default). +|81-104 | 24 |Latitude |lat |I3|Unit = minutes * 0.001, + N positive, S negative, + 91000 = N/A (default). +|105-105 | 1 |Fix quality |accuracy |b|As in Common Navigation Block +|106-110 | 5 |Day |day |u|1-31, 0=N/A (default) +|111-115 | 5 |Hour |hour |u|0-23, 24=N/A (default) +|116-121 | 6 |Minute |minute |u|0-59, 60=N/A (default) +|122-128 | 7 |Average Wind Speed |wspeed |u|10-min avg wind speed: knots, + 126 = wind >= 126 knots, + 127 = N/A (default). +|129-135 | 7 |Gust Speed |wgust |u|10-min max wind speed: knots, + 126 = wind >= 126 knots, + 127 = N/A (default). +|136-144 | 9 |Wind Direction |wdir |u|0-359, true bearing, + 360 = N/A (default). +|145-153 | 9 |Wind Gust Direction|wgustdir |u|0-359, true bearing, + 360 = N/A (default). +|154-164 | 11 |Air Temperature |airtemp |I1|Dry bulb temp: units 0.1C, + -60.0 to +60.0, + -1024 = N/A (default). +|165-171 | 7 |Relative Humidity |humidity |u|0-100%: units of 1%, + 101 = N/A (default). +|172-181 | 10 |Dew Point |dewpoint |I1|-20.0 to +50.0: units 0.1C, + 501 = N/A (default). +|182-190 | 9 |Air Pressure |pressure |u|800-1200hPa, 1hPa, + 0 = pressure <= 799hPa, + 402 = pressure >= 1201 hPa, + 511 = N/A (default). +|191-192 | 2 |Pressure Tendency |pressuretend|e|0 = steady, + 1 = decreasing, + 2 = increasing, + 3 = N/A (default). +|193-193 | 7 |Max. visibility |visgreater |b|Visibility greater than. +|194-200 | 8 |Horiz. Visibility |visibility |U1|Units are 0.1 nautical miles, + 127 = N/A (default). +|201-212 | 12 |Water Level |waterlevel |I2|-10.0 to +30.0 in 0.01m, + -10.0m after scaling, + 4001 = N/A (default). +|213-214 | 2 |Water Level Trend |leveltrend |e|0 = steady, + 1 = decreasing, + 2 = increasing, + 3 = N/A (default). +|215-222 | 8 |Surface Current Speed |cspeed |U1|0.0-25.0: units 0.1 knot, + 251 = speed >= 25.1 knots, + 255 = N/A (default). +|223-231 | 9 |Surface Current Direction |cdir |u|0-359: deg. fom true north, + 360 = N/A (default). +|232-239 | 8 |Current Speed #2 |cspeed2 |U1|0.0-25.0 knots: + units 0.1 knot, + 251 = speed >= 25.1 knots, + 255 = N/A (default). +|240-248 | 9 |Current Direction #2 |cdir2 |u|0-359: true bearing, + 360 = N/A (default). +|249-253 | 5 |Measurement Depth #2 |cdepth2 |U1|0-30m down: units 0.1m, + 31 = N/A (default). +|254-261 | 8 |Current Speed #3 |cspeed3 |U1|0.0-25.0 knots: units 0.1 knot, + 251 = speed >= 25.1 knots, + 255 = N/A (default). +|262-270 | 9 |Current Direction #3 |cdir3 |u|0-359: true bearing, + 360 = N/A (default). +|271-275 | 5 |Measurement Depth #3 |cdepth3 |u|0-30m down: units 0.1m, + 31 = N/A (default). +|276-283 | 8 |Wave Height |waveheight|U1|Height 0-25m: units 0.1m, + 251 = height >= 25.1m, + 255 = N/A (default). +|284-289 | 6 |Wave Period |waveperiod|u|Seconds, 0-60, units 1s, + 63 = N/A (default). +|290-298 | 9 |Wave Direction |wavedir |u|0-359: true bearing, + 360 = N/A (default). +|299-306 | 8 |Swell Height |swellheight|U1|0-25m: units 0.1m, + 251 = height >= 25.1m, + 255 = N/A (default). +|307-312 | 6 |Swell Period |swellperiod|u|0-60, units 1s + 360 = N/A (default) +|313-321 | 9 |Swell Direction |swelldir |u|0-359: true bearing, + 360 = N/A (default) +|322-325 | 4 |Sea State |seastate |e|See "Beaufort scale" +|326-335 | 10 |Water Temperature |watertemp |I1|-10.0 to 50.0 C: + units 0.1 deg, + 501 = N/A (default) +|336-338 | 3 |Precipitation |preciptype |e|See "Precipitation type" +|339-347 | 9 |Salinity |salinity |U1|0.0-50.0%: units of 0.1% + 501 = salinity >= 50.1% + 510 = N/A (default) + 511 = sensor not available +|348-349 | 2 |Ice |ice |u| 0 = No + 1 = Yes + 2 = (reserved for future use) + 3 = not available = default +|350-359 | 10 |Spare | |x|Not used +|============================================================================== + +Precipitation types and Beaufort scale are as for the <<IMO236>> version. + +==== Inland ship static and voyage related data (Inland AIS) ==== + +A message 8 subtype. DAC = 200 FID = 10. Fixed length, 168 bits. + +This message should be used by inland vessels only to broadcast ship +static and voyage related data in addition to message 5. The message +should be sent as soon as possible (from the AIS point of view) after +message 5. + +//: Type 8(200/10) +[frame="topbot",options="header"] +|=============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |Designated Area Code |dac |u|Constant: 200 +|50-55 | 6 |Functional ID |fid |u|Constant: 10 +|56-103 | 48 |European Vessel ID |vin |t|8 six-bit characters +|104-116 | 13 |Length of ship |length |u|1-8000 * 0.1m, default 0 +|117-126 | 10 |Beam of ship |beam |u|1-1000 * 0.1m, default 0 +|127-140 | 14 |Ship/combination type |shiptype |e|ERI Classification +|141-143 | 3 |Hazardous cargo |hazard |e|See "Hazard Codes" below +|144-154 | 11 |Draught |draught |u|1-200 * 0.01m, default 0 +|155-156 | 2 |Loaded/Unloaded |loaded |e|See "Load Status" below +|157-157 | 1 |Speed inf. quality |speed_q |b|0 = low/GNSS (default) + 1 = high +|158-158 | 1 |Course inf. quality |course_q |b|0 = low/GNSS (default) + 1 = high +|159-159 | 1 |Heading inf. quality |heading_q|b|0 = low/GNSS (default) + 1 = high +|160-167 | 8 |Spare | |x|Not used +|============================================================================== + +OPEN-QUESTION: <<INLAND>> is not explicit whether the +"Ship/combination type" field is to contain full ERI codes with range +8000-8370 or ERI SOLAS codes in the range 1-99. The tables below +expand both. Full ERI codes have been observed in the wild. + +.ERI Classification +[frame="topbot",options="header"] +|============================================================================== +|Code | SOLAS | Description +|8000 | 99 | Vessel, type unknown +|8010 | 79 | Motor freighter +|8020 | 89 | Motor tanker +|8021 | 80 | Motor tanker, liquid cargo, type N +|8022 | 80 | Motor tanker, liquid cargo, type C +|8023 | 89 | Motor tanker, dry cargo as if liquid (e.g. cement) +|8030 | 79 | Container vessel +|8040 | 80 | Gas tanker +|8050 | 79 | Motor freighter, tug +|8060 | 89 | Motor tanker, tug +|8070 | 79 | Motor freighter with one or more ships alongside +|8080 | 89 | Motor freighter with tanker +|8090 | 79 | Motor freighter pushing one or more freighters +|8100 | 89 | Motor freighter pushing at least one tank-ship +|8110 | 79 | Tug, freighter +|8120 | 89 | Tug, tanker +|8130 | 31 | Tug freighter, coupled +|8140 | 31 | Tug, freighter/tanker, coupled +|8150 | 99 | Freightbarge +|8160 | 99 | Tankbarge +|8161 | 90 | Tankbarge, liquid cargo, type N +|8162 | 90 | Tankbarge, liquid cargo, type C +|8163 | 99 | Tankbarge, dry cargo as if liquid (e.g. cement) +|8170 | 99 | Freightbarge with containers +|8180 | 90 | Tankbarge, gas +|8210 | 79 | Pushtow, one cargo barge +|8220 | 79 | Pushtow, two cargo barges +|8230 | 79 | Pushtow, three cargo barges +|8240 | 79 | Pushtow, four cargo barges +|8250 | 79 | Pushtow, five cargo barges +|8260 | 79 | Pushtow, six cargo barges +|8270 | 79 | Pushtow, seven cargo barges +|8280 | 79 | Pushtow, eight cargo barges +|8290 | 79 | Pushtow, nine or more barges +|8310 | 80 | Pushtow, one tank/gas barge +|8320 | 80 | Pushtow, two barges at least one tanker or gas barge +|8330 | 80 | Pushtow, three barges at least one tanker or gas barge +|8340 | 80 | Pushtow, four barges at least one tanker or gas barge +|8350 | 80 | Pushtow, five barges at least one tanker or gas barge +|8360 | 80 | Pushtow, six barges at least one tanker or gas barge +|8370 | 80 | Pushtow, seven barges at least one tanker or gas barge +|============================================================================= + +.SOLAS ship type, first digit +[frame="topbot",options="header"] +|============================================================================= +| 3 | Vessel +| 7 | Cargo ship +| 8 | Tanker +| 9 | Other types of ship +|============================================================================= + +.SOLAS ship type, second digit +[frame="topbot",options="header"] +|============================================================================= +| 0 | All ships of this type +| 1 | Towing +| 8 | Tanker +| 9 | No additional information +|============================================================================= + +.Hazard code +[frame="topbot",options="header"] +|============================================================================== +| 0 | 0 blue cones/lights +| 1 | 1 blue cone/light +| 2 | 2 blue cones/lights +| 3 | 3 blue cones/lights +| 4 | 4 B-Flag +| 5 | Unknown (default) +|============================================================================== + +.Load status +[frame="topbot",options="header"] +|============================================================================== +| 0 | N/A (default) +| 1 | Unloaded +| 2 | Loaded +|============================================================================== + +==== EMMA Warning Report (Inland AIS) ==== + +A message 8 subtype. DAC = 200 FID = 23. Fixed length, 256 bits. + +The EMMA warning is sent by base stations to drive shipboard ECDIS +displays of heavy weather conditions. The following message is capable +of transmitting the EMMA data using the AIS channel. It does not +replace the Notices to Skippers warnings. + +//: Type 8(200/23) +[frame="topbot",options="header"] +|=============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |Designated Area Code|dac |u|Constant: 200 +|50-55 | 6 |Functional ID |fid |u|Constant: 23 +|56-63 | 8 |Start Year |start_year |u|1-55, year since 2000 + 0 = N/A (default) +|64-67 | 4 |Start Month |start_month |u|1-12; 0 = N/A (default) +|68-72 | 5 |Start Day |start_day |u|1-31; 0 = N/A (default) +|73-80 | 8 |End Year |end_year |u|1-55, year since 2000 + 0 = N/A (default) +|81-84 | 4 |End Month |end_month |u|1-12; 0 = N/A (default) +|85-89 | 5 |End Day |end_day |u|1-31; 0 = N/A (default) +|90-94 | 5 |Start Hour |start_hour |u|0-23; 24 = N/A (default) +|95-100 | 6 |Start Minute |start_minute|u|0-59; 60 = N/A (default) +|101-105 | 5 |End Hour |end_hour |u|0-23; 24 = N/A (default) +|106-111 | 6 |End Minute |end_minute |u|0-59; 60 = N/A (default) +|112-139 | 28 |Start Longitude |start_lon |I4|Minutes/10000 (as in CNB) +|140-166 | 27 |Start Latitude |start_lat |I4|Minutes/10000 (as in CNB) +|167-194 | 28 |End Longitude |end_lon |I4|Minutes/10000 (as in CNB) +|195-221 | 27 |End Latitude |end_lat |I4|Minutes/10000 (as in CNB) +|222-225 | 4 |Type |type |e|See "EMMA Type Codes" below +|226-234 | 9 |Min value |min |i|Signed Integer, see below +|235-243 | 9 |Max value |max |i|Signed Integer, see below +|244-245 | 2 |Classification |intensity |e|1 = Slight, + 2 = Medium, + 3 = Strong +|246-249 | 4 |Wind Direction |wind |e|See "EMMA Winds" below +|250-255 | 6 |Spare | |x|Not used +|=============================================================================== + +OPEN-QUESTION: <<INLAND>> is not explicit about the interpretation of +the longitude and latitude fields; these semantics are assumed here +from 28 and 27-bit fields in other messages. + +<<INLAND>> specifies an 8-bit format with 9th leading sign bit for the +min and max fields. Values 0-253 are interpreted as integer data, +modified by the leading sign bit. The values +254 and -254 are +interpreted as "greater that +253" and "less than -253" respectively. +Both values +255 and -255 are interpreted as "unknown" (default). + +OPEN-QUESTION: What are the semantics of the min and max values? To +what parameters do they apply? + +OPEN-QUESTION: <<INLAND>> does not specify whether start and end times +are UTC or local. + +.EMMA Type Codes +[frame="topbot",options="header"] +|============================== +| 0 | NA | Not Available +| 1 | WI | Wind +| 2 | RA | Rain +| 3 | SN | Snow and ice +| 4 | TH | Thunderstorm +| 5 | FO | Fog +| 6 | LT | Low temperature +| 7 | HT | High temperature +| 8 | FL | Flood +| 9 | FI | Forest Fire +|============================== + +.EMMA Winds +[frame="topbot",options="header"] +|============================== +| 1 | N | North +| 2 | NE | North East +| 3 | E | East +| 4 | SE | South East +| 5 | S | South +| 6 | SW | South West +| 7 | W | West +| 8 | NW | North West +|============================== + +==== Water Levels (Inland AIS) ==== + +A message 6 subtype. DAC = 200 FID = 24. Fixed length, 168 bits. + +This message should be used to inform skippers about actual water +levels in their area. It is additional short-term information to the +water levels distributed via Notices to Skippers. It is possible to +transmit the water levels of more than 4 gauges using multiple +messages. + +//: Type 8(200/24) +[frame="topbot",options="header"] +|=============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 6 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |Designated Area Code|dac |u|Constant: 200 +|50-55 | 6 |Functional ID |fid |u|Constant: 24 +|56-67 | 12 |UN Country Code |country |t|2 six-bit characters +|68 | | |gauges |a4|Gauge measurement array +|0-10 | 11 |Gauge ID |id |u|0=unknown (default) +|11-24 | 14 |Water Level |level |i|cm, 0=unknown (default) +|=============================================================================== + +Water levels are relative to the local standard, e.g. GIW in Germany +and RNW on the Danube. + +==== Signal Strength (Inland AIS) ==== + +A message 8 subtype. DAC = 200 FID = 40. Fixed length, 168 bits. + +This message should be sent by base stations only, to inform about the +status of different light signals to all vessels in a certain +area. The information should be displayed on an external Inland ECDIS +display as dynamic symbols. The message should be sent with binary +message 8 at regular intervals. + +//: Type 8(200/40) +[frame="topbot",options="header"] +|=============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 8 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-49 | 10 |Designated Area Code|dac |u|Constant: 200 +|50-55 | 6 |Functional ID |fid |u|Constant: 40 +|56-83 | 28 |Signal Longitude |lon |I4|Minutes/10000 (as in CNB) +|84-110 | 27 |Signal Latitude |lat |I4|Minutes/10000 (as in CNB) +|111-114 | 4 |Signal form |form |u|Consult <<INLAND>> Annex C +|115-123 | 9 |Signal orientation |facing |u|0-39 deg, 511= N/A (default) +|124-126 | 3 |Direction of impact |direction |e|See "Signal Impact" below +|127-156 | 30 |Light Status |status |e|See "Signal Status" below +|157-167 | 11 |Spare | |x|Not used +|=============================================================================== + +OPEN-QUESTION: <<INLAND>> is not explicit about the interpretation of +the longitude and latitude fields; these semantics are assumed here +from 28 and 27-bit fields in other messages. + +The Signal Form field describes the physical arrangement of the +signal lights. Values 0 and 15 indicate the shape is unknown or +unspecified. + +//: direction vocabulary +.Direction of Signal Impact +[frame="topbot",options="header"] +|=============================================================================== +| 0 | Unknown (default) +| 1 | Upstream +| 2 | Downstream +| 3 | To left bank +| 4 | To right bank +|=============================================================================== + +The Signal Status field is interpreted as 9 decimal digits describing +the lights as numbered in their Signal Form diagram - typically left +to right and then top to bottom - with each digit interpreted in the +following way: + +//: status vocabulary +.Signal Status +[frame="topbot",options="header"] +|=============================================================================== +| 0 | Unknown (default) +| 1 | No light +| 2 | White +| 3 | Yellow +| 4 | Green +| 5 | Red +| 6 | White flashing +| 7 | Yellow flashing. +|=============================================================================== + +=== Type 9: Standard SAR Aircraft Position Report === + +Tracking information for search-and-rescue aircraft. Total number of +bits is 168. + +//: Type 9 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Encoding +|0-5 | 6 |Message Type |type |u|Constant: 9 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 |30 |MMSI |mmsi |u|9 decimal digits +|38-49 |12 |Altitude |alt |u|See below +|50-59 |10 |SOG |speed |u|See below +|60-60 | 1 |Position Accuracy |accuracy |u|See below +|61-88 |28 |Longitude |lon |I4|Minutes/10000 (as in CNB) +|89-115 |27 |Latitude |lat |I4|Minutes/10000 (as in CNB) +|116-127 |12 |Course Over Ground |course |U1|True bearing, 0.1 degree units +|128-133 | 6 |Time Stamp |second |u|UTC second. +|134-141 | 8 |Regional reserved |regional |x|Reserved +|142-142 | 1 |DTE |dte |b|0=Data terminal ready, + 1=Data terminal not ready (default) +|143-145 | 3 |Spare | |x|Not used +|146-146 | 1 |Assigned |assigned |b|Assigned-mode flag +|147-147 | 1 |RAIM flag |raim |b|As for common navigation block +|148-167 |20 |Radio status |radio |u|See <<IALA>> for details. +|============================================================================== + +Altitude is in meters. The special value 4095 indicates altitude is +not available; 4094 indicates 4094 meters or higher. + +Speed over ground is in knots, not deciknots as in the common +navigation block; planes go faster. The special value 1023 indicates +speed not available, 1022 indicates 1022 knots or higher. + +Position Accuracy, Longitude, Latitude, and Course over Ground +are encoded identically as in the common navigation block and +are even at the same bit offsets. Time stamp has the same special +values as in the common navigation block, but is at a different offset. + +=== Type 10: UTC/Date Inquiry === + +Request for UTC/Date information from an AIS base station. Total +number of bits is 72. + +//: Type 10 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Encoding +|0-5 | 6 |Message Type |type |u|Constant: 10 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 |30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-69 |30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70-71 | 2 |Spare | |x|Not used +|============================================================================== + +=== Type 11: UTC/Date Response === + +Identical to message 4, with the semantics of a response to inquiry. + +=== Type 12: Addressed Safety-Related Message === + +This is a point-to-point text message. The payload is interpreted as +six-bit text. This message is variable in length up to a maximum of +1008 bits (up to 5 AIVDM sentence payloads). + +//: Type 12 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 12 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Sequence Number |seqno |u|Unsigned integer 0-3 +|40-69 | 30 |Destination MMSI |dest_mmsi |u|9 decimal digits +|70 | 1 |Retransmit flag |retransmit |b|0 = no retransmit (default), + 1 = retransmitted +|71 | 1 |Spare | |x|Not used +|72 |936 |Text |text |t|1-156 chars of six-bit text. + May be shorter than 936 bits. +|============================================================================== + +Pragmatic note: On <<<AISHUB>>> the actual content of these messages is +highly variable, ranging from fairly plain English ("PLEASE REPORT TO +JOBOURG TRAFFIC CHANNEL 13") through snippets of tabular data ("PAX +589 FG 36 IX 74 MOTO 10 CREW 108+1" through what look like opaque +commercial codes ("EP285 IX46 FG3 DK8 PL56") to empty strings and +content that looks like line noise ("]XFD5D/\7`>PA!Q DX0??K?8?>D"). + +Such apparently garbled content does *not* mean there is an error in +your decoder. It may indicate faulty encoders, operator error, or even +the use of private encodings for non-ASCII character sets. + +=== Type 13: Safety-Related Acknowledgement === + +Message type 13 is a receipt acknowledgement to senders of +previous messages of type 12. The message layout is identical to +a type 7 Binary Acknowledge. + +=== Type 14: Safety-Related Broadcast Message === + +This is a broadcast text message. The payload is interpreted as +six-bit text. This message is variable in length up to a maximum of +1008 bits (up to 5 AIVDM sentence payloads). + +//: Type 14 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 14 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40 |968 |Text |text |t|1-161 chars of six-bit text. + May be shorter than 968 bits. +|============================================================================== + +Note: 161 * 6 = 966. <<IALA>> specifies 968 because over-the-air +messages are required to be padded to an 8-bit byte boundary by +<<<ITU1371>>>. + +Also see the pragmatic note on message content attached to type 12; it +applies to type 14 messages as well. + +=== Type 15: Interrogation === + +Message type 15 is used by a base station to query one or two other AIS +transceivers for status messages of specified types. "Source MMSI" is +the interrogating station. 88-160 bits depending on the number of queries. + +This message is probably not interesting unless you are doing traffic +analysis of information flow in an AIS station network. The "slot offset" +members are a request for the response to interrogation to occupy +a particular time division in the TDMA packet layer. + +//: Type 15 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 15 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-69 | 30 |Interrogated MMSI |mmsi1 |u|9 decimal digits +|70-75 | 6 |First message type |type1_1 |u|Unsigned integer +|76-87 | 12 |First slot offset |offset1_1 |u|Unsigned integer +|88-89 | 2 |Spare | |x|Not used +|90-95 | 6 |Second message type |type1_2 |u|Unsigned integer +|96-107 | 12 |Second slot offset |offset1_2 |u|Unsigned integer +|108-109 | 2 |Spare | |x|Not used +|110-139 | 30 |Interrogated MMSI |mmsi2 |u|9 decimal digits +|140-145 | 6 |First message type |type2_1 |u|Unsigned integer +|146-157 | 12 |First slot offset |offset2_1 |u|Unsigned integer +|158-159 | 2 |Spare | |x|Not used +|============================================================================== + +There are four use cases for this message. A decoder must dispatch on +the length of the data packet to determine which it is seeing: + +1. One station is interrogated for one message type. Length is 88 bits. + +2. One station is interrogated for two message types, Length is 110 +bits. There is a design error in the standard here; according to the +<<<ITU1371>>> requirement for padding to 8 bits, this should have been +112 with a 4-bit trailing spare field, and decoders should be prepared +to handle that length as well. See the discussion of byte alignment +elsewhere in this document for context. + +3. Two stations are interrogated for one message type each. Length is +160 bits. The second message type and second slot offset associated +with the first queried MMSI should be zeroed. + +4. One station is interrogated for two message types, and a second for +one message type. Length is 160 bits. + +=== Type 16: Assignment Mode Command === + +Message type 16 is used by a base station with control authority to +configure the scheduling of AIS informational messages from +subordinate stations, either as a frequency per 10-minute interval or +by specifying the TDMA slot(s) offset on which those messages should +be transmitted. It is probably not of interest unless you are +studying the internal operation of an AIS base station network. +Length may be 96 or 144 bits. + +//: Type 16 +[frame="topbot",options="header"] +|============================================================================ +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 16 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-69 | 30 |Destination A MMSI |mmsi1 |u|9 decimal digits +|70-81 | 12 |Offset A |offset1 |u|See <<IALA>> +|82-91 | 10 |Increment A |increment1 |u|See <<IALA>> +|92-121 | 30 |Destination B MMSI |mmsi2 |u|9 decimal digits +|122-133 | 12 |Offset B |offset2 |u|See <<IALA>> +|134-143 | 10 |Increment B |increment2 |u|See <<IALA>> +|============================================================================= + +If the message is 96 bits long, it should be interpreted as an +assignment for a single station (92 bits) followed by 4 bits of +padding reserved for future use. If the message is 144 bits long it +should be interpreted as a channel assignment for two stations; no +padding follows. + +When increment is zero, the offset field is interpreted as the +frequency with which the subordinate station should report per +10-minute interval. When increment is nonzero, reporting interval +is specified at the level of TDMA slot numbers; see <<IALA>> for the +detailed specification. + +Note: While the 96-bit form of Type 16 is not uncommon, the 144-bit +form is extremely rare. As of March 2010 it has not been observed even +in long-duration samples from AISHub. + +=== Type 17: DGNSS Broadcast Binary Message === + +Message type 17 is used to broadcast differential corrections for GPS. +The data in the payload is intended to be passed directly to GPS +receivers capable of accepting such corrections. 80 to 816 bits +depending on payload size. + +//: Type 17 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 17 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 | 30 |Source MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-57 | 18 |Longitude |lon |I1|Signed: minutes/10 +|58-74 | 17 |Latitude |lat |I1|Signed: minutes/10 +|75-79 | 5 |Spare | |x|Not used - reserved +|80-815 |736 |Payload |data |d|DGNSS correction data +|============================================================================== + +Note that latitude and longitude are in units of a tenth of a minute; +sign interpretation and out-of-band values are as in the Common +Navigation Clock. (Note, however, that the hex representation of +the out-of-band values differs; it is 181 \* 60 \* 10 = 0x1a838 for +longitude, 91 \* 60 \* 10 = 0xd548 for latitude.) + +The <<IALA>> description of the payload portion subfields has been +omitted, as it appears to be tied to the now obsolete RTCM2 protocol. + +=== Type 18: Standard Class B CS Position Report === + +A less detailed report than types 1-3 for vessels using Class B +transmitters. Omits navigational status and rate of turn. Fields are +encoded as in the common navigation block. 168 bits total. + +In <<IALA>> (and <<ITU1371>>) bits 141-145 were designated "Spare"; the +bit-flag semantics given here are from ITU-1371-3 and were +communicated by Kurt Schwehr. Kurt warns that "the spec does not do a +good job of explaining these fields... I don't think that I totally +understand these fields." + +//: Type 18 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 18 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 |30 |MMSI |mmsi |u|9 decimal digits +|38-45 | 8 |Regional Reserved |reserved |x|Not used +|46-55 |10 |Speed Over Ground |speed |U1|As in common navigation block +|56-56 | 1 |Position Accuracy |accuracy |b|See below +|57-84 |28 |Longitude |lon |I4|Minutes/10000 (as in CNB) +|85-111 |27 |Latitude |lat |I4|Minutes/10000 (as in CNB) +|112-123 |12 |Course Over Ground |course |U1|0.1 degrees from true north +|124-132 | 9 |True Heading |heading |u|0 to 359 degrees, 511 = N/A +|133-138 | 6 |Time Stamp |second |u|Second of UTC timestamp. +|139-140 | 2 |Regional reserved |regional |u|Uninterpreted +|141-141 | 1 |CS Unit |cs |b|0=Class B SOTDMA unit + 1=Class B CS (Carrier Sense) unit +|142-142 | 1 |Display flag |display |b|0=No visual display, + 1=Has display, + (Probably not reliable). +|143-143 | 1 |DSC Flag |dsc |b|If 1, unit is attached to a VHF + voice radio with DSC capability. +|144-144 | 1 |Band flag |band |b|Base stations can command units + to switch frequency. If this flag + is 1, the unit can use any part + of the marine channel. +|145-145 | 1 |Message 22 flag |msg22 |b|If 1, unit can accept a channel + assignment via Message Type 22. +|146-146 | 1 |Assigned |assigned |b|Assigned-mode flag: + 0 = autonomous mode (default), + 1 = assigned mode. +|147-147 | 1 |RAIM flag |raim |b|As for common navigation block +|148-167 |20 |Radio status |radio |u|See <<IALA>> for details. +|============================================================================== + +The radio status is 20 bits rather than 19 because an extra first bit +selects whether it should be interpreted as a SOTDMA or ITDMA state. + +=== Type 19: Extended Class B CS Position Report === + +A slightly more detailed report than type 18 for vessels using Class B +transmitters. Omits navigational status and rate of turn. Fields are +encoded as in the common navigation block and the Type 5 message. +Note that until just before the reserved field at bit 139 this is +identical to message 18. 312 bits total. + +In practice, the information in the ship name and dimension fields is +not reliable, as it has to be hand-entered by humans rather than +gathered automatically from sensors. + +//: Type 19 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 19 +|6-7 | 2 |Repeat Indicator |repeat |u|As in CNN +|8-37 | 30 |MMSI |mmsi |u|9 digits +|38-45 | 8 |Regional Reserved |reserved |u| +|46-55 | 10 |Speed Over Ground |speed |U1|As in CNB. +|56-56 | 1 |Position Accuracy |accuracy |b|As in CNB. +|57-84 | 28 |Longitude |lon |I4|Minutes/10000 (as in CNB) +|85-111 | 27 |Latitude |lat |I4|Minutes/10000 (as in CNB) +|112-123 | 12 |Course Over Ground |course |U1|Relative to true north, + units of 0.1 degrees +|124-132 | 9 |True Heading |heading |u|0 to 359 degrees, + 511 = N/A +|133-138 | 6 |Time Stamp |second |u|Second of UTC timestamp. +|139-142 | 4 |Regional reserved |regional |u|Uninterpreted +|143-262 |120 |Name |shipname |s|20 6-bit characters +|263-270 | 8 |Type of ship and cargo |shiptype |u|As in Message 5 +|271-279 | 9 |Dimension to Bow |to_bow |u|Meters +|280-288 | 9 |Dimension to Stern |to_stern |u|Meters +|289-294 | 6 |Dimension to Port |to_port |u|Meters +|295-300 | 6 |Dimension to Starboard |to_starboard |u|Meters +|301-304 | 4 |Position Fix Type |epfd |e|See "EPFD Fix Types" +|305-305 | 1 |RAIM flag |raim |b|As in CNB. +|306-306 | 1 |DTE |dte |b|0=Data terminal ready, + 1=Not ready (default). +|307-307 | 1 |Assigned mode flag |assigned |u|See <<IALA>> for details +|308-311 | 4 |Spare | |x|Unused, should be zero +|============================================================================== + +=== Type 20 Data Link Management Message === + +This message is used to pre-allocate TDMA slots within an AIS base +station network. It contains no navigational information, and is +unlikely to be of interest unless you are implementing or studying +an AIS base station network. Length varies from 72-160 depending on +the number of slot reservations (1 to 4) in the message. + +//: Type 20 +[frame="topbot",options="header"] +|=============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 20 +|6-7 | 2 |Repeat Indicator |repeat |u|As in CNB +|8-37 |30 |MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-51 |12 |Offset number 1 |offset1 |u|Reserved offset number +|52-55 | 4 |Reserved slots |number1 |u|Consecutive slots +|56-58 | 3 |Time-out |timeout1 |u|Allocation timeout in minutes +|59-69 |11 |Increment |increment1 |u|Repeat increment +|70-81 |12 |Offset number 2 |offset2 |u|Reserved offset number +|82-85 | 4 |Reserved slots |number2 |u|Consecutive slots +|86-88 | 3 |Time-out |timeout2 |u|Allocation timeout in minutes +|89-99 |11 |Increment |increment2 |u|Repeat increment +|100-111 |12 |Offset number 3 |offset3 |u|Reserved offset number +|112-115 | 4 |Reserved slots |number3 |u|Consecutive slots +|116-118 | 3 |Time-out |timeout3 |u|Allocation timeout in minutes +|119-129 |11 |Increment |increment3 |u|Repeat increment +|130-141 |12 |Offset number 4 |offset4 |u|Reserved offset number +|142-145 | 4 |Reserved slots |number4 |u|Consecutive slots +|146-148 | 3 |Time-out |timeout4 |u|Allocation timeout in minutes +|149-159 |11 |Increment |increment4 |u|Repeat increment +|=============================================================================== + +See <<IALA>> for details on the meaning of these fields. + +=== Type 21: Aid-to-Navigation Report === + +Identification and location message to be emitted by aids to +navigation such as buoys and lighthouses. + +This message is unusual in that it varies in length depending on the +presence and size of the Name Extension field. May vary between 272 +and 360 bits. + +//: Type 21 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 21 +|6-7 | 2 |Repeat Indicator |repeat |u|As in CNB +|8-37 |30 |MMSI |mmsi |u|9 digits +|38-42 | 5 |Aid type |aid_type |e|See "Navaid Types" +|43-162 1|120 |Name |name |t|Name in sixbit chars +|163-163 | 1 |Position Accuracy |accuracy |b|As in CNB +|164-191 |28 |Longitude |lon |I4|Minutes/10000 (as in CNB) +|192-218 |27 |Latitude |lat |I4|Minutes/10000 (as in CNB) +|219-227 | 9 |Dimension to Bow |to_bow |u|Meters +|228-236 | 9 |Dimension to Stern |to_stern |u|Meters +|237-242 | 6 |Dimension to Port |to_port |u|Meters +|243-248 | 6 |Dimension to Starboard |to_starboard|u|Meters +|249-252 | 4 |Type of EPFD |epfd |e|As in Message Type 4 +|253-258 | 6 |UTC second |second |u|As in Message Types 1-3 +|259-259 | 1 |Off-Position Indicator |off_position|b|See Below +|260-267 | 8 |Regional reserved |regional |u|Uninterpreted +|268-268 | 1 |RAIM flag |raim |b|As in CNB +|269-269 | 1 |Virtual-aid flag |virtual_aid |b|See Below +|270-270 | 1 |Assigned-mode flag |assigned |b|See <<IALA>> for details +|271-271 | 1 |Spare | |x|Not used +|272-360 |88 |Name Extension | |t|See Below +|============================================================================== + +According to <<IALA>>, the aid type field has values 1-15 for fixed +and 16-31 for floating aids to navigation. The detailed list is as follows: + +.Navaid Types +[frame="topbot",options="header"] +|==================================================================== +|Code |Definition +|0 |Default, Type of Aid to Navigation not specified +|1 |Reference point +|2 |RACON (radar transponder marking a navigation hazard) +|3 |Fixed structure off shore, such as oil platforms, wind farms, +| rigs. (Note: This code should identify an obstruction that is +| fitted with an Aid-to-Navigation AIS station.) +|4 |Spare, Reserved for future use. +|5 |Light, without sectors +|6 |Light, with sectors +|7 |Leading Light Front +|8 |Leading Light Rear +|9 |Beacon, Cardinal N +|10 |Beacon, Cardinal E +|11 |Beacon, Cardinal S +|12 |Beacon, Cardinal W +|13 |Beacon, Port hand +|14 |Beacon, Starboard hand +|15 |Beacon, Preferred Channel port hand +|16 |Beacon, Preferred Channel starboard hand +|17 |Beacon, Isolated danger +|18 |Beacon, Safe water +|19 |Beacon, Special mark +|20 |Cardinal Mark N +|21 |Cardinal Mark E +|22 |Cardinal Mark S +|23 |Cardinal Mark W +|24 |Port hand Mark +|25 |Starboard hand Mark +|26 |Preferred Channel Port hand +|27 |Preferred Channel Starboard hand +|28 |Isolated danger +|29 |Safe Water +|30 |Special Mark +|31 |Light Vessel / LANBY / Rigs +|==================================================================== + +The name field is up to 20 characters of 6-bit ASCII. If this field +is full (has no trailing @ characters) the decoder should interpret +the Name Extension field later in the message (no more than 14 6-bit +characters) and concatenate it to this one to obtain the full name. + +<<IALA>> describes bits 219-248 As "Dimension/Reference for Position", +implying that it is vessel dimensions as in message type 5. + +The Off-Position Indicator is for floating Aids-to-Navigation only: 0 +means on position; 1 means off position. Only valid if UTC second is equal to +or below 59. + +The Virtual Aid flag is interpreted as follows: 0 = default = real Aid +to Navigation at indicated position; 1 = virtual Aid to +Navigation simulated by nearby AIS station. + +If present, the Name Extension consists of packed six-bit ASCII +characters followed by 0-6 bits of padding to an 8-bit boundary. The +<<IALA>> description says "This parameter should be omitted when no +more than 20 characters for the name of the A-to-N are needed in +total. Only the required number of characters should be transmitted, +i.e. no @-character should be used." A decoder can deduce the bit length +of the name extension field by subtracting 272 from the total message +bit length. + +=== Type 22: Channel Management === + +This message is broadcast by a competent authority (an AIS network +control base station) to set VHF parameters for an AIS coverage +region. Length is 168 bits. + +This message contains no navigational information, and is unlikely to be of +interest unless you are implementing or studying an AIS base station +network. + +//: Type 22 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Constant: 22 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 |30 |MMSI |mmsi |u|9 decimal digits +|38-39 | 2 |Spare | |x|Not used +|40-51 |12 |Channel A |channel_a |u|Channel number +|52-63 |12 |Channel B |channel_b |u|Channel number +|64-67 | 4 |Tx/Rx mode |txrx |u|Transmit/receive mode +|68-68 | 1 |Power |power |b|Low=0, high=1 +|69-86 |18 |NE Longitude |ne_lon |I1|NE longitude to 0.1 minutes +|87-103 |17 |NE Latitude |ne_lat |I1|NE latitude to 0.1 minutes +|104-121 |18 |SW Longitude |sw_lon |I1|SW longitude to 0.1 minutes +|122-138 |17 |SW Latitude |sw_lat |I1|SW latitude to 0.1 minutes +|69-98 |30 |MMSI1 |dest1 |u|MMSI of destination 1 +|104-133 |30 |MMSI2 |dest2 |u|MMSI of destination 2 +|139-139 | 1 |Addressed |addressed |b|0=Broadcast, 1=Addressed +|140-140 | 1 |Channel A Band |band_a |b|0=Default, 1=12.5kHz +|141-141 | 1 |Channel B Band |band_b |b|0=Default, 1=12.5kHz +|142-144 | 3 |Zone size |zonesize |u|Size of transitional zone +|145-167 |23 |Spare | |x|Reserved for future use +|============================================================================== + +The values of the channel_a and channel_b fields are ITU frequency +designators for channels A and B. Normally these will be 2087 and +2088, the AIS 1 and AIS 2 frequencies of 87B (161.975 MHz) and 88B +(162.025 MHz) respectively. Regional authorities may set different +frequencies. + +The txrx field encodes the same information as the 2-bit field txrx +field in message type 23; only the two low bits are used. + +The power bit instructs designated receivers which power level to use. + +If the message is broadcast (addressed field is 0), the ne_lon, +ne_lat, sw_lon, and sw_lat fields are the corners of a rectangular +jurisdiction area over which control parameters are to be set. If it +is addressed (addressed field is 1), the same span of data is +interpreted as two 30-bit MMSIs beginning at at bit offsets 69 and 104 +respectively. + +Yes, the addressed bit is *after* the fields it controls the +interpretation of. + +Note that the 'not available' values for longitude and latitudes +match the short ones used in message 17, not the long ones used in the +common navigation block and elsewhere. + +The band fields control channel bandwidth for channels A and B, and +the zonesize field describes the size of the transition zone around the +control jurisdiction. The semantics of these fields are complicated, +controlling transmitter behavior as it moves between jurisdictions; +see <<IALA>> for full details. + +=== Type 23: Group Assignment Command === + +This message is intended to be broadcast by a competent authority (an +AIS network-control base station) to set operational parameters for +all mobile stations in an AIS coverage region. Length is 160 bits. + +This message contains no navigational information, and is unlikely to +be of interest unless you are implementing or studying an AIS base +station network. + +//: Type 23 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |T|Units +|0-5 | 6 |Message Type |type |u|Unsigned Integer: 23 +|6-7 | 2 |Repeat Indicator |repeat |u|As in Common Navigation Block +|8-37 |30 |MMSI |mmsi |u|Unsigned Integer: 9 digits +|38-39 | 2 |Spare | |x|Not used +|40-57 |18 |NE Longitude |ne_lon |u|Same as broadcast type 22 +|58-74 |17 |NE Latitude |ne_lat |u|Same as broadcast type 22 +|75-92 |18 |SW Longitude |sw_lon |u|Same as broadcast type 22 +|93-109 |17 |SW Latitude |sw_lat |u|Same as broadcast type 22 +|110-113 | 4 |Station Type |station_type |e|See "Station Types" +|114-121 | 8 |Ship Type |ship_type |e|See "Ship Types" +|122-143 |22 |Spare | |x|Not used +|144-145 | 2 |Tx/Rx Mode |txrx |u|See "Tranmit/Recieve Modes" +|146-149 | 4 |Report Interval |interval |e|See "Station Intervals" +|150-153 | 4 |Quiet Time |quiet |u|0 = none, 1-15 quiet time in minutes +|154-159 | 6 |Spare | |x|Not used +|============================================================================== + +The target set of mobile stations is specified by the station-type and +ship-type fields. An addressed (non-broadcast) message 22 overrides a +message 23, but a message 23 overrides a broadcast message 22. + +Note that the 'not available' values for longitude and latitudes +match the short ones used in messages 17 and 22, not the long ones +used in the common navigation block and elsewhere. + +The txrx field tells the affected stations which channel or +channels they may transmit on. The options refer to the same A and B +VHF channels as in Message Type 22. The field is interpreted as follows: + +.Transmit Modes +[width="25%",frame="topbot"] +|=================================== +|0 = |TxA/TxB, RxA/RxB (default) +|1 = |TxA, RxA/RxB +|2 = |TxB, RxA/RxB +|3 = |Reserved for Future Use +|=================================== + +.Station Types +[width="50%",frame="topbot"] +|====================================================== +|0 |All types of mobiles (default) +|1 |Reserved for future use +|2 |All types of Class B mobile stations +|3 |SAR airborne mobile station +|4 |Aid to Navigation station +|5 |Class B shipborne mobile station (IEC62287 only) +|6-9 |Regional use and inland waterways +|10-15 |Reserved for future use +|====================================================== + +<<INLAND>> specifies 6 (only) as the station type value for inland +waterways, reserving 7-9 for (other) regional uses. + +Reporting Interval is a 4 bit unsigned integer, how often to report +while within the area specified by this message. When the dual-channel +operation is suspended by Tx/Rx mode command 1 or 2, the reporting +interval is twice the interval given in the table. + +.Station Intervals +[width="50%",frame="topbot"] +|====================================================== +|0 |As given by the autonomous mode +|1 |10 Minutes +|2 |6 Minutes +|3 |3 Minutes +|4 |1 Minute +|5 |30 Seconds +|6 |15 Seconds +|7 |10 Seconds +|8 |5 Seconds +|9 |Next Shorter Reporting Interval +|10 |Next Longer Reporting Interval +|11-15 |Reserved for future use +|====================================================== + +Quiet Time is a 4 bit unsigned integer specifying how many minutes +affected stations are to remain silent. If a class B station receives +a quiet time command, it will continue to schedule nominal +transmission time periods, but is not to transmit message 18 or 24 +during the quiet period. + +=== Type 24: Static Data Report === + +Equivalent of a Type 5 message for ships using Class B equipment. Also +used to associate an MMSI with a name on either class A or class B equipment. + +A "Type 24" may be in part A or part B format; According to the +standard, parts A and B are expected to be broadcast in adjacent +pairs; in the real world they may (due to quirks in various +aggregation methods) be separated by other sentences or even +interleaved with different Type 24 pairs; decoders must cope with +this. The interpretation of some fields in Type B format changes +depending on the range of the Type B MMSI field. 160 bits for part A, +168 bits for part B. + +According to the standard, both the A and B parts are supposed to +be 168 bits. However, in the wild, A parts are often transmitted +with only 160 bits, omitting the 'spare' 7 bits at the end. +Implementers should be permissive about this. + +<<IALA>> does not describe this message type; format information +is thanks to Kurt Schwehr. + +//: Type 24 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description | Member |T|Units +|0-5 | 6 | Message Type | type |u|Constant: 24 +|6-7 | 2 | Repeat Indicator | repeat |u|As in CNB +|8-37 | 30 | MMSI | mmsi |u|9 digits +|38-39 | 2 | Part Number | partno |u|0-1 +|40-159 |120 | Vessel Name | shipname |t|(Part A) 20 sixbit chars +|160-167 | 8 | Spare | |x|(Part A) Not used +|40-47 | 8 | Ship Type | shiptype |e|(Part B) See "Ship Types" +|48-65 | 18 | Vendor ID | vendorid |t|(Part B) 3 six-bit chars +|66-69 | 4 | Unit Model Code | model |u|(Part B) +|70-89 | 20 | Serial Number | serial |u|(Part B) +|90-131 | 42 | Call Sign | callsign |t|(Part B) As in Message Type 5 +|132-140 | 9 | Dimension to Bow | to_bow |u|(Part B) Meters +|141-149 | 9 | Dimension to Stern | to_stern |u|(Part B) Meters +|150-155 | 6 | Dimension to Port | to_port |u|(Part B) Meters +|156-161 | 6 | Dimension to Starboard| to_starboard |u|(Part B) Meters +|132-161 | 30 | Mothership MMSI | mothership_mmsi|u|(Part B) See below +|162-167 | 6 | Spare | |x|(Part B) Not used +|=============================================================================== + +If the Part Number field is 0, the rest of the message is interpreted +as a Part A; if it is 1, the rest of the message is interpreted +as a Part B; values 2 and 3 are not allowed. + +Bits 48-89 are as described in ITU-R 1371-4. In earlier versions to +1371-3 this was one sixbit-encoded 42-bit (7-character) string field, +the name of the AIS equipment vendor. The last 4 characters of +the string are reinterpreted as a model/serial numeric pair. It is not +clear that field practice has caught up with this incompatible change. +Implementations would be wise to decode that but span in both ways and +trust human eyes to detect when the final 4 characters of the string +or the model and serial fields are garbage. + +Interpretation of the 30 bits 132-162 in Part B is variable. If the +MMSI at 8-37 is that of an auxiliary craft, the entry is taken to +refer to a small attached auxiliary vessel and these 30 bits are read +as the MMSI of the mother ship. Otherwise the 30 bits describe vessel +dimensions as in Message Type 5. + +According to <<MMSI>>, an MMSI is associated with an auxiliary craft +when it is of the form 98XXXYYYY, where (1) the '98' in positions 1 +and 2 is required to designate an auxiliary craft, (2) the digits XXX +in the 3, 4 and 5 positions are the MID (the three-digit country code +as described in <<ITU-MID>>) and (3) YYYY is any decimal literal from +0000 to 9999. + +=== Type 25: Single Slot Binary Message === + +Maximum of 168 bits (a single slot). Fields after the Destination +MMSI are at variable offsets depending on that flag and the Destination +Indicator; they always occur in the same order but some may be omitted. + +//: Type 25 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description | Member |T|Units +|0-5 | 6 | Message Type | type |u|Constant: 25 +|6-7 | 2 | Repeat Indicator | repeat |u|As in CNB +|8-37 | 30 | MMSI | mmsi |u|9 digits +|38 | 1 | Destination indicator | addressed |b|0=broadcast, + 1=addressed. +|39 | 1 | Binary data flag | structured |b|See below +|40 |0/30 | Destination MMSI | dest_mmsi |u|Message destination +|? |0/16 | Application ID | app_id |u|Unsigned integer +|? |0-128 | Data | data |d|Binary data +|=============================================================================== + +If the 'addressed' flag is on, 30 bits of data at offset 40 are +interpreted as a destination MMSI. Otherwise that field span becomes +part of the message payload, with the first 16 bits used as an +Application ID if the 'structured' flag is on. + +If the 'structured' flag is on, a 16-bit application identifier is +extracted; this field is to be interpreted as a 10 bit DAC and 6-bit +FID as in message types 6 and 8. Otherwise that field span becomes +part of the message payload. + +The data fields are not, in contrast to message type 26, followed by a +radio status block. + +Note: Type 25 is extremely rare. As of April 2011 it has not been +observed even in long-duration samples from AISHub. + +=== Type 26: Multiple Slot Binary Message === + +Takes up 60-1064 bits (up to 5 slots). + +//: Type 26 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description | Member |T|Units +|0-5 | 6 | Message Type | type |u|Constant: 26 +|6-7 | 2 | Repeat Indicator | repeat |u|As in CNB +|8-37 | 30 | MMSI | mmsi |u|9 digits +|38 | 1 | Destination indicator| addressed |b|0=broadcast, + 1=addressed. +|39 | 1 | Binary data flag | structured |b|See below +|40 |0/30 | Destination MMSI | dest_mmsi |u|Message destination +|? |0/16 | Application ID | app_id |u|Unsigned integer +|? |0-1004| Data | data |d|Binary data +|? |20 | Radio status | radio |u|See <<IALA>> for details. +|=============================================================================== + +The data field may span up to 5 256-bit slots in addition to the tail +end of the base slot. The application_ID field, if present, is to be +interpreted as a 10 bit DAC and 6-bit FID as in message types 6 and 8. +Documentation says the data length of each slot is 224 and adds the +note "Allows for 32 bits of bit-stuffing." + +The 20 radio status bits are always present after end-of-data in the +last slot and are in the format specified by <<IALA>>. The radio +status is 20 bits rather than 19 because an extra first bit selects +whether it should be interpreted as a SOTDMA or ITDMA state. + +Note: Type 26 is extremely rare. As of April 2011 it has not been +observed even in long-duration samples from AISHub. + +=== Type 27: Long Range AIS Broadcast message === + +ITU-1371-4 says this message is primarily intended for long-range +detection of AIS Class A equipped vessels (typically by +satellite). This message has a similar content to Messages 1, 2 and 3, +but the total number of bits has been compressed to allow for +increased propagation delays associated with long-range detection + +Length according to ITU-1374 is 96 bits. However, in the wild these +are sometimes transmitted with 168 bits (a full slot). Robust decoders +should warn when this occurs but decode the first 96 bits. + +//: Type 27 +[frame="topbot",options="header"] +|============================================================================== +|Field |Len |Description |Member |u|Units +|0-5 | 6 |Message Type |type |u|Constant: 27 +|6-7 | 2 |Repeat Indicator |repeat |u|As in CNB +|8-37 | 30 |MMSI |mmsi |u|9 decimal digits +|38-38 | 1 |Position Accuracy |accuracy |u|See Common Navigation Block +|39-39 | 1 |RAIM flag |raim |u|See Common Navigation Block +|40-43 | 4 |Navigation Status |status |u|See Common Navigation Block +|44-61 | 18 |Longitude |lon |I4|minutes/10 + East positive, West negative + 181000 = N/A (default) +|62-78 | 17 |Latitude |lat |I4|minutes/10 + North positive, South negative + 91000 = N/A (default) +|79-84 | 6 |Speed Over Ground |speed |u|Knots (0-62); + 63 = N/A (default) +|85-93 | 9 |Course Over Ground |course |u|0 to 359 degrees, + 511 = not available. +|94-94 | 1 |GNSS Position status|gnss |u|0 = current GNSS position + 1 = not GNSS position (default) +|95-95 | 1 |Spare | |x|Not used +|============================================================================== + +== Local extensions == + +Some regional authorities extend the AIS message set. + +The St. Lawrence Seaway broadcasts hydrological and lock-scheduling +messages using special encodings of the binary data of message types 6 +and 8 (described in <<SEAWAY>>, freely available), and safety +information using types 12 and 14. These message types are listed +under the description of type 8. + +The U.S. Coast Guard has a system called PAWSS (Port and Water Safety +System) which uses extended AIS binary formats. <<SEAWAY>> says it's +intercompatible with the St. Lawrence Seaway system and describes three +PAWSS-specific messages in its Appendix A. + +Since 2007 the Port Authority of London has operated a Thames AIS +system covering the Thames River; it uses extensions of message types +6 and 8. It is describes in <<THAMES>>. + +Since 2006 there has been some effort to standardize inland-waterway +extensions, described in <<INLAND>>. It uses different message formats +and identifiers than the PAWS/St. Lawrence systems, which do not conform. +There is an AIS extension called "RIS" (River Information System) that +covers portions of the Danube River and Black Sea which does conform. + +<<IMO289>> standardizes some subtypes of messages 6 and 8 similar to +PAWSS messages for DAC 1, the international jurisdiction code. However, +in some cases identically named subtypes are assigned different FIDs. + +=== U.S. Coast Guard Extended AIVDM === + +You may occasionally see AIVDM packets with additional comma-separated +fields following the CRC-32 checksum. This is a semi-obsolescent +logging format used by the USCG, which has never documented it well +and plans to replace it with a new one based on NMEA 4.0. + +Here's a sample sentence and field breakdown: + +------------------------------------------------------------------------------- +!AIVDM,1,1,,B,15Cjtd0Oj;Jp7ilG7=UkKBoB0<06,0*63,s1234,d-119,T12.34567123,r003669958,1085889680 +------------------------------------------------------------------------------- + +Following the "*63" checksum are additional fields delimited by commas. +These fields provide additional metadata about the reception of each AIS +broadcast. + +The field beginning with the lower case "s" is a Relative Signal +Strength Indicator (RSSI) measurement from the receiver. This +measurement has a range of 0-65535. This is one of the parameters used +internally by the AIS receiver to determine the signal strength value as +reported in the field beginning with the lower case "d". This field only +exists when the AIS receiver provides this data. + +The field beginning with a lower case "d" is the signal strength +measurement for this broadcast in dBm. This field only exists when the +AIS receiver provides this data. + +The field beginning with the upper case "T" is the Time of Arrival +of the received broadcast in seconds from UTC 0. This field only exists +when the AIS receiver provides this data. + +Another optional field not shown is one that begins with an upper +case "S" and represents the slot number in which the reception occurred. +The field would appear after the checksum and before the station +identifier field. This field only exists when the AIS receiver provides +this data. Example: S0042 + +The field beginning with the lower case "r" is a station identifier +field. This field is always provided, regardless of the type of AIS +equipment. (Occasionally a base station identifier will be prefixed with +"b" instead.) + +The last field is a time tag based on the standard C programming +language time function. Both date and time to the nearest second can be +derived from this field. This field is always provided, regardless of +the type of AIS equipment. + +== NMEA Tag Blocks == + +Beginning with NMEA 4.10, the standard describes a way to intersperse +"tag blocks" with AIS sentences in order to supply additional +metadata, usually a Unix timestamp to be associated with a sentence +(or contiguous group of sentences such as an armored AIS Type 5). + +The tag block facility is complex, in some respects poorly specified, +and there has been yet much public discussion of it. This section +should be considered provisional and in need of improvement. + +The general format of a tag block is: an opening backslash, followed +by multiple comma-separated fields none of which may contain +backslashes, followed by an asterisk and NMEA checksum, followed by a +closing backslash. + +The following is an example of an AIS Type 1 sentence preceded by a +tag block: + +------------------------------------------------------------------------------------------------- +\g:1-2-73874,n:157036,s:r003669945,c:1241544035*4A\!AIVDM,1,1,,B,15N4cJ`005Jrek0H@9n`DW5608EP,0*13 +------------------------------------------------------------------------------------------------- + +Each comma-separated field is expected to be a type key, followed by a +colon, followed by content. The semantics of the type keys are as +follows (table from <<NMEA-ADVANCE>>): + +Confusingly, there is a different standard introduced with NMEA 4.00, +IEC 62320-1, that uses the same tag block format but a slightly +different (overlapping) set of field keys + +.NMEA 4.00 Field Types +[frame="topbot",options="header"] +|=========================================================================== +| IEC | NMEA | Type | Description +| c | c | int>0 | UNIX time in seconds or milliseconds +| d | d | string | Destination (at most 15 chars) +| xGy | g | int-int-int | Sentence grouping +| x | n | int>0 | line count +| | r | int>0 | relative time +| s | s | string | Source / station +| i | t | string | Text string (at most 15 chars) +|=========================================================================== + +The IEC 62320-1 and NMEA 4.10 c field is an emission time for the +sentence it precedes. We're not yet sure what the time unit is. + +The NMEA 4.10 g value describes a sentence or sentence group to +associate the tag block to. It is a triple of ints separated by +dashes. The first number is the sentence number, the second is total +number of sentences to make up one group. The third number is an +identifier for that particular group. If there is no g value, the tag +block simply applies to the following sentence. + +As of May 2014 no NMEA 4.10 relative time fields have been observed in the +wild. It is unknown whether the unit is seconds or milliseconds. + +The d, i/t, and s fields are intended to be used for filtering by +station IDs included in them. + +Part of the NMEA 4.10 standard describes a configuration message facility by +which AIS message receivers can send queries to AIS senders, and under +some circumstances change the semantics if tag blocks (in particular, +by specifying time units and epoch). + +We do not yet have more definite information on the meaning of these +fields or how they are related to nearby AIVDM/AIVDO sentences. We +hope to add this in a future revision. + +== AIS Payload Byte Alignment, Padding, and Bit Stuffing == + +Warning: Here there be dragons. Read with care. Once you get through +it, you will at least not encounter anything more confusing in the +rest of this document. + +=== Byte Alignment === + +AIS is a bit-sync protocol. While some fields within AIS payloads are +8-bit-byte-aligned with preceding padding, most are not. Furthermore, +while most message variants have bit lengths that are a multiple of 8, +some do not. + +<<ITU1371>> includes a single sentence, easy to miss, requiring +over-the-air messages to have trailing padding to a 8-bit boundary. +In most cases message lengths are a multiple of 8 with trailing spare +fields added to ensure this; thus, the requirement will not change the +transmitted bitlength of the message from what's described in the +standard. There are, however, two exceptions to this rule. + +One is an apparent error in the format design. The type 15 message +has a variant with 108 data bits and a trailing 2-bit spare field, for +110. This spare should have been 4 bits to guarantee a byte boundary +at 112 bits. Decoders need to be prepared to encounter this length +in case the transmitter has implemented the padding requirement +properly. + +The other is messages containing variable-length text packed into +6-bit nibbles: types 6, 12, and 14. They may have trailing padding +after the last nibble to get to an 8-bit boundary. Decoders should +be prepared to encounter and ignore this. + +The variable-length binary message types 8, 17, 25, and 26 are +constrained to have data payloads of a size such that the payload ends +on a byte boundary, but should not require special handling on this +account. The binary data in message types 8 and 17 is also guaranteed +to *begin* on a byte boundary, but this is not true of the addressed +variants of type 25 and 26. + +=== Interaction with AIVDM padding === + +AIVDM armoring introduces a second layer of padding, with confusing +consequences. The real payload, already padded to a bit length that +is a multiple of 8 by the AIS radio layer, gets armored as a sequence +of ASCII characters encoding 6-bit nibbles. To capture all of it, the +payload must in effect be padded to the next multiple of 6. + +Consider a type 12 message with 5 sixbit characters in it. These will +become bits 72-102 in the over-the-air message. The AIS radio layer will +pad that to 104 bits at transmission to get to an 8-bit boundary. The +receiver, reporting the data in AIVDM armoring, will pad that to 108 +bits to get to a 6-bit boundary, encode the result, and issue a pad +character of '4' to indicate that the low 4 bits of the last 6-bit +nibble should be ignored. + +Because these requirements are tricky and poorly documented in the +official standards, receivers not uncommonly get them wrong. The most +common way to get them wrong seems to be by computing the pad +character incorrectly. + +The most common error observed in the wild on AISHub is reporting a +pad 2 bits too small, making the message look like it is 2 bits longer +than it actually is. This seems for some reason to be most common +on Type 5 messages, which then decode as 426 bits rather than 424. + +Accordingly, we recommend that when validating fixed-size messages by +type and bit-length, decoders should accept messages that are up to 5 +bits over their theoretically correct length. + +For messages with a variable-length trailing payload (6, 8, 12, 14, +17, 25, 26) there is no way to detect that the pad character might +be wrong. If it is, this will manifest as truncation of the last +nibble or extra trailing zero data. + +=== Bit Stuffing === + +The following probably will not affect decoders. Nevertheless we +document it here because it is just the sort of thing that is (a) +likely to confuse implementors reading the public portions of the +standards, and (b) all too likely to become visible if there are +firmware or software errors in the transmission chain. + +There are references to "bit-stuffing" in the <<IALA>> clarifications +describing certain payload fields. <<C2>> reveals the following in +3.2.2.1: "The bitstream is subject to bit stuffing. This means that if +more than 5 consecutive 1s are found in the output bit stream, a zero +is inserted. This applies to all bits except the databits of HDLC +flags." <<IALA>> clarifies as follows: "On the transmitting side, +this means that if five (5) consecutive ones (1s) are found in the +output bit stream, a zero should be inserted after the five (5) +consecutive ones (1s). This applies to all bits between the HDLC flags +[...] On the receiving side, the first zero after five (5) consecutive +ones (1s) should be removed." + +It appears that this bit stuffing is meant to be performed by the AIS +radio link layer at transmission time and undone at reception time, +and should not be visible in AIVDM payloads reported by the +receiver. + +== AIS feed sites == + +Most sites that advertise "live" AIS feeds actually give you a map +display through a browser. Here are a few from which you can get raw +sentence data over a TCP/IP port for testing. Coverage on these is +not yet very comprehensive; these sites tend to have good coverage in +Europe, the U.S. and a few ports in Asia but to be spotty elsewhere. +See their siting maps for details. + +- http://aishub.net[AIS Hub]: +Share alike. You contribute a feed, you get back all feeds. + +- http://maritime.ihs.com[AIS Live]: +Subscription access to real-time data. No longer has free access even +to delayed data. + +- http://hd-sf.com:9009 +Free San Francisco Bay Area AIS feed. For non-commercial use only. + +== JSON-AIS encoding == + +Here is an application of the JSON metaformat to present AIS data in a +form more convenient for application use than AIVDM/AIVDO sentences. +This encoding is implemented by GPSD and its client libraries. It is +described here because (a) the specification is closely tied to the +field encodings, and (b) the author wishes to offer it as an +interoperability standard for other applications. + +One previous effort, <<HAM-JSON-AIS>>, has been made to define a +JSON-based standard for exchange of unpacked, human-readable AIS +data. The latest version at time of writing, from December 2008,covers +only a small subset of the most common AIS messages, and many data +fields in the messages it does dump are omitted. The member names +given in the bit-field tables match the attributes used in HAM-JSON-AIS +when HAM-JSON-AIS includes that field. + +The general ground rules for JSON-AIS encoding are as follows: + +. Each sentence decodes to a JSON object. + +. When multiple kinds of JSON objects may occur in a data stream, AIS +objects have the attribute "class":"AIS". + +. Some collections of fields aggregating to a timestamp are dumped in +ISO8601 format. + +.Timestamp fields +[frame="topbot",options="header"] +|=========================================================================== +|Message| ITU/IMO fields | JSON ISO8601 | Format +| 4 | year,month,day,hour,minute,second| timestamp | %4u-%02u-%02uT%02u:%02u:%02uZ +| 5 | month,day,hour,minute | eta | %02u-%02uT%02u:%02uZ +|6(1/12)| lmonth,lday,lhour,lminute | departure | %02u-%02uT%02u:%02uZ +| | nmonth,nday,nhour,nminute | eta | %02u-%02uT%02u:%02uZ +|6(1/18)| month,day,hour,minute | arrival | %02u-%02uT%02u:%02uZ +|6(1/20)| month,day,hour,minute | arrival | %02u-%02uT%02u:%02uZ +|6(1/23)| month,day,hour,minute | timestamp | %02u-%02uT%02u:%02uZ +|6(1/28)| month,day,hour,minute | start | %02u-%02uT%02u:%02uZ +|8(1/11)| day,hour,minute | timestamp | %02uT%02u:%02uZ +|8(1/11)| day,hour,minute | timestamp | %02uT%02u:%02uZ +|8(1/13)| fmonth,fday,fhour,fminute | from | %02u-%02uT%02u:%02uZ +|8(1/13)| tmonth,tday,thour,tminute | to | %02u-%02uT%02u:%02uZ +|8(1/22)| month,day,hour,minute | timestamp | %02u-%02uT%02u:%02uZ +|8(1/27)| month,day,hour,minute | start | %02u-%02uT%02u:%02uZ +|8(200/23)| year,month,day,hour,minute | start |%4u-%02u-%02uT%02u:%02u +|8(200/23)| year,month,day,hour,minute | end |%4u-%02u-%02uT%02u:%02u +|=========================================================================== + +. There are two variants of the encoding, one scaled and one +unscaled, which differ in the treatment of float and +controlled-vocabulary fields. An AIS-JSON object may have the optional +attribute "scaled":true to signify that the rest of its fields are +scaled; if this attribute has the value 'false' or is omitted, no +scaling has been performed. Message types for which the unscaled and +scaled dumps will differ are 1-5, 9, 11, 17-19, 21-24, and 27. + +. In unscaled mode, float-valued fields are dumped in their unscaled +integer form. In scaled mode, division or other specified scaling is +applied and the value dumped as a float, *except* that certain extreme +or data-unavailable value as may be dumped as fixed strings; see the +table below. + +. Each field in the Controlled Vocabularies list in the following +table is dumped twice: once with its base name as an integer, once +with "_text" appended to the name and the vocabulary item as value. +(This behavior is new in GPSD protocol version 3.9; older versions +made integer or string display dependent on the "scaled" flag.) + +.Special fields +[frame="topbot",options="header"] +|=========================================================================== +|Message | Float Fields | Controlled Vocabularies +| 1-3 | turn, speed, lon, lat | status +| 4, 11 | lon, lat | epfd +| 5 | draught | shiptype, epfd +| 6(1/14)| lon, lat, cspeed | - +| 6(1/18)| lon, lat | - +| 6(1/20)| berth_lon, berth_lat, berth_depth | position +| 6(1/22)| lon, lat | - +| 6(1/25)| code | code* +| 6(1/28)| lon, lat | rtype +| 6(1/32)| lon, lat, cspeed | - +| 6(235/100) | - | racon, light +| 8(1/11)| lon, lat, airtemp, dewpoint, | preciptype, ice +| | visibility, waterlevel, cspeed, | +| | cspeed2, cspeed3, waveheight, | +| | swellheight, watertemp salinity | +| 8(1/17)| lon, lat | idtype* +| 8(1/18)| lon, lat | - +| 8(1/19)| - | signal, nextsignal +| 8(1/21)| lon, lat, visibility, airtemp, | - +| | watertemp, waveheight, | +| | swellheight, speed, pressure, pdelta,| +| | rwindspeed, mgustspeed, airtemp, | +| | surftemp, cloudbase, | +| | swheight1, swheight2 | +| 8(1/22)| lon, lat | - +| 8(1/25)| - | iceclass* +| 8(1/27)| lon, lat | rtype +| 8(1/31)| lon, lat, airtemp, dewpoint, | preciptype +| | visibility, waterlevel, cspeed, | +| | cspeed2, cdepth2, cspeed3, | +| | cdepth3, waveheight, | +| | swellheight, watertemp, salinity | +| 9 | lon, lat, course | - +| 17 | lon, lat | - +| 18 | lon, lat, course | - +| 19 | lon, lat, course | shiptype, epfd +| 21 | lon, lat | aid_type, epfd +| 22-23 | ne_lon,ne_lat, sw_lon, sw_lat | shiptype,stationtype +| 24 | - | shiptype +| 27 | lon, lat | - +|=========================================================================== + +This table does not include fields that are scaled by multipliers to integers. +These are reported in the multiplied form in both scaled and unscaled modes. + +Asterisked fields are not yet decoded by GPSD, but probably will be in +a future release. + +As the Beaufort scale is usually quoted numerically, conforming implementations +should do so rather than expanding to its controlled vocabulary. + +.String special values in scaled mode +[frame="topbot",options="header"] +|=========================================================================== +|Message | Fieldname | Special values +| 1-3 | turn | +"nan" = not available, "fastright" = fast right turn (above 5deg/30sec degrees), +"fastleft" = fast left turn (above 5deg/30sec degrees). +| 1-3 | speed | "nan" = not available, "fast" = speed >= 102.2 knots +| 9 | alt | "nan" = not available, "high" = alt >= 4094 meters +| 9 | speed | "nan" = not available, "fast" = speed >= 1023.0 knots +|=========================================================================== + +. Trailing arrays are dumped as JSON subobject arrays. The name of the +array item is the name given in the 'a' table entry. Explicit array count +fields (presently "waycount" in Route Info messages") are not dumped. + +. In the VTS-Generated/Synthetic Targets message, the id field is +dumped as the value of an attribute the name of which is specified by +the idtype field. + +== Open Questions == + +The AIS standards are not marvels of clear and unambiguous drafting. +We list here some open questions which could usefully be addressed +by governing authorities. + +Some of these duplicate material in paragraphs tagged with OPEN-QUESTION. +They are collected here for convenience. + +The message type summary table in <<INLAND>> indicates the existence +of a broadcast (unaddressed) variant of Inland Number of Persons On +Board. But no field breakdown is given for this variant. If it +supposed to be identical to the Type 6 layout, what is to be done +with the Destination MMSI field? + +Are <<INLAND>> time-of-day fields UTC or local? + +In <<INLAND>> RTA at lock/bridge/terminal message, no default is +specified for the Status field. + +In Inland Ship Static and Voyage Related Data, which of two possible +ERI numeric codesets are used for the Type field - the 4-digit codes +in the 8000-8073 range, or the AIS codes in the 1-99 range? Full ERI +codes have been observed in the wild. + +In the <<INLAND>> description of Message 5 extensions, footnote 6 is +incomprehensible and not actually referenced in the table. + +In the <<INLAND>> EMMA Warning and Signal Strength messages, the +description is not explicit about the interpretation of the longitude +and latitude fields; these semantics are assumed here from 28 and +27-bit fields in other messages. + +In the <<INLAND>> EMMA Warning, what are the semantics of the min and +max values? To what parameters do they apply? + +Is the <<IMO236>> versions of Persons On Board, which is supposed to +be Type 6 and thus addressed, erroneous? There is no destination +address field in the layout. + +<<IMO289>> says of the "VTS Generated/Synthetic Targets" message: +"When MMSI or IMO number is used, the least significant bit should +equal bit zero of the Target Identifier." It is unclear how "bit +zero" is to be interpreted, but it is not possible to reconcile +interpreting it as the leading bit of the field with AIS big-endian +encoding. Settling this awaits live testing. + +== References == + +[bibliography] +- [[[AIS]]] http://en.wikipedia.org/wiki/Automatic_Identification_System[Automatic +Identification System] + +- [[[SOLAS]]] + http://www.navcen.uscg.gov/enav/ais/AIS_Regs_SOLAS_MTSA_FR.pdf[SOLAS + AIS Regulations] + +- [[[US-REQUIREMENTS]]] + http://www.navcen.uscg.gov/enav/AIS/AIS_carriage_reqmts.htm[AIS + Carriage Requirements] + +- [[[ITU1371]]] + http://www.itu.int/rec/R-REC-M.1371/en + ITU Recommendation on the Technical Characteristics for a Universal + Shipborne Automatic Identification System (AIS) using Time Division + Multiple Access in the Maritime Mobile Band]. All versions are + available here. + +- [[[IALA]]] http://www.ialathree.org/iala/pages/AIS/IALATech1.5.pdf[IALA + Technical Clarifications on Recommendation ITU-R M.1371-1] + +- [[[NAVCEN]]] http://www.navcen.uscg.gov/enav/ais/[NAVCEN AIS pages] + +- [[[NMEA]]] "NMEA Revealed" This document collects information from + public sources on the proprietary NMEA 0183 standard. It is widely + distributed, but due to its hosting site having folded in late 2011, + its home location is unstable. It is probably best found by typing + the title into a search engine. + +- [[[INLAND]]] http://www.unece.org/fileadmin/DAM/trans/doc/finaldocs/sc3/ECE-TRANS-SC3-176e.pdf[International Standard for tracking and tracing on Inland Waterways] + +- [[[SEAWAY]]] http://www.greatlakes-seaway.com/en/pdf/aisdata.pdf[St. Lawrence + Seaway AIS Data Messaging Formats and Specifications] + +- [[[THAMES]]] http://www.pla.co.uk/pdfs/maritime/APPENDIX_I__II_amendment_for_2012_byelaws_FINAL.pdf[Thames AIS - Technical Requirements Specification] + +- [[[IMO236]]] http://www.imo.org/includes/blastData.asp/doc_id=4503&filename=236.pdf[IMO + Circular 236: Guidance on the Application of AIS Binary Messages (May 2004)] + +- [[[IMO289]]] + http://vislab-ccom.unh.edu/~schwehr/papers/2010-IMO-SN.1-Circ.289.pdf[IMO + 289: Guidance on the Use of AIS Application-Specific Messages + (June 2010)] + +- [[IALA-A126]] + http://www.ialathree.org/chapo/publications/documentspdf/doc_235_eng.pdf[IALA + Recommendation A-126 On The Use of the Automatic Identification System (AIS) + in Marine Aids to Navigation Services + +- [[[Schwehr]]] http://schwehr.org/blog/[Kurt Schwehr's weblog] + +- [[[IEC-PAS]]] IEC-PAS 61162-100, "Maritime navigation and + radiocommunication equipment and systems" The ASCII armoring + is described on page 26 of Annex C, Table C-1. Communicated by + Kurt Schwehr; I have not looked at it. + +- [[[IEC-62287]]] "Maritime Navigation and Radiocommunication + Equipment and Systems – Class B Shipborne Equipment of the + Automatic Identification System (AIS)" Communicated by Mike Greene; + I have not looked at it. + +- [[[ITU-MID]]] http://www.itu.int/cgi-bin/htsh/glad/cga_mids.sh?lng=E[Table + of Maritime Identification Digits] + +- [[[RAIM]]] http://en.wikipedia.org/wiki/RAIM[Receiver Autonomous + Integrity Monitoring] + +- [[[C2]]] http://www.uais.org/AISspecificationCorrigendum2.pdf[AIS + Specification Corrigendum 2] + +- [[[MMSI]]] http://www.navcen.uscg.gov/marcomms/gmdss/mmsi.htm#format[MMSI + Format] + +- [[[HAM-JSON-AIS]]] http://wiki.ham.fi/JSON_AIS.en[JSON AIS transmission protocol] + +- [[[AISHUB]]] http://www.aishub.net/[AIS Hub, the AIS data sharing center] + +- [[[PILOTPLUG]]] http://www.pilotplug.com/ + +- [[[IALA-A126]]] http://www.iala-aism.org/iala/publications/documentspdf/doc_299_eng.pdf[] + +- [[[AIS-SART]]] http://www.navcen.uscg.gov/?pageName=AISMessagesA + +- [[[SART]]] http://en.wikipedia.org/wiki/AIS-SART + +- [[[PATREON]]] https://www.patreon.com/esr + +- [[NMEA-ADVANCE]] http://www.nmea.org/Assets/0183_advancements_nmea_oct_1_2010%20(2).pdf + +== Change history == + +Version 1.0 was the initial release covering messages 1-3, 4, and 5. + +Version 1.1 adds message breakdowns for 9 and 18, explanation of the +Repeat Indicator feld, and the explanation of USCG extended AIVDM. + +Version 1.2 adds information on the ITU1371 edition 3 maneuver field, +and the RAIM flag. It also adds an important clarification about +six-bit decoding. + +Version 1.3 adds information on message types 6, 7, 12, and 13, and +attempts to demystify bit-stuffing. + +Version 1.4 adds explicit decoding tables for ASCII armoring and +six-bit ASCII. + +Version 1.5 corrects the interpretation of field 7 in AIVDM +ASCII-armored sentences. + +Version 1.6 corrects some minor errors in the interpretation of Type +5 messages. + +Version 1.7 adds descriptions for Type 10, 11, 19, 21, and 24 +messages, information about ITU-1371-3 flags in message type 18, +and the new section on Improving This Document. + +Version 1.8 fixes some broken markup and adds information about JSON-AIS. + +Version 1.9 adds more information on JSON and the member names. + +Version 1.10 fixes a typo in the formula for undoing 6-bit armoring. + +Version 1.11 describes message types 15, 16, and 17. + +Version 1.12 describes messages 20 and 22, and adds navigation aid +type codes. + +Version 1.13 documents more out-of-band values and treats radio status +blocks more uniformly. + +Version 1.14 documents message 23. + +Version 1.15 corrects an incorrect member name in message 5. It didn't +match my C code, but had no effect on conformance with the standard. I +corrected it because it confused someone working on a Python decoder. + +Version 1.16 incorporated various minor fixes and corrections from +Neal Arundale. One 'standard' fieldname changed, in message type 21: +type -> aid_type. + +Version 1.17 clarifies the role of @ as a terminator in 6-bit text. + +Version 1.18 notes a possible off-by-two error in the standards' +description of type 14, and noted that type 25 and 26 have not +been observed in the wild. It also adds a more complete description +of AIS data types and some pragmatics about spare and reserved fields. + +Version 1.19 adds a description of AIS Hub. + +Version 1.20 adds a list of AIS feed sites - just two, so far. + +Version 1.21 describes JSON-AIS more completely. It adds descriptions +for AIS messages type 25 and 26, not yet observed in the wild. + +Version 1.22 describes the problem with message length checks. +Notes on EPFD value 15 and shiptype values > 99 are added. Added +another AIS feed. Corrections and more details on message 22. + +Version 1.23 corrects some typos and numbering errors in the +description of message 19 (field widths were correct, though). +Also, AISLive no longer offers free delayed access. + +Version 1.24 breaks the Type 6 and 8 application_id field into +DAC and FID and adds tables for known DAC/FID pairs and their sources. +Unspecified fields are now omitted in JSON dumps. A new section +"AIS byte alignment, bit stuffing, and padding", reveals some +particularly black magic. + +Version 1.25 adds clarifications and more message subtypes for +U.S. Coast Guard PAWSS messages. + +Version 1.26 corrects an error in describing rate-of-turn decoding in +AIS Type 1, 2, and 3 messages, + +Version 1.27 describes the sometime U.S. practice of omitting the leading +'3' region code from MMSIs. + +Version 1.28 merges updates from IMO 289, communicated by Kurt Schwehr. + +Version 1.29 added much information on WMO special message formats in +types 6 and 8. + +Version 1.30 was revised because M.1371-4 is now a free download. +Also, we describe "pilot plugs" and AIS message type 27. We get +much more explicit about defaults in IMO236 and IMO289 messages. + +Version 1.31 shortened some C names in the Meteorological/Hydrological +messages and fixed typos. + +Version 1.32 adds descriptions of IMO Area Notice and Environmental +messages. It adds explicit type information to the tables. + +Version 1.33 notes that the home location of "NMEA Revealed" became +unstable in late 2011. + +Version 1.34 fixes a typo in the MMSI 2 field offset of message 7. + +Version 1.35 notes that 24A and 24B messages don't necessarily come +in neat adjacent pairs and that decoders need to handle this. + +Version 1.36 corrects erroneous scale factors in the IMO 289 Area +Notice and Time to Enter Port descriptions. + +Version 1.36 adds breakdowns of Aid to Navigation monitoring messages +used in the UK and the Republic of Ireland. + +Version 1.37 corrects a field signedness error in the IMO236 and +IMO289 Met/Hydro messages. + +Version 1.38 corrects a minor bug in the description of the Navigation +Message ROT field. Adds information on AIS-SART. + +Version 1.39 corrects signedness errors in the description of the Air +Temperature and Water Temperature fields in the IMO289 Weather Report +From Ship message. + +Version 1.40 notes that AIS channel codes '1' and '2' may be +encountered in the wild. + +Version 1.41 has been slightly amended because type 27s have started +showing up on satellite feeds. + +Version 1.42 fixes a typo in the Type 4 message description. + +Version 1.43 describes the ITU-R 1371-4 breakdown of the Type 24 +Vendor ID field and adds information on AIS standards for inland +waterways. Also Inland AIS standard messages are now covered. + +Version 1.44 adds substantial new information on MMSIs and updates +the <<MMSI link>>, which was stale. + +Version 1.45 adds a description of variant AIS talker IDs and NMEA +4.10 tag blocks. + +Version 1.46 corrects an error in the specification on Inland AIS Type +10s. It also adds a bit more information on AIS tag blocks. + +Version 1.47 corrects some minor field type errors in Type 18 and Type +19 speed fields. Also corrected Type 9 radio field length. + +Version 1.48 corrects two typos in the WMO289 Area Notice and Weather +Report From Ship definitions. + +Version 1.49 adds a technical detail about non-AIS encapsulated +sentences. + +Version 1.50 fixes a couple of typos in the ISO289 Berthing Data and +Tidal Window message descriptions. + +Version 1.51 fixes an incorrect bit length in the IMO289 Hydrological +Data message. + +Version 1.52 fixes many small typos. Change Gratipay to Patreon. + +// end |