Annotation of embedaddon/ntp/html/parsedata.html, revision 1.1.1.1

1.1       misho       1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                      2: 
                      3: <html>
                      4: 
                      5:        <head>
                      6:                <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
                      7:                <meta name="generator" content="HTML Tidy, see www.w3.org">
                      8:                <title>NTP PARSE clock data formats</title>
                      9:                <link href="scripts/style.css" type="text/css" rel="stylesheet">
                     10:        </head>
                     11: 
                     12:        <body>
                     13:                <h3>NTP PARSE clock data formats</h3>
                     14:                <p>The parse driver currently supports several clocks with different query mechanisms. In order for you to find a sample that might be similar to a clock you might want to integrate into parse I'll sum up the major features of the clocks (this information is distributed in the parse/clk_*.c and ntpd/refclock_parse.c files).</p>
                     15:                <hr>
                     16:                <h4>Meinberg clocks</h4>
                     17:                <pre>
                     18: Meinberg: start=&lt;STX&gt;, end=&lt;ETX&gt;, sync on start
                     19:       pattern=&quot;\2D:  .  .  ;T: ;U:  .  .  ;    \3&quot;
                     20:       pattern=&quot;\2  .  .  ;  ;   :  :  ;        \3&quot;
                     21:       pattern=&quot;\2  .  .  ;  ;   :  :  ;    :  ;        ;   .         .       &quot;
                     22: </pre>
                     23:                <p>Meinberg is a German manufacturer of time code receivers. Those clocks have a pretty common output format in the stock version. In order to support NTP Meinberg was so kind to produce some special versions of the firmware for the use with NTP. So, if you are going to use a Meinberg clock please ask whether there is a special Uni Erlangen version. You can reach <a href="http://www.meinberg.de/">Meinberg</a> via the Web. Information can also be ordered via eMail from <a href="mailto:%20info@meinberg.de">info@meinberg.de</a></p>
                     24:                <p>General characteristics:<br>
                     25:                        Meinberg clocks primarily output pulse per second and a describing ASCII string. This string can be produced in two modes: either upon the reception of a question mark or every second. NTP uses the latter mechanism. DCF77 AM clocks have a limited accuracy of a few milliseconds. The DCF77 PZF5xx variants provide higher accuracy and have a pretty good relationship between RS232 time code and the PPS signal. Except for early versions of the old GPS166 receiver type, Meinberg GPS receivers have a very good timing relationship between the datagram and the pulse. The beginning of the start bit of the first character has basically the same accuracy as the PPS signal, plus a jitter of up to 1 bit time depending on the selected baud rate, i.e. 52 &mu;s @ 19200. PPS support should always be used, if possible, in order to yield the highest possible accuracy.</p>
                     26:                <p>The preferred tty setting for Meinberg DCF77 receivers is 9600/7E2:</p>
                     27:                <pre>
                     28:                CFLAG           (B9600|CS7|PARENB|CREAD|HUPCL)
                     29:                IFLAG           (IGNBRK|IGNPAR|ISTRIP)
                     30:                OFLAG           0
                     31:                LFLAG           0
                     32:         </pre>
                     33:                <p>The tty setting for Meinberg GPS16x/17x receivers is 19200/8N1:</p>
                     34:                <pre>
                     35:                CFLAG           (B19200|CS8|PARENB|CREAD|HUPCL)
                     36:                IFLAG           (IGNBRK|IGNPAR|ISTRIP)
                     37:                OFLAG           0
                     38:                LFLAG           0
                     39:         </pre>
                     40:                <p>All clocks should be run at datagram once per second.<br><br></p>
                     41:                <p>Format of the Meinberg standard time string:</p>
                     42: <pre>
                     43:         <b><i>&lt;STX&gt;</i>D:<i>dd.mm.yy</i>;T:<i>w</i>;U:<i>hh.mm.ss</i>;<i>uvxy</i><i>&lt;ETX&gt;</i></b>
                     44:     pos:  0  000000001111111111222222222233  3
                     45:           1  234567890123456789012345678901  2
                     46: 
                     47:     <i>&lt;STX&gt;</i>         = start-of-text, ASCII code 0x02
                     48:     <i>dd.mm.yy</i>      = day of month, month, year of the century, separated by dots
                     49:     <i>w</i>             = day of week (1..7, Monday = 1)
                     50:     <i>hh:mm:ss</i>      = hour, minute, second, separated by dots
                     51:     <i>u</i>             = '#' for GPS receivers: time is <b>not</b> synchronized
                     52:                            '#' for older PZF5xx receivers: no correlation, not synchronized
                     53:                            '#' for other devices: never sync'ed since powerup
                     54:                            ' ' if nothing of the above applies
                     55:     <i>v</i>             = '*' for GPS receivers: position has <b>not</b> been verified
                     56:                            '*' for other devices: freewheeling based on internal quartz
                     57:                            ' ' if nothing of the above applies
                     58:     <i>x</i>             = 'U' if UTC time is transmitted
                     59:                            'S' if daylight saving time is active
                     60:                            ' ' if nothing of the above applies
                     61:     <i>y</i>             = '!' during the hour preceding start or end of daylight saving time
                     62:                            'A' during the hour preceding a leap second
                     63:                            ' ' if nothing of the above applies
                     64:     <i>&lt;ETX&gt;</i>         = end-of-text, ASCII code 0x03
                     65: </pre>
                     66:                <p>Format of the Uni Erlangen time string for PZF5xx receivers:</p>
                     67: <pre>
                     68:         <b><i>&lt;STX&gt;</i><i>dd.mm.yy</i>; <i>w</i>; <i>hh:mm:ss</i>; <i>tuvxyza</i><i>&lt;ETX&gt;</i></b>
                     69:     pos:  0  000000001111111111222222222233  3
                     70:           1  234567890123456789012345678901  2
                     71: 
                     72:     <i>&lt;STX&gt;</i>         = start-of-text, ASCII code 0x02
                     73:     <i>dd.mm.yy</i>      = day of month, month, year of the century, separated by dots
                     74:     <i>w</i>             = day of week (1..7, Monday = 1)
                     75:     <i>hh:mm:ss</i>      = hour, minute, second, separated by colons
                     76: 
                     77:     <i>t</i>             = 'U' if UTC time is transmitted, else ' '
                     78:     <i>u</i>             = '#' for older PZF5xx receivers: no correlation, not synchronized
                     79:                            '#' for PZF511 and newer: never sync'ed since powerup
                     80:                            ' ' if nothing of the above applies
                     81:     <i>v</i>             = '*' if freewheeling based on internal quartz, else ' '
                     82:     <i>x</i>             = 'S' if daylight saving time is active, else ' '
                     83:     <i>y</i>             = '!' during the hour preceding start or end of daylight saving time, else ' '
                     84:     <i>z</i>             = 'A' during the hour preceding a leap second, else ' '
                     85:     <i>a</i>             = 'R' alternate antenna (reminiscent of PZF5xx), usually ' ' for GPS receivers
                     86:     <i>&lt;ETX&gt;</i>         = end-of-text, ASCII code 0x03
                     87: </pre>
                     88:                <p>Format of the Uni Erlangen time string for GPS16x/GPS17x receivers:</p>
                     89: <pre>
                     90:         <b><i>&lt;STX&gt;</i><i>dd.mm.yy</i>; <i>w</i>; <i>hh:mm:ss</i>; <i>+uu:uu</i>; <i>uvxyzab</i>; <i>ll.lllln</i> <i>lll.lllle</i> <i>hhhh</i>m<i>&lt;ETX&gt;</i></b>
                     91:     pos:  0  0000000011111111112222222222333333333344444444445555555555666666  6
                     92:           1  2345678901234567890123456789012345678901234567890123456789012345  6
                     93: 
                     94:     <i>&lt;STX&gt;</i>         = start-of-text, ASCII code 0x02
                     95:     <i>dd.mm.yy</i>      = day of month, month, year of the century, separated by dots
                     96:     <i>w</i>             = day of week (1..7, Monday = 1)
                     97:     <i>hh:mm:ss</i>      = hour, minute, second, separated by colons
                     98:     <i>+uu:uu</i>        = offset to UTC in hours and minutes, preceded by + or -
                     99:     <i>u</i>             = '#' if time is <b>not</b> synchronized, else ' '
                    100:     <i>v</i>             = '*' if position has <b>not</b> been verified, else ' '
                    101:     <i>x</i>             = 'S' if daylight saving time is active, else ' '
                    102:     <i>y</i>             = '!' during the hour preceding start or end of daylight saving time, else ' '
                    103:     <i>z</i>             = 'A' during the hour preceding a leap second, else ' '
                    104:     <i>a</i>             = 'R' alternate antenna (reminiscent of PZF5xx), usually ' ' for GPS receivers
                    105:     <i>b</i>             = 'L' during a leap second, i.e. if the seconds field is 60, else ' '
                    106:     <i>ll.lllln</i>      = position latitude in degrees, 'n' can actually be 'N' or 'S', i.e. North or South
                    107:     <i>lll.lllle</i>     = position longitude in degrees, 'e' can actually be 'E' or 'W', i.e. East or West
                    108:     <i>hhhh</i>          = position altitude in meters, always followed by 'm'
                    109:     <i>&lt;ETX&gt;</i>         = end-of-text, ASCII code 0x03
                    110: </pre>
                    111:                <p>Examples for Uni Erlangen strings from GPS receivers:</p>
                    112: <pre>
                    113:         \x02 09.07.93; 5; 08:48:26; +00:00;        ; 49.5736N  11.0280E  373m \x03
                    114:         \x02 08.11.06; 3; 14:39:39; +00:00;        ; 51.9828N   9.2258E  176m \x03
                    115: </pre>
                    116:                <p>The Uni Erlangen formats should be used preferably. Newer Meinberg GPS receivers can be configured to transmit that format, for older devices there may be a special firmware version available.</p>
                    117:                <p>For the Meinberg parse look into clk_meinberg.c<br><br></p>
                    118:                <hr>
                    119:                <h4>Raw DCF77 Data via serial line</h4>
                    120:                <p>RAWDCF: end=TIMEOUT&gt;1.5s, sync each char (any char),generate psuedo time codes, fixed format</p>
                    121:                <p>direct DCF77 code input</p>
                    122:                <p>In Europe it is relatively easy/cheap the receive the german time code transmitter DCF77. The simplest version to process its signal is to feed the 100/200ms pulse of the demodulated AM signal via a level converter to an RS232 port at 50Baud. parse/clk_rawdcf.c holds all necessary decoding logic for the time code which is transmitted each minute for one minute. A bit of the time code is sent once a second.</p>
                    123:                <pre>
                    124:        The preferred tty setting is:
                    125:                CFLAG           (B50|CS8|CREAD|CLOCAL)
                    126:                IFLAG           0
                    127:                OFLAG           0
                    128:                LFLAG           0
                    129: </pre>
                    130:                <h4>DCF77 raw time code</h4>
                    131:                <p>From &quot;Zur Zeit&quot;, Physikalisch-Technische Bundesanstalt (PTB), Braunschweig und Berlin, M&auml;rz 1989<br>
                    132:                </p>
                    133:                <p>Timecode transmission:</p>
                    134:                <pre>
                    135:        AM:
                    136: 
                    137:        time marks are send every second except for the second before the
                    138:        next minute mark
                    139:        time marks consist of a reduction of transmitter power to 25%
                    140:        of the nominal level
                    141:        the falling edge is the time indication (on time)
                    142:        time marks of a 100ms duration constitute a logical 0
                    143:        time marks of a 200ms duration constitute a logical 1
                    144: </pre>
                    145:                <p>see the spec. (basically a (non-)inverted psuedo random phase shift) encoding:</p>
                    146:                <pre>
                    147:        FM:
                    148: 
                    149:        Second  Contents
                    150:        0  - 10 AM: free, FM: 0
                    151:        11 - 14 free
                    152:        15              R     - alternate antenna
                    153:        16              A1    - expect zone change (1 hour before)
                    154:        17 - 18 Z1,Z2 - time zone
                    155:                 0  0 illegal
                    156:                 0  1 MEZ  (MET)
                    157:                 1  0 MESZ (MED, MET DST)
                    158:                 1  1 illegal
                    159:        19      A2    - expect leap insertion/deletion (1 hour before)
                    160:        20      S     - start of time code (1)
                    161:        21 - 24 M1    - BCD (lsb first) Minutes
                    162:        25 - 27 M10   - BCD (lsb first) 10 Minutes
                    163:        28      P1    - Minute Parity (even)
                    164:        29 - 32 H1    - BCD (lsb first) Hours
                    165:        33 - 34 H10   - BCD (lsb first) 10 Hours
                    166:        35      P2    - Hour Parity (even)
                    167:        36 - 39 D1    - BCD (lsb first) Days
                    168:        40 - 41 D10   - BCD (lsb first) 10 Days
                    169:        42 - 44 DW    - BCD (lsb first) day of week (1: Monday -&gt; 7: Sunday)
                    170:        45 - 49 MO1   - BCD (lsb first) Month
                    171:        50      MO10  - 10 Months
                    172:        51 - 53 Y1    - BCD (lsb first) Years
                    173:        54 - 57 Y10   - BCD (lsb first) 10 Years
                    174:        58      P3    - Date Parity (even)
                    175:        59            - usually missing (minute indication), except for leap insertion
                    176: </pre>
                    177:                <hr>
                    178:                <h4>Schmid clock</h4>
                    179:                <p>Schmid clock: needs poll, binary input, end='\xFC', sync start</p>
                    180:                <p>The Schmid clock is a DCF77 receiver that sends a binary time code at the reception of a flag byte. The contents if the flag byte determined the time code format. The binary time code is delimited by the byte 0xFC.</p>
                    181:                <pre>
                    182:        TTY setup is:
                    183:                CFLAG           (B1200|CS8|CREAD|CLOCAL)
                    184:                IFLAG           0
                    185:                OFLAG           0
                    186:                LFLAG           0
                    187: 
                    188: </pre>
                    189:                <p>The command to Schmid's DCF77 clock is a single byte; each bit allows the user to select some part of the time string, as follows (the output for the lsb is sent first).</p>
                    190:                <pre>
                    191:        Bit 0:  time in MEZ, 4 bytes *binary, not BCD*; hh.mm.ss.tenths
                    192:        Bit 1:  date 3 bytes *binary, not BCD: dd.mm.yy
                    193:        Bit 2:  week day, 1 byte (unused here)
                    194:        Bit 3:  time zone, 1 byte, 0=MET, 1=MEST. (unused here)
                    195:        Bit 4:  clock status, 1 byte,   0=time invalid,
                    196:                                        1=time from crystal backup,
                    197:                                        3=time from DCF77
                    198:        Bit 5:  transmitter status, 1 byte,
                    199:                                        bit 0: backup antenna
                    200:                                        bit 1: time zone change within 1h
                    201:                                        bit 3,2: TZ 01=MEST, 10=MET
                    202:                                        bit 4: leap second will be
                    203:                                                added within one hour
                    204:                                        bits 5-7: Zero
                    205:        Bit 6:  time in backup mode, units of 5 minutes (unused here)
                    206: </pre>
                    207:                <hr>
                    208:                <h4>Trimble SV6 ASCII time code (TAIP)</h4>
                    209:                <p>Trimble SV6: needs poll, ascii timecode, start='&gt;', end='&lt;', query='&gt;QTM&lt;', eol='&lt;'</p>
                    210:                <p>Trimble SV6 is a GPS receiver with PPS output. It needs to be polled. It also need a special tty mode setup (EOL='&lt;').</p>
                    211:                <pre>
                    212:        TTY setup is:
                    213:                CFLAG            (B4800|CS8|CREAD)
                    214:                IFLAG            (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON)
                    215:                OFLAG            (OPOST|ONLCR)
                    216:                LFLAG            (ICANON|ECHOK)
                    217: </pre>
                    218:                <p>Special flags are:</p>
                    219:                <pre>           PARSE_F_PPSPPS      - use CIOGETEV for PPS time stamping
                    220:                PARSE_F_PPSONSECOND - the time code is not related to
                    221:                                      the PPS pulse (so use the time code
                    222:                                      only for the second epoch)
                    223: 
                    224:        Timecode
                    225:        0000000000111111111122222222223333333   / char
                    226:        0123456789012345678901234567890123456   \ posn
                    227:        &gt;RTMhhmmssdddDDMMYYYYoodnnvrrrrr;*xx&lt;     Actual
                    228:        ----33445566600112222BB7__-_____--99-   Parse
                    229:        &gt;RTM                      1     ;*  &lt;     Check
                    230: </pre>
                    231:                <hr>
                    232:                <h4>ELV DCF7000</h4>
                    233:                <p>ELV DCF7000: end='\r', pattern=&quot; - - - - - - - \r&quot;</p>
                    234:                <p>The ELV DCF7000 is a cheap DCF77 receiver sending each second a time code (though not very precise!) delimited by '`r'</p>
                    235:                <pre>
                    236:        Timecode
                    237:          YY-MM-DD-HH-MM-SS-FF\r
                    238: 
                    239:                FF&amp;0x1      - DST
                    240:                FF&amp;0x2      - DST switch warning
                    241:                FF&amp;0x4  - unsynchronised
                    242: </pre>
                    243:                <hr>
                    244:                <h4>HOPF 6021 und Kompatible</h4>
                    245:                <p>HOPF Funkuhr 6021 mit serieller Schnittstelle Created by F.Schnekenbuehl &lt;frank@comsys.dofn.de&gt; from clk_rcc8000.c Nortel DASA Network Systems GmbH, Department: ND250 A Joint venture of Daimler-Benz Aerospace and Nortel.</p>
                    246:                <pre>
                    247:  hopf Funkuhr 6021 
                    248:       used with 9600,8N1,
                    249:       UTC via serial line
                    250:       &quot;Sekundenvorlauf&quot; ON
                    251:       ETX zum Sekundenvorlauf ON
                    252:       dataformat 6021
                    253:       output time and date
                    254:       transmit with control characters
                    255:       transmit evry second
                    256:  </pre>
                    257:                <p>Type 6021 Serial Output format</p>
                    258:                <pre>
                    259:       000000000011111111 / char
                    260:       012345678901234567 \ position
                    261:       sABHHMMSSDDMMYYnre  Actual
                    262:        C4110046231195     Parse
                    263:       s              enr  Check
                    264: 
                    265:   s = STX (0x02), e = ETX (0x03)
                    266:   n = NL  (0x0A), r = CR  (0x0D)
                    267: 
                    268:   A B - Status and weekday
                    269:  
                    270:   A - Status
                    271: 
                    272:       8 4 2 1
                    273:       x x x 0  - no announcement
                    274:       x x x 1  - Summertime - wintertime - summertime announcement
                    275:       x x 0 x  - Wintertime
                    276:       x x 1 x  - Summertime
                    277:       0 0 x x  - Time/Date invalid
                    278:       0 1 x x  - Internal clock used 
                    279:       1 0 x x  - Radio clock
                    280:       1 1 x x  - Radio clock highprecision
                    281: 
                    282:   B - 8 4 2 1
                    283:       0 x x x  - MESZ/MEZ
                    284:       1 x x x  - UTC
                    285:       x 0 0 1  - Monday
                    286:       x 0 1 0  - Tuesday
                    287:       x 0 1 1  - Wednesday
                    288:       x 1 0 0  - Thursday
                    289:       x 1 0 1  - Friday
                    290:       x 1 1 0  - Saturday
                    291:       x 1 1 1  - Sunday
                    292: </pre>
                    293:                <hr>
                    294:                <h4>Diem Computime Clock</h4>
                    295:                <p>The Computime receiver sends a datagram in the following format every minute</p>
                    296:                <pre>   
                    297:    Timestamp   T:YY:MM:MD:WD:HH:MM:SSCRLF 
                    298:    Pos          0123456789012345678901 2 3
                    299:                0000000000111111111122 2 2
                    300:    Parse        T:  :  :  :  :  :  :  \r\n
                    301:    
                    302:    T   Startcharacter &quot;T&quot; specifies start of the timestamp 
                    303:    YY  Year MM Month 1-12 
                    304:    MD  Day of the month 
                    305:    WD  Day of week 
                    306:    HH  Hour 
                    307:    MM   Minute 
                    308:    SS   Second
                    309:    CR   Carriage return 
                    310:    LF   Linefeed
                    311: </pre>
                    312:                <hr>
                    313:                <h4>WHARTON 400A Series Clock with a 404.2 Serial interface</h4>
                    314:                <p>The WHARTON 400A Series clock is able to send date/time serial messages in 7 output formats. We use format 1 here because it is the shortest. We set up the clock to send a datagram every second. For use with this driver, the WHARTON 400A Series clock must be set-up as follows :</p>
                    315:                <pre>
                    316:                                        Programmable    Selected
                    317:                                        Option No       Option
                    318:        BST or CET display              3               9 or 11
                    319:        No external controller          7               0
                    320:        Serial Output Format 1          9               1
                    321:        Baud rate 9600 bps              10              96
                    322:        Bit length 8 bits               11              8
                    323:        Parity even                     12              E
                    324: </pre>
                    325:                <p>WHARTON 400A Series output format 1 is as follows :</p>
                    326:                <pre>
                    327:    Timestamp   STXssmmhhDDMMYYSETX
                    328:    Pos         0  12345678901234
                    329:                0  00000000011111
                    330:   
                    331:    STX start transmission (ASCII 0x02)
                    332:    ETX end transmission (ASCII 0x03)
                    333:    ss  Second expressed in reversed decimal (units then tens)
                    334:    mm  Minute expressed in reversed decimal
                    335:    hh  Hour expressed in reversed decimal
                    336:    DD  Day of month expressed in reversed decimal
                    337:    MM  Month expressed in reversed decimal (January is 1)
                    338:    YY  Year (without century) expressed in reversed decimal
                    339:    S   Status byte : 0x30 +
                    340:                bit 0   0 = MSF source          1 = DCF source
                    341:                bit 1   0 = Winter time         1 = Summer time
                    342:                bit 2   0 = not synchronised    1 = synchronised
                    343:                bit 3   0 = no early warning    1 = early warning
                    344: </pre>
                    345:                <hr>
                    346:                <script type="text/javascript" language="javascript" src="scripts/footer.txt"></script>
                    347:        </body>
                    348: 
                    349: </html>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>