Aktualizováno v červenci 2019

      
 

   Synchronizace systémového času ve Windows 10 podle GPS satelitů

 

Úvod

Pro WSJT komunikaci potřebujeme, aby byl systémový čas našeho PC synchronizován s nějakým časovým normálem. Používáme-li Windows 10, Microsoft to za nás nevyřeší. Obvykle instalujeme speciální program pro časovou synchronizaci z NTP serverů Internetu. Já používám již řadu let program Dimension 4. Už se mi též stalo, že jsem si domluvil EME sked a Internet zrovna nešel. Aby mě to podruhé nepřekvapilo, rozhodl jsem se pro synchronizaci času signálem z GPS družic.

Zařízení (HW)


Pro daný účel jsem koupil asi za 400 Kč tzv. GNSS Receiver. Na krabičce bylo označení TOPGNSS a bylo na ní napsáno, že zařízení podporuje protokol NMEA0183. Vlastní zařízení má průměr asi 52 mm, výšku asi 21 mm a jde z něho kabel s rozhraním USB délky cca 1.5m. Zařízení by mělo být watter resistant (IPX7).

V krabičce byl ještě CD disk se SW. Disk obsahoval zajímavé pdf dokumenty o GPS, ovladače a pdf a zajímavé dokumenty o GPS. Obsah CD jsem nakopíroval sem: http://188.120.195.174/projekty/GPS/U_center/

Software

Mnoho autorů si pro potřebu synchronizace oblíbilo GPS přijímače označované jako 1PPS. Systémy s rozhraním RS232 nebo USB/RS232 až tak oblíbené nejsou. Jenže já jsem hledal řešení levné, jednoduché a zajímalo mě, zda toto nejlevnější řešení bude fungovat i v hamovně, aniž bych přijímač vystrčil ven za okno.
Pro synchronizaci jsem použil SW od VisualGPS, LLC, zatím jen v 30 denní demo verzi:


SW



Zkouška

SW jsem bez problémů nainstaloval. Po spuštění počítače se mi objevuje vpravo dole ikona (satelit):

satelit
 


Kliknutím pravým tlačítkem lze zobrazit ovládací panel. Panel má více záložek. Na základní záložce vidíme čas, datum, pod ním stav, zda je synchronizace prováděna a regulační smyčka je uzamčena. Drobnějším písmem je pak uváděna předpokládaná přesnost synchronizace (v sekundách, milisekundách):


status
 


Na další záložce vidíme, kolik GPS satelitů přijímáme. Pokud mám přijímač na radiátoru topení pod oknem, obvykle jich přijímám více než 20 a čas je synchronizován z 12 satelitů. Zřejmě je přijímač extrémně citlivý.
Na třetí záložce vidíme časovou diferenci našich hodin od GPS normálu a průběh řízení regulační smyčky.

 satelity

loop



Poslední záložka je zajímavá. Jsou na ní vidět znaky přenášených zpráv. Program používá pro časovou synchronizaci tzv. RMC a GGA zprávy. Příklad jsem označil na obrázku červeně. Tyto zprávy začínají záhlavím, jehož prvním znakem je dolar ($), dále následuje GP nebo GN  (GPS nebo Glonass), označení zprávy RMC nebo GGA, čárka a číslo, jehož hodnota reprezentuje čas, u mých příkladů je to 060039.00, což znamená UTC čas, tj. 6 hodin, 00 minut, 39.00 sekund. Dále následují informace o zeměpisné šířce, zeměpisné délce, nějaké kontrolní součty a označení konce zpráv. Podrobnosti najdete na internetu.
Proč o tom píšu? Vidlák má obvykle málo času a pracuje s minimální námahou a omezenou informací. Pokud se však naučil např. v Basic dělat se sériovým portem a tzv. řetězci, je schopen si za večer napsat vlastní program, který mu bude zobrazovat GPS čas nebo synchronizovat hodiny. A to pro Windows nebo pro Linux. Možná to dám do lekcí o začátečnickém programování, až se k tomu v zimě dostanu. Teď na to nemám čas.


protokol



Nápověda: Zprávy GGA a RMC jsou svým formátem pro zpracování jednoduché. Pokud si píšem program, tak prostě a jednoduše vyčítáme všechno, co ze sériového portu leze a ukládáme do řetězce. Bezprostředně po příjmu se podíváme na první znaky (od dolaru po první čárku) a pokud přijmeme to, co vidíme v příkladech, tak skočíme do procedury dalšího zpracování - jednoduchou instrukcí vybereme z řetězce jen časový údaj, přepočteme si ho do potřebného formátu a porovnáme se systémovým časem. Velké diference zahodíme, malé si uložíme, abychom je použili pro případnou korekci. U obou požitých zpráv (GGA a RMC) je GPS čas hned za první čárkou, vždycky na stejném místě. Snadno se s tím dělá. Všimněte si také jiných druhů zpráv. Např. GLL, ty mají za hlavičkou a čárkou nejdřív informaci o poloze a potom o času. Taky se s tím dá dělat, ale to bych musel pracněji odpočítat, odkud kam je v řetězci údaj o čas. Neměl jsem potřebu se s tím babrat.

Na co nezapomenout?

Po zasunutí USB si Windows 10 samy našly USB - Serial. V mém případě mu přiřadily port COM3 a nastavily baudovou rychlost 9600 Bd. Když jsem totéž nastavil z menu NMEATime Panel, položka Settings - GPS - Setup Communication, program se připojil k GPS přijímači a začal synchronizovat.  Hodnoty po ustálení jste viděli na obrazovkách. Vypadá to, že moje systémové hodiny byly synchronizovány s přesnosti cca plus mínus 10 ms po ustálení. To mi bohatě vyhovuje jak pro WSJT, tak pro měřicí ústředny.

Poznámka: Windows synchronizaci jsm vypnul přes ovládací panely takto:



vypnutí

 


Závěr

Je to jednoduché řešení, s levným HW, sice s placeným, ale levným a dobrým SW, snadno se to uvede v život a funguje to. Možná se vyplatí stáhnout si demoverzi a když vám zrovna nepůjde Internet, tak ji během pár minut nainstalovat, spustit a synchronizovat si čas.

Další náměty

Již jsem naznačil. Není nic jednoduššího, než si napsat svůj program ve Visual Basic (pro Windows) nebo v Gambas (pro Linux) pro zobrazování GPS času a synchronizaci systémových hodin. Nepatrně složitější je napsat si SW pro vlastní NTP server (začátečníci kouknou sem: https://cs.wikipedia.org/wiki/Network_Time_Protocol) a ten si pustit např. na domácí síti LAN. Když nepůjde internet, budou se vám Linuxy a Windowsy s Dimension 4 synchronizovat podle tohoto serveru. Běžet to může na HW, který používáte pro úložiště či http server. Já na to mám jednodeskový SBC Asus Tinker Board S.

Poznámky:

1. Autoři Visual GPS, LLC použili v programu pro Windows ke stabilizaci hodnoty fázový závěs. Fázový závěs používají rovněž trvale běžící démoni NTP v Linuxech. Prý je to podle Wikipedie dobré pro dosažení nejlepšího výkonu.
2. Program Dimension 4 jsem ve Windows vždy používal tak, že jsem mu nastavil server Cesnet (nebo etch) a periodu synchronizace 15 minut. Vždy se mi zdálo, že to je pro WSJT-X dostatečné.
3. Když jsem dělal první pokus s GPS, tak jsem četl zprávy RMC a GGA, které přišly na port, vždy jsem z nich vypočítal diferenci (několik největších odchylek jsem zahodil) proti mým hodinám a každých 15 minut jsem udělal korekci z průměrné hodnoty, spočítal správný systémový čas a tuto hodnotu jsem jebnul do PC. Vím, že to je vidlácké, proto v rámci kurzu pro starší neprogramátory si napíšeme také jednoduchou smyčku fázového závěsu.
4. I když možná GPS přijímač nebudete nikdy potřebovat, je to výborná hračka na to, jak se prakticky naučit o trochu víc o protokolu NMEA0183 ...
5. V menu programu je několik důležitých nastavení. Např. se tam dá nastavit formát zobrazování geodetických souřadnic, zobrazování výšky v metrech, atd. Program rovněž umožňuje udělat korekci systémových hodin. Dokonce má políčko, do kterého lze napsat adresu oblíbeného ntp serveru. Napsal jsem tam adresu ntp.cesnet.cz a zjistil jsem, že diference byla asi 30 ms, když jsem to zkoušel. Nastavil jsem tedy korekci (do dalšího pole) a vyzkoušel. Program si svou pomalou regulační smyčkou dotáhl čas na tuto hodnotu, takže časové údaje ze serveru cesnet a z GPS byly stejné.

 

 
TU 73, Mira, ok1ufc