{"id":1589,"date":"2016-05-31T23:51:15","date_gmt":"2016-05-31T23:51:15","guid":{"rendered":"\/?post_type=ht_kb&#038;p=1589"},"modified":"2018-11-09T12:19:13","modified_gmt":"2018-11-09T12:19:13","slug":"message-repetition-rates","status":"publish","type":"ht_kb","link":"https:\/\/www.use-snip.com\/kb\/knowledge-base\/message-repetition-rates\/","title":{"rendered":"Determining Message Repetition Rates"},"content":{"rendered":"<p>This article demonstrates detailed message analysis using <span style=\"color: #0000ff;\"><strong>SNIP&#8217;<\/strong><\/span>s\u00a0 <a href=\"\/kb\/knowledge-base\/using-the-rtcm3-decoder-dialog\/\">RTCM3 Decoder<\/a> dialog to determine what messages are present in a given connection stream.<\/p>\n<h4>Background<\/h4>\n<p>The primary reasons to select one stream over another are typically that it has the message content you seek and that it is suitably close to where you are operating.\u00a0 But how can you determine which streams have the message contents you require?<\/p>\n<p>There are four standard ways to determine the message contents and the rates at which each is being sent for any given remote caster stream.\u00a0 They are:<\/p>\n<ul>\n<li>Use (trust?) what the Caster Table tells you about the stream.<\/li>\n<li>Use (trust?) what the Stream says about itself in Message Type 1013.<\/li>\n<li>Connect and read it yourself over a few minutes&#8217; time using the decoder tables.<\/li>\n<li>Connect and read it yourself over a few minutes&#8217; time using the console filters.<\/li>\n<\/ul>\n<p>Of these, only the last two are entirely trustworthy, but errors and omissions in the other two are often simply annoying and are not fatal for using the subject stream.\u00a0 We consider each in turn here.<\/p>\n<h4>The Caster Table<\/h4>\n<p>The Caster Table was originally intended to be a machine generated table that could be used by Rover devices to select what streams to connect to.\u00a0 Information about each stream is represented by a single row of data.\u00a0 In practical fact the table is created by a combination of machine and human data entry and often has obvious errors in its data fields.\u00a0\u00a0 As it is &#8220;just a guide&#8221; it does not affect the actual navigation results achieved. But as a <span style=\"color: #0000ff;\"><strong>SNIP<\/strong><\/span> owner\/operator we urge you to take the time to make your own entries as correct as possible.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #008000;\"><strong>Hint<\/strong><\/span>: A good briefing on how to read a Caster Table is provided by <a href=\"http:\/\/rtcm-ntrip.org\" target=\"_blank\" rel=\"noopener\">rtcm-ntrip.org<\/a> at <a href=\"https:\/\/software.rtcm-ntrip.org\/wiki\/Sourcetable\" target=\"_blank\" rel=\"noopener\">this<\/a> page and (more to the task at hand, the stream entries) at <a href=\"https:\/\/software.rtcm-ntrip.org\/wiki\/STR\" target=\"_blank\" rel=\"noopener\">this<\/a> page.\u00a0\u00a0 For the actual RTCM SC-104 NTRIP standard, look <a href=\"http:\/\/www.rtcm.org\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #008000;\"><strong>Hint<\/strong><\/span>:\u00a0 You can see the current caster table which your <span style=\"color: #0000ff;\"><strong>SNIP<\/strong><\/span> installation is sending in the console by pressing the <em><strong>Table<\/strong> <\/em>button on the <em><strong>Casters and Clients<\/strong><\/em> tab.\u00a0 Alternatively\u00a0 you can see the caster table of most\u00a0 NTRIP Casters by typing the URL into a browser along with the port number, a string such as:\u00a0 <a href=\"http:\/\/www.igs-ip.net:2101\" target=\"_blank\" rel=\"noopener\">www.igs-ip.net:2101 <\/a><\/p>\n<p>Two fields are of importance in this discussion&#8211;the 3rd and 4th entries in each row.\u00a0 These are often called the FORMAT and the FORMAT-DETAILS.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #008000;\"><strong>Note<\/strong><\/span>: One further sidebar remark: in the Caster Table the field delimiter is &#8220;;&#8221; so a semicolon may be used within a field for further element demarcation.<\/p>\n<p>The first of these, the <strong>format<\/strong>, defines the overall protocol of the data. The precise list and spelling of valid strings to be used are not defined by the RTCM SC104 standard, so small variations do exist.\u00a0 Strings like &#8220;RTCM 3.0&#8221;, &#8220;RTCM 3.1&#8221;, or &#8220;RTCM3&#8221; all mean that RTCM revision 3.x message traffic will be found.\u00a0 Other common terms like &#8220;Raw&#8221; can be used to mean anything.\u00a0 In <span style=\"color: #0000ff;\"><strong>SNIP<\/strong> <\/span>we add terms like &#8220;uBlox Raw&#8221; when it is helpful.<\/p>\n<p>The next entry, the <strong>format-details<\/strong>, then defines what messages of this protocol are to be found.\u00a0 Here are some representative entries taken from actual Caster Tables to show the variations found.<\/p>\n<ol>\n<li>1(1),2(30),3(10),18(1),19(1),22(10),23(10),24(10),31(1),32(10)<\/li>\n<li>&#8220;&#8221;<\/li>\n<li>1004(1),1006(10),1008(10),1012(1),1033(10)<\/li>\n<li>1004(1),1005\/1007(5),PBS(10)<\/li>\n<li>1004, 1006, 1012<\/li>\n<li>1019(5),1020(5),1044(5),1046(5)<\/li>\n<li>1004(1),1006(10),1008(10),1012(1),1013(10),1019(30),1020(30),1033(10)<\/li>\n<\/ol>\n<p>Consider these entries a bit further. Entry<strong>#1<\/strong> shows a caster sending 2.x type messages.\u00a0 Most stations sending this type of data send only message types 18 and 19.\u00a0\u00a0 Entry<strong>#2<\/strong> shows a caster entry where no message details are given at all.\u00a0 This practice is fairly common even among larger state-run networks.\u00a0 Entry<strong>#3<\/strong> shows a typical entry where the message types and their rates are well laid out.\u00a0 Entry<strong>#4<\/strong> shows a typical US West Coast entry where an additional non-std message &#8220;PBS&#8221; (Plate Boundary Observation) is claimed to be sent every 10th second (at this time no such message is sent).\u00a0 Also note the combination of two message types in this list (1005\/1007).\u00a0 Entry<strong>#5<\/strong> shows the list of messages sent but no time rates, a less common but valid use of the field (you will also find this pattern used when messages are sent at &gt;1Hz).\u00a0 Entry<strong>#6<\/strong> shows a stream sending only orbital data.\u00a0 Entry<strong>#7<\/strong> shows a stream sending observational measurements and also sending orbital data, which is fairly uncommon.<\/p>\n<p>From this data it is possible to select the best stream to be used.<\/p>\n<p>It should also be noted in closing that many Caster Table entries do not provide correct Lat-Long values.\u00a0 Some virtual reference stations leave this data field empty (defaulting to 0,0), while other stations fail to recall that North America is located in the range of negative Longitude values.\u00a0 Many NTRIP Client tools (such as RTKLIB&#8217;s NTRIP Browser tool) allow you to display the above in a more readable table format and also to plot the reported locations on a base map.<\/p>\n<h4>The Contents of Message Type 1013<\/h4>\n<p>RTCM3 <a href=\"\/kb\/knowledge-base\/an-rtcm-message-cheat-sheet\/\" target=\"_blank\" rel=\"noopener\">message type<\/a> 1013 provides a way for the data stream to describe what messages and rates are being sent.\u00a0 Because the stream itself builds this message (technically <a href=\"\/kb\/knowledge-base\/question-what-is-an-ntrip-server\/\" target=\"_blank\" rel=\"noopener\">NTRIP Server<\/a> element does it), it does not suffer from the same problems of incorrect or missing data which the Caster Table often has.<\/p>\n<p>The 1013 message is commonly used for two purposes.\u00a0 First, its header provides a neat and easy way to determine the offset between GPS and UTC time, 17 seconds at the time of this writing.\u00a0 It also provides the current Modified Julian Date (MJD) which is an interesting way to recover the current GPS week and convert to common time systems.\u00a0 Some operators send and use this message only for these purposes.\u00a0 [As a rule RTCM uses the current TOW as its working time stamp, so in order to represent an RTCM stream as a final absolute time, additional data is needed.]<\/p>\n<p>Second, the 1013 message also allows sending information regarding other message content in the stream. For up to 31 additional message types, the 1013 message allows sending the period between subsequent messages (in 1\/10th second units) and a synchronicity bit (used to indicate that the stated schedule time will not vary based on other traffic).<\/p>\n<p>Here are some representative 1013 message contents, using <span style=\"color: #0000ff;\"><strong>SNIP&#8217;<\/strong><\/span>s\u00a0 <a href=\"\/kb\/knowledge-base\/using-the-rtcm3-decoder-dialog\/\" target=\"_blank\" rel=\"noopener\">RTCM3 Decoder<\/a> dialog to obtain the data.<\/p>\n<p style=\"text-align: left;\"><a href=\"\/wp-content\/uploads\/2016\/06\/Type1013_Bp.png\"> \u00a0\u00a0 <\/a><a href=\"\/wp-content\/uploads\/2016\/06\/Type1013_Bp.png\">\u00a0\u00a0\u00a0 <\/a><a href=\"\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Bp.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1637 size-post-small\" src=\"\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Bp-320x396.png\" alt=\"Type1013_Bp\" width=\"320\" height=\"396\" srcset=\"https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Bp-320x396.png 320w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Bp-243x300.png 243w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Bp-40x50.png 40w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Bp.png 500w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><a href=\"\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Ap.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1640 size-post-small\" src=\"\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Ap-320x396.png\" alt=\"Type1013_Ap\" width=\"320\" height=\"396\" srcset=\"https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Ap-320x396.png 320w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Ap-242x300.png 242w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Ap-40x50.png 40w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/Type1013_Ap.png 500w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><strong>Decoded 1013 Type message contents for two streams<\/strong>,<br \/>\nOne with message details, one without<\/p>\n<p>When present (as many streams do not send it at all, and some streams do not fill out the 2nd part) the 1013 message represents the best way to determine the messages present and their sending rate<\/p>\n<h4>Reading the Stream Itself, decoder method<\/h4>\n<p>One definitive way to determine the stream&#8217;s content is by using <span style=\"color: #0000ff;\"><strong>SNIP&#8217;<\/strong><\/span>s\u00a0 <a href=\"\/kb\/knowledge-base\/using-the-rtcm3-decoder-dialog\/\" target=\"_blank\" rel=\"noopener\">RTCM3 Decoder<\/a> dialog to obtain the data for a period of time (say a few minutes) and then simply observe how many messages of each type have been recorded. Using the same caster streams above, observe the red highlighted count values.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/06\/MsgCnts_Ap.png\">\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 <\/a><a href=\"\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Ap.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1638 size-post-small\" src=\"\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Ap-320x395.png\" alt=\"MsgCnts_Ap\" width=\"320\" height=\"395\" srcset=\"https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Ap-320x395.png 320w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Ap-243x300.png 243w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Ap-41x50.png 41w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Ap.png 501w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><a href=\"\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Bp.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1639 size-post-small\" src=\"\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Bp-320x395.png\" alt=\"MsgCnts_Bp\" width=\"320\" height=\"395\" srcset=\"https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Bp-320x395.png 320w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Bp-243x300.png 243w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Bp-40x50.png 40w, https:\/\/www.use-snip.com\/kb\/wp-content\/uploads\/2016\/06\/MsgCnts_Bp.png 501w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><strong>Summaries of Decoded Message Counts for two streams<\/strong><\/p>\n<h4>Reading the Stream Itself, the filter method<\/h4>\n<p>Another definitive way to determine the stream&#8217;s content and the rate at which it occurs is to use the console logs time stamps in combination with a tightly selected <a href=\"\/kb\/knowledge-base\/how-to-use-filter-controls-the-details\/\" target=\"_blank\" rel=\"noopener\">filter<\/a> to display the data.\u00a0 Proceed as follows:<\/p>\n<p>Use the Parsed message setting and enable the &#8220;<b>Show Message Types<\/b>&#8221; control.\u00a0 Toggle the console display format with &#8220;<b>T<\/b><b>oggle the Label Style Used<\/b>&#8221; (under the <i><b>Types <\/b><\/i>combo menu) until the time stamps are shown.\u00a0\u00a0\u00a0 Once in this mode, wait until two or more of the desired messages have appeared.<\/p>\n<p>Disable the &#8220;<b>Show Message Types<\/b>&#8221; control to prevent further entries.\u00a0 Now Filter the console to display only the <a href=\"\/kb\/knowledge-base\/filtering-by-stream-name-by-mount-point\/\">data stream<\/a> of interest.\u00a0 First show &#8220;none&#8221; &#8211; then show only the one stream you desire.\u00a0 Scroll the console back (using the <strong>Refresh<\/strong> and <strong>Refresh-All<\/strong> buttons if needed) and read the times at which the message appeared. Subtract.<\/p>\n<p>As a practical example, here are three entries for the batches of type 1019 message (GPS orbits) taken from the console log for the stream <a href=\"\/kb\/knowledge-base\/how-to-read-a-mountpt-string\/\" target=\"_blank\" rel=\"noopener\">mountPt<\/a> at: <strong>euref-ip.net : 2101 \/ ZIM20<\/strong><\/p>\n<pre>[<span style=\"color: #339966;\"><strong>Thu 16:50:04<\/strong>]<\/span>:[<span style=\"color: #0000ff;\"><strong>R04<\/strong><\/span>]:[<span style=\"color: #00ccff;\"><strong>ZIM20<\/strong><\/span>]:\u00a0\u00a0MountPt <strong>ZIM20<\/strong> [R04], 18 messages decoded, of 1,643 so far.\r\n[<span style=\"color: #339966;\"><strong>Thu 16:50:04<\/strong><\/span>]:[<span style=\"color: #0000ff;\"><strong>R04<\/strong><\/span>]:[<span style=\"color: #00ccff;\"><strong>ZIM20<\/strong><\/span>]:\u00a0\u00a0\u00a0\u00a0\u00a0RTCM type 1019\u00a0(067 bytes), the 148th message of this type found so far.\r\n\r\n[<span style=\"color: #339966;\"><strong>Thu 16:51:04<\/strong><\/span>]:[<span style=\"color: #0000ff;\"><strong>R04<\/strong><\/span>]:[<span style=\"color: #00ccff;\"><strong>ZIM20<\/strong><\/span>]:\u00a0\u00a0MountPt <strong>ZIM20<\/strong> [R04], 18 messages decoded, of 1,822 so far.\r\n[<span style=\"color: #339966;\"><strong>Thu 16:51:04<\/strong><\/span>]:[<span style=\"color: #0000ff;\"><strong>R04<\/strong><\/span>]:[<span style=\"color: #00ccff;\"><strong>ZIM20<\/strong><\/span>]:\u00a0\u00a0\u00a0\u00a0\u00a0RTCM type 1019\u00a0(067 bytes), the 165th message of this type found so far.\r\n\r\n[<span style=\"color: #339966;\"><strong>Thu 16:52:04<\/strong><\/span>]:[<span style=\"color: #0000ff;\"><strong>R04<\/strong><\/span>]:[<span style=\"color: #00ccff;\"><strong>ZIM20<\/strong><\/span>]:\u00a0\u00a0MountPt <strong>ZIM20<\/strong> [R04], 18 messages decoded, of 2,001 so far.\r\n[<span style=\"color: #339966;\"><strong>Thu 16:52:04<\/strong><\/span>]:[<span style=\"color: #0000ff;\"><strong>R04<\/strong><\/span>]:[<span style=\"color: #00ccff;\"><strong>ZIM20<\/strong><\/span>]:\u00a0\u00a0\u00a0\u00a0\u00a0RTCM type 1019\u00a0(067 bytes), the 182nd message of this type found so far.\r\n\r\n<\/pre>\n<p>As the above time stamps clearly show, the type 1019 messages are being sent once per minute on this stream.\u00a0 One can also deduce from the running message counts for this type that 17 messages are being sent in each batch, presumably because 17 SVs are in view in <a href=\"https:\/\/en.wikipedia.org\/wiki\/Zimmerwald\" target=\"_blank\" rel=\"noopener\">Zimmerwald , <\/a>Switzerland where this reference station is located when this data was acquired.<\/p>\n<p>&nbsp;<\/p>\n<p>This article has shown four basic ways to determine the contents of a stream and the rates at which each message type is being sent.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>Note:<\/strong><\/span> The <a href=\"\/kb\/knowledge-base\/using-the-universal-decoder\/\" target=\"_blank\" rel=\"noopener\">Universal Decoder<\/a> can also be used to count basic RTCM3 message types (as well as other message types which may be interspersed within it). A planned improvement to the <span style=\"color: #0000ff;\"><strong>SNIP<\/strong> <\/span>caster table logic is to use this ability to periodically re-evaluate its streams as a background task and from these measured counts update the caster table entries to ensure accuracy.\u00a0 This is currently targeted for a midsummer planned improvement.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article demonstrates detailed message analysis using SNIP&#8217;s\u00a0 RTCM3 Decoder dialog to determine what messages are present in a given connection stream. Background The primary reasons to select one stream over another are typically that it has the message content you seek and that it is suitably close to where [&hellip;]<\/p>\n","protected":false},"author":13,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"ht-kb-category":[112,341],"ht-kb-tag":[],"class_list":["post-1589","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-general","ht_kb_category-message-decoding"],"_links":{"self":[{"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/ht-kb\/1589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/comments?post=1589"}],"version-history":[{"count":38,"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/ht-kb\/1589\/revisions"}],"predecessor-version":[{"id":5131,"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/ht-kb\/1589\/revisions\/5131"}],"wp:attachment":[{"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/media?parent=1589"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/ht-kb-category?post=1589"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.use-snip.com\/kb\/wp-json\/wp\/v2\/ht-kb-tag?post=1589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}