"Allan Madsen" <psp@crump.dk> skrev i en meddelelse
news:mn.286c7d82081e04a3.87071@crump.dk...
> John V. skrev den 05-02-2008:
>>
>> "Allan Madsen" <psp@crump.dk> skrev i en meddelelse
>> news:mn.28257d82aa8dda81.87071@crump.dk...
>>> Hejsa
>>>
>>> Jeg er ved at lave en ny styring til vores stoker fyr.
>>>
>>> Og i den forbindelse, er jeg ved at lave nat sænkning og har på min GUI
>>> to felter, et felt hvor jeg skriver tiden om hvornår nat sænkningen skal
>>> starte og et felt til hvornår den skal slutte.
>>>
>>> Det jeg så har problemer med, er at computeren skal finde udaf hvornår
>>> den aktuelle tid (alså maskines tid) ligger inden for disse to tider.
>>>
>>> Ligger tiden inden for de to indtastet tider ja så skal den bare blive
>>> ved med at holde en port høj, og ligger den uden for ja så skal den
>>> samme port bare gå lav.
>>>
>>> NatStart og NatSlut er begge TDatetime variabler så det skulle der være
>>> styr på.
>>>
>>> Jeg havde forstillet mig noget i stil med
>>> Tid = Now();
>>> Hvis NatStart >= Tid og NatSlut <= Tid then gør sådan
>>>
>>> Det skal selvf. også virke hvis NatStart = 23:00 og NatSlut = 05:00
>>>
>>> Håber der er en venlig sjæl der kan hjælpe mig med dette problem.
>>>
>>> Jeg bruger Delphi 6.
>>>
>>> MVH
>>> Allan Madsen
>>>
>> Kan du ikke bare konvertere det hele til minutter?
>> og tælle de minutter der skal gå?
>> Så gør du det at start f.eks. er klokken nul 1 januar 2000
>> Derefter regner du ud hvor mange minutter der skal være gået, før du
>> starter natsænkningen.
>> Slutteligt hvornår den skal ophøre, er minutterne ikke i intervallet går
>> porten lav.
>>
>> Der findes også metoder til at konvertere TDatetime til et tal, og
>> tilbage igen. Men det er længe siden jeg har brugt det så det må du nok
>> finde på nettet et sted, sikkert fra noget gammel sourcekode.
>>
>> Det burde være nemt nok.
>
> Jeg må indrømme at jeg ikke lige sådan kan se en løsning, da NatStart kan
> være en dato og NatSlut kan være dagen efter, men det kan jo også være
> være samme dato f.eks natstart 2200 og natslut 2340 bare som et eks.
>
Hvis der f.eks. er gået 20.000 minutter når start skal aktiveres of 20.100
når det skal deaktiveres, skulle det være nemt at beregne.
Sådan lavede vi timere da vi rodede med det. Så vidt jeg husker bruger
TDateTime netop et sådant tal til beregningen.
Nedenstående er taget direkte fra hjælpefilen i Borland Developer 2006.
Jeg mener også at kunne huske at Jedi har sådanne routiner på en mere
avanceret måde.
Du kan også prøve at lave din TDateTime om til et tal og se hvad det
indeholder, så forstår du nok bedre systemets måde at beregne dato/tid på.
Systemets BIOS beregner tiden ud fra én bestemt dato, jeg kan bare ikke
huske hvilken det er.
CompareTime Routine
Indicates the relationship between the time portions of two TDateTime
values.
Unit DateUtils
Syntax
[Delphi] function CompareTime(const A: TDateTime; const B: TDateTime):
TValueRelationship;
Description Call CompareTime to compare the two TDateTime values specified
by A and B. CompareTime returns LessThanValue if A occurs earlier in the day
than B (even if A occurs on a later day than B). EqualsValue if A occurs at
the same time of day as B, ignoring of the date portion of the two values.
GreaterThanValue if A occurs later in the day than B (even if A occurs on an
earlier day than B).
Lowlevel:
Int 1Ah, 00h Read System-Timer Time Counter
Reports the current time of day, and whether 24 hours has passed
since 1) the last power-on, 2) the last system reset, or 3) the
last system-timer time read or set.
Entry AH = 00h
Return CX = High-order part of clock count
DX = Low-order part of clock count
AL = 0 if 24 hours has not passed; else 1
------------------------------------------------------------------
The following formulas convert the clock count to the time of day:
Hour = Clock / 65543 (1007h)
Remainder = Clock MOD 65543
Minutes = Remainder / 1092 (444h)
Remainder = Remainder MOD 1092
Second = Remainder / 18.21
Remainder = Remainder MOD 18.21
Hundredths = CINT(Remainder * 100)
The "system timer" (as distinguished from the real-time clock) is
the timer that's set when the system is started. This time is
temporary, lasting only as long as the system is turned on.
The clock count may also be read as a 4-byte integer at memory
location 0040h:006Ch. This 4-byte value is equal to the 4-byte
integer in CX:DX after Service 00h has been called.
After the call, the flag (at 0040h:0070h) stating whether 24 hours
has passed or not, is cleared.
When TIME is typed at the command line, DOS gets the time by means
of this service.
Counts occur at the rate of 18.2 per second.
--
Malermester
John Vedsegaard
www.taform.dk