09. december 1999 - 08:54Der er
7 kommentarer og 1 løsning
BP7: Tid synchronisering mod server i DOS
Er der nogen der ved, hvorledes man kan synchronisere uret i en DOS maskine, fra en Borland Pascal 7 application, på en maskine der aldrig slukkes? Jeg har et sæt dataopsamlings maskiner, hvor tiden driver. Fx. har en maskine jeg manuelt indstillede den 22/11 i dag tabt 3.5 timer. Dette er ikke holdbart! Maskinerne står i kontakt med nogle NT servere via et TCP/IP netværk. Det må på en eller anden måde være muligt, at opdatere urene mod et atomur eller anden reference tidsstandard.
Dem kender jeg. men som jeg skrev, så skal jeg synchronisere fra en Pascal program - Maskinerne kører konstant et dataopsamlingsprogram og det er ikke praktisk muligt at "stille uret" manuelt - der er ikke engang tastatur på maskinerne...
Hvis dataopsamlingsmaskinen kun kører DOS kender jeg ikke svaret, men hvis den kører windows kan Yatz32 automatisk stille uret når programmet (yatz32) starter op.
Brug EXEC funktionen til at starte en DOS commandline og sæt parameter til
"Date < dd.mm.yyyy"
og/eller
"Time < hh:mm"
i Exec kan du specificere at den skal termineres efter eksekvering og ellers kan du bare skabe en bat fil med samme linier og hvor sidste linie er EXIT.
Det vil ændre klokken permanent, både i DOS og i BIOS
Sig til hvis du har brug for yderligere hjælp så skal jeg sende dig en stump (turbo pascal 5) kode der kan gøre det.
Jeg glemte lige den detaile med serveren. Det letteste, når det ikke er windows/internet o.s.v. er at skrive en temp fil på serverens harddisk, tage hhv. dato og tid fra filen, slette den igen og så bruge denne dato og tid som beskrevet i mit svar.
Jeg har overvejet en løsning i de baner. I øjeblikket er det sådan at der gemmes data i en fil ca. hvert tiende sekund. Det burde således være muligt at bruge en kombination af GetFTime, UnPackTime og SetTime. Denne løsning har dog to umiddelbare problemer: - Fil serverens tid stilles om ved Sommer-/Ventertid. Det vil to gange om året give mig et problem i min dataopsamling. - SetTime sætter ikke Bios (RTC) clocken - kun MS-Dos timeren, som er den der driver. Det sidste er måske ikke umiddelbart det største problem, men jeg ville gerne vide, om der ikke er en metode til at læse den ægte tid fra en ekstern kilde, fx. en NTP server, og så bruge denne tid til at sætte maskinens system tid. Det er iøvrigt ikke sådan at der ikke er internet på de pågældende maskiner - de kører bare dos. Findes der et DOS ntp object?
Næh, det tror jeg ikke, men til gengæld findes der flere DOS interuptkald der kan give dig tiden / datoen fra en given maskine i netværket.
Hvis du har en bog der viser de forskellige dos-interupts (f.eks. Peter Norton's) så skal du kigge efter dos int. 20, med funktionsnumre 5Exx. Det er dem der handler om net. Dog SKAL dos versionen være 3.29 eller større men det er den vel også ?
Hvis du ikke selv kan se noget så har jeg bogen derhjemme, men er ikke tilmeldt eksperten hjemmefra (2 brugere du ved !!) så jeg kan ikke hjælpe dig før i næste uge, med mindre jeg kan sende til dig direkte på mail.
Jeg har for at være færdig med projektet, benyttet metode med en fil næsten sådan som SJensen bekrev. Jeg har givet ham points'ne, selvom jeg egentligt selv havde tænkt i de baner (hvilket han selvsagt ikke kunne vide) og selvom svaret ikke går på det jeg helst ville ha', nemlig muligheden for at hente tiden via nettet.
PS: Jo jeg har en interrupt bog, dog ikke Nortons med Advanced MS-DOS fra Microsoft Press. Er INT 20 i øvrigt ikke Program Exit? (Det er længe siden jeg har knoklet med Dos, men er det ikke Int 21 du mener?) Jeg mindes dog ikke lige i hovedet, at der er kald der giver adgang til andre maskiners clock, sådan som du beskriver.
NiP
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.