Sinkronizacija vremena (BAD CMOS)

Nov 26, 2012 at 4:04 PM

Obzirom da se vise nije za igrati s datumom i vremenom izdavanja racuna, imate li kakvih prijedloga glede sinkronizacije datuma i vremena?

Dosad su kase bile svakakve, DOS, WINDOWS, ove, one, jesu ili nisu bile spojene na NET, ali sad se situacija potpuno mijenja, svi moraju biti na NET-u, tako da je moguce iskoristiti net za sinkronizaciju vremena.

Ja sam probao sa shortcutom u startup-u na:
w32tm /resync
i onda sam mu izvadio CMOS bateriju. Prilikom dizanja XP javi da se vrijeme "drasticno" promijenilo (na 1999-tu) i ceka pritisak na Enter, ali kad zavrsi proces bootanja i dobije internet vezu, vrijeme se sinkronizira bez greske. Doduse, prvog puta nije islo, dok u Date & Time properties nisam izabrao drugi time server sa ponudjene liste (valjda im taj ne radi).
Kome ovo bude odgovaralo, samo da zna da po defaultu Windowsi sinkroniziraju vrijeme samo ako je pomak unutar +- 15h od pravog vremena. Da bi se to promijenilo treba u Registriju promijeniti MaxNegPhaseCorrection i MaxPosPhaseCorrection na 0xffffffff i tako omoguciti sinkronizaciju "beskonacnog" pomaka.

Ima li netko neka negativna saznanja glede ovoga?

Nov 27, 2012 at 10:03 AM
Edited Nov 27, 2012 at 10:22 AM

Ispravak :

U slučaju da je netko pročitao prošli post, ispada da sam bio u krivu, testirao sam samo male pomake vremena. Kada sam promijenio 2 sata unazad, sinkronizirao je samo minute.

Viggor je u pravu, samo bih dodao da treba podesiti i ovaj zadnji key

3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient

Promjeniti value keya SpecialPollInterval na 0x00000078 (120) - Ovo je najbitnije za interval sinkroniziranja,

 

 

 

Dakle - cijeli postupak :

1. regedit

2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

Promjeniti value ovih keyeva :

MaxNegPhaseCorrection - 0xfffffff

MaxPosPhaseCorrection - 0xffffffff

MaxPollInterval - 0x0000000a (10) (Ovo je preporučeno od strane Microsofta)

3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient

Promjeniti value keya SpecialPollInterval na 0x00000078 (120) - Ovo je najbitnije za interval sinkroniziranja,

Nov 27, 2012 at 11:27 AM

Pogledaj sljedece na http://www.pretentiousname.com/timesync/index.html:

How not to do it 2: The SpecialPollInterval registry value

There is a SpecialPollInterval setting under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpClient (note: it has moved at least once between Windows versions) which is the time (in minutes) between time syncs... Sort-of...

While modifying that registry value may update the "next sync time" displayed in the control panel, I have found it does not actually affect how often the clock is synched. Feel free to play with it if you want but that's my verdict.

As far as I can tell, the registry value changes how often the time service wants to sync but only applies when time service is actually running. When the time service runs is controlled by the Windows Task Scheduler, not the registry value, and (at least on Windows 7) when the service runs it exits immediately after performing any required work. After that the time service will not do anything -- or run at all -- until the Task Scheduler starts it again.

I suspect if you modify the SpecialPollInterval value and change the Synchronize Time task frequency then it might work, but that is difficult to verify. On the other hand, my method (below) is a similar amount of effort and is trivial to verify: You can mess up your system time and then manually run the task to verify that it gets corrected right away.

Dakle ispada da mijenjanjem SpecialPollTimeInterval-a ne dogadja se resinkronizacija vec pokusaj AKO time service radi, a taj servis kontrolira Task Scheduler (koji nakon sto ga starta, odmah ga i prekine), sto sam i probao - zgodnije bi mi bilo da Windows sam to mijenja nego da ja stavljam shortcut u Startup, ali XP ne reagira na SpecialPollInterval od 15 sec.

Rucno, brale, rucno - meni dovoljno svaki dan po dizanju, ako mu je preko noci bilo 'ladno, a u CR2032 nema struje. Nisam jos naisao na PC koji nakon sto je upaljen, ne broji vrijeme (iako je svasta moguce).

Nov 27, 2012 at 11:43 AM

Hm, moram priznati da unatoč ovome što je Leo napisao (http://www.pretentiousname.com/timesync/index.html), meni stvar stvarno funkcionira. Just in case još sam jednom promijenio vrijeme 7 sati unazad i u roku od 2min mi je promijenio vrijeme na točno.

Doduše, testirano je samo na WINXPPROSP3, možda se isto ne odnosi na post XP Windowse (Vista, win7, win8...)

 

Pozdrav

Nov 27, 2012 at 2:40 PM
Edited Nov 27, 2012 at 2:42 PM

Ja isto imam XP PRO SP3. Evo sad sam ga, nakon izmjene u 120sec (kao i ti), resetirao i odmah po dizanju je sinkronizirao vrijeme.

Nakon toga sam ga rucno natjerao u proslost (2008) i ni nakon 15 minuta se nije ni mrdnuo, iako pise da bi se trebalo sljedece osvjezavanje desiti tocno 2 minute nakon onog prvog, koje je u medjuvremenu davno proslo. Ali nije! Tako da ta metoda ocito negdje radi, negdje ne, ko zna zbog kojeg jos dodatnog faktora. Zato, ZIVIO RUCNI RAD!

Mene vise zanima ona zadnja vrijednost SpecialPollTimeRemaining gdje se izgleda mogu navoditi razni time-serveri pa ako ne prodje prvi, onda radi drugi, itd. To bi trebalo prouciti kako dela.

Nov 27, 2012 at 2:42 PM

Pošteno!  :)

Mislim da bi bilo najbolje da kombiniramo obje opcije kad je već Microsoft to tako divno rješio.

 

 

Pozdrav!

Jul 13 at 8:14 PM
viggor wrote:
Pogledaj sljedece na http://www.pretentiousname.com/timesync/index.html:
Ovo ne radi na Win8.1. Namjera mi je sinkronizirati vrijeme prilikom paljnja računala.
Win8.1 sam uspio natjerati na sinhronizaciju jedino tako da sam iz Task Schedulera (Triggers: "At log on") pokrenuo BAT fajl slijedećeg sadržaja:

REM poželjna je pauza od nekoliko sekundi, da Windowsi stignu učitati sve module prije izvršavanja ovog koda (ne mora biti PING).
PING 0.0.0.0
PING 0.0.0.0

NET START W32TIME
%windir%\system32\sc.exe start w32time task_started
%windir%\system32\w32tm.exe /resync

P.S.
Promjenio sam registy kako je gore navedeno:
MaxNegPhaseCorrection - 0xfffffff
MaxPosPhaseCorrection - 0xffffffff
Jul 14 at 11:46 AM
Edited Jul 14 at 11:48 AM
**damir_ wrote:**
viggor wrote:
Pogledaj sljedece na http://www.pretentiousname.com/timesync/index.html:
Ovo ne radi na Win8.1. Namjera mi je sinkronizirati vrijeme prilikom paljnja računala.
Možda ne radi zbog prava - vjerojatno to treba to pokrenuti kao admin. Ja to ručno stavljam u registry pod RUN (na XPu)
A za pauzu pod Win7 i više ti je najlakše ovo:
timeout /t <sekunde> /nobreak > NUL
a za XP ovo:
ping 0.0.0.1 -n 1 -w <milisekunde> > NUL
Jul 14 at 8:57 PM
Unaprijed se ispričavam ako uletavam sa glupošću, pošto nisam baš sve pozorno pročitao.
U stvari, zanima me postoji li neki razlog zbog kojeg bi se patili kako gore navodite, a zbog kojeg ne bi sinhronizaciju obavili pomoću primjerene VB skripte?

Od prvog dana fiskalizacije koristim svoju skriptu (koju sam naknadno malo doradio) i radi savršeno (na XP-u, na ostalom, moram priznati, nisam ni probao)
Skriptu pozivam iz DOS-aplikacije, prilikom pokretanja, tako da korisnika mogu i obavijestiti o situaciji. Ako nema interneta ili ako skripta iz nekog drugog razloga ne uspije dohvatiti ispravni datum-vrijeme s jednog od mogućih servera, aplikacija to može saznati i o tome odgovarajućom porukom obavijestiti korisnika.
Datum-vrijeme uglavnom pokupim sa CARNET-a (prvi je u nizu od 3, za koje sam smatrao da će uglavnom uvijek biti dostupni).

U skriptu sam ugradio korekciju GMT-a prema vremenskoj zoni i kalkulacije za ljetno/zimsko vrijeme (podatke o tome pročita iz Registry-a) a radi ispravno i u onom "ponavljajućem" satu pri prelasku na zimsko vrijeme. Ovo navodim jer sam se prilično napatio sa brojnim polu-rješenjima sa neta, koja ili ne rade uvijek ili ne rade dobro, što je možda i vas odbilo od razmišljanja o takvom rješenju.

Skripta je (nadam se) dobro napunjena komentarima (koristite neproporcijalni font), a možete ju pokupiti OVDJE
Po njoj možete kopati koliko želite i prilagoditi je svojim potrebama, kod možete staviti ovdje kao post, itd. Jednom riječju: Open source.
Ako nekog baš jako svrbi, može me i pitati nešto o kalkulacijama datuma/vremena, ali o tome kako to WMI servis obavi, ne pitajte, taj sam dio našao negdje na net-u i besramno iskoristio.
Jul 15 at 12:54 PM
gmacarol wrote:
Unaprijed se ispričavam ako uletavam sa glupošću, pošto nisam baš sve pozorno pročitao.
U stvari, zanima me postoji li neki razlog ...
Glavni razlog zbog kojeg se ja "mučim" (ne znam za druge) je zato što ne znam napisati ovakvu skriptu u VB-u. Sporedni razlog je da želim iskoristiti ono što u Windowsima postoji. Ako tvoja skripta funkcionira, onda je to odlično rješenje, koje si mogao dati na uvid još prije par godina, kad smo raspravljali o ovome (ovo nije kritika, samo konstatacija!). Proučit ću skriptu, ne bih li nešto naučio iz nje, jer mi se čini da je dobro dokumentirana, a i odnosi se na konkretan problem (baš onako "for dummies") - stoga hvala na skripti !

p.s. a to što si nešto "besramno prepisao", ne bi te trebalo mučiti. Nije li suština programiranja što bolje ukomponirati već napravljena rješenja, a pisati samo ono što je specifično za tvoj program, tj. "ne izmišljati ponovo toplu vodu"?
Sep 16 at 8:02 PM
Edited Sep 16 at 8:24 PM
CARNETovo vrijeme nije dobro rješenje za one koje koriste Raverusove .exe. ili .com programe. Raverus koristi vrijeme iz Windowsa za vrijeme slanja računa (možemo još provjeriti kod nrasinca). Kako moje vrijeme izdavanja računa MORA biti manje ili jednako od Raverusovog (Windows) vremena slanja računa, jedina ispravna referenca je Windows vrijeme. Drugi je par cipela točno vrijeme Windowsa, o tome piše u gornjim postovima.

Napravio sam VB skriptu koja upiše Windows vrijeme u datoteku nekakav.txt, a zatim iz svog programa pročitam sadržaj tog txt-a.
Poziv skripte sa parametrom izgleda ovako: cscript.exe c:\vrijeme.vbs "c:\nekakav.txt" , a sama skripta izgleda ovako:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(WScript.Arguments(0))
objFile.WriteLine(TIME)
objFile.Close

Ukoliko postoji datoteka na disku sa istim imenom, bit će pregažena, tako da se ne treba prethodno brisati.
Sep 16 at 10:01 PM
Sorry, damir_ ne kužim te.
Skripta služi baš "drugom paru cipela" - služi da, kako ga ti zoveš, "Windows vrijeme" lokalne mašine uskladi sa "svjetskim vremenom".
Iz gornjih postova se vidi kako su se ljudi dovijali i patili nebi li natjerali mehanizam ugrađen u Windowse da obavi sinhronizaciju onda kad oni to žele.
Skripta obavlja baš to: podešava sistemski sat računala ako iz nekog razloga nije točno, i to napravi onda kada ti to želiš (prilikom dizanja OS-a ili prilikom ulaska u aplikaciju ili prilikom ulaska u sam program za izdavanje računa ili sl).
Raverus.com komponente ne koristim pa neću o tome ni govoriti.
Raverus.FiskalizacijaDEV.EXE.exe (pazi, ne Fiska, nego EXE) podrazumijeva da sam u svojoj aplikaciji konstruiraš XML datoteku. Time su podatak o vremenu u zaglavlju i podatak o vremenu izdavanja računa direktno pod tvojom kontrolom. I zato (kako sam već negdje rekao) dovoljno je iz aplikacije, u trenutku slaganja XML-a, pročitati "Windows vrijeme" nekakvom Time-funkcijom. Pročitano vrijeme pamtiš u nekoj varijabli i to koristiš gdje god ti treba:
-u zaglavlju XML-a
-u tijelu XML-a
-prilikom ispisa
-prilikom pospremanja računa u bazu itd.
Time izbjegavaš grešku 'Datum i vrijeme izdavanja' računa je veće od 'Datum i vrijeme slanja' (v104)

Druga je stvar ako "Windows vrijeme" felša za vrijeme rada aplikacije. Taj sam problem imao na jednoj XP mašini, gdje je OS bio predinstaliran prilikom kupnje. Razlog ne znam, ali je problem nestao kad sam re-instalirao Windowse.

Treća je stvar ako iz svoje aplikacije ne možeš pročitati "Windows vrijeme". U tom slučaju tvoja skripta ima smisla.
Sep 17 at 2:08 PM
gmacarol wrote:
pazi, ne Fiska, nego EXE
Koristim Fisku od bbanka i radi se, kako si i sam rekao, o grešci 104 'Datum i vrijeme izdavanja' računa je veće od 'Datum i vrijeme slanja'. Post je namijenjen diskusiji http://fiskalizacija.codeplex.com/discussions/655842 (odstupanje u vremenu DOS kase i Windows vremena). Lapsus mentis...
Sep 22 at 9:30 PM
Još jedna glupost s vremenom!
Korisnik je prilikom izdavanja računa primijetio da mu vrijeme nije dobro, pa je pogledao prethodni račun. Nemalo se iznenadio kad je ispalo da je prethodni račun izdan (i fiskaliziran) 40-tak minuta POSLIJE ovog.
Otišao sam pogledati izbliza, jer nisam mogao vjerovati da se kasa vozi brzinom većom od brzine svjetlosti, tj. da vrijeme ide u rikverc.
Ispostavilo se da to traje već nekoliko dana (nitko nije primijetio). Sistemsko vrijeme se uredno sinhronizira pomoću skripte ( https://fiskalizacija.codeplex.com/discussions/404612#PostContent_1478974 ) prilikom ulaska u aplikaciju i onda odjednom ( na moje oči ) povremeno klizne unazad, za random iznos, pa nastavi od tuda normalno, do nekog novog proklizavanja.

Krivac je otkriven: baterija. Računalo: HP DC7100.

Imati ću materijala za očitovanje, ako se ikad netko napikne na sljednost računa.
Izgleda da trebam ugraditi i kontrolu vremena naspram prethodnog računa. Bože, što još ?
Sep 24 at 11:10 AM
gmacarol wrote:
Imati ću materijala za očitovanje, ako se ikad netko napikne na sljednost računa.
Izgleda da trebam ugraditi i kontrolu vremena naspram prethodnog računa. Bože, što još ?
Vezano za slijednost računa, jedino vrijeme koje je mjerodavno je vrijeme servera Apis/PU, naše vrijeme bi trebalo biti sporedna stvar. Ako netko ima informaciju kako to Apis gleda bilo bi lijepo da je podijeli sa nama..
U svakom slučaju nam ide očitovanje zašto je baterija loša ili je računalo malo mad..
Sep 25 at 2:27 PM
gmacarol wrote:
Krivac je otkriven: baterija. Računalo: HP DC7100.

Imati ću materijala za očitovanje, ako se ikad netko napikne na sljednost računa.
Izgleda da trebam ugraditi i kontrolu vremena naspram prethodnog računa. Bože, što još ?
To se izgleda dešava samo kod bradniranih (HP) PC-a, jer su njihovi "pametni" inženjeri zaboravili isključiti trošenje baterije kad je PC već upaljen. Mislim da sam imao sličnih problema (uvijek HP, DELL i slično), ali ih nisam detektirao na ovaj način.

A kontrola vremena naspram zadnjeg računa, pa to je "must have" odavno! Ja sam s time čak malo pretjerao i doveo sistem u nestabilno stanje (rijetko ali se desi) zbog prečestog zapisivanja datum/vremena u neke CFG fajlove (koji se onda znaju zbrljati, a vjerojatno je problem DOS/Windows kombinacija, jer pod čistim DOS-om to je radilo perfektno).
Nov 24 at 12:52 PM
Edited Nov 24 at 12:55 PM
Revizija VB-skripte za podešavanje lokalnog sistemskog sata: Više ljudi, više iskustava.

Zbog specifičnih regionalnih postavki prethodna bi verzija u nekim okolnostima (nakon automatic update ili instalacije nekih aplikacija) prestala prepoznavati GMTtime iz http response headera kao valjani format datum/sata.
OVDJE (isti link kao nekoliko postova gore) možete "pokupiti" novu verziju koja (izgleda) radi uvijek - isprobano na XP, Win7, Win10.
Osim tekstualnog statusa, ova verzija vraća i Errorlevel (korisno za DOS aplikacije ili BAT-ove).
Napomena: Skriptu treba pokretati kao administrator. Za slučajeve kada krajnji korisnik nije administrator, u komentarima same skripte je primjer kako ju možete pokretati.
Povratne informacije su dobrodošle.