/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Find ud af om en givet tid er mellem to an~
Fra : Allan Madsen


Dato : 05-02-08 00:38

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



 
 
John V. (05-02-2008)
Kommentar
Fra : John V.


Dato : 05-02-08 01:27



"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.

--
Malermester
John Vedsegaard
www.taform.dk



Allan Madsen (05-02-2008)
Kommentar
Fra : Allan Madsen


Dato : 05-02-08 01:48

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.



John V. (05-02-2008)
Kommentar
Fra : John V.


Dato : 05-02-08 03:24


"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



John V. (07-02-2008)
Kommentar
Fra : John V.


Dato : 07-02-08 16:26

Du kan jo også anvende TurboPowers SysTools, de har funktioner til det
hele, inclusive diverse grafiske kontroller eksempler m.m..
Det kan downloades fra sourceforce - og er blevet til freeware.

--
Malermester
John Vedsegaard
www.taform.dk

--
Malermester
John Vedsegaard
www.taform.dk
"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.
>
>



Stig Johansen (05-02-2008)
Kommentar
Fra : Stig Johansen


Dato : 05-02-08 04:10

Allan Madsen wrote:

> 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

En datetime er i princippet et kommatal, der består af dage. Tiden inden for
dagen er det, der kommer efter 'kommaet'.
Når man skal finde sekunder inden for en dag fjerner med heltalsdelen og
ganger med 86400 (24*60*60).
Så har du tiderne i sekunder.
Når du så skal sammenligne tiderne skal du gøre noget a la

IsNat : Boolean
IF NatSlut >= NatStart then
IsNat := (Tid > NatStart) and (Tid < NatSlut)
else
IsNat := (Tid > NatStart) or (Tid < NatSlut)



--
Med venlig hilsen
Stig Johansen

Uffe Kousgaard (05-02-2008)
Kommentar
Fra : Uffe Kousgaard


Dato : 05-02-08 07:55

"Stig Johansen" <stig_johansen_it_at_=(@)hotmail.com> wrote in message
news:47a7d3f3$0$90276$14726298@news.sunsite.dk...
>
> IsNat : Boolean
> IF NatSlut >= NatStart then
> IsNat := (Tid > NatStart) and (Tid < NatSlut)
> else
> IsNat := (Tid > NatStart) or (Tid < NatSlut)

Med InRange fra math unit:
IsNat:= InRange(Tid,NatStart,NatSlut);



Stig Johansen (05-02-2008)
Kommentar
Fra : Stig Johansen


Dato : 05-02-08 12:29

Uffe Kousgaard wrote:

> "Stig Johansen" <stig_johansen_it_at_=(@)hotmail.com> wrote in message
> news:47a7d3f3$0$90276$14726298@news.sunsite.dk...
>>
>> IsNat : Boolean
>> IF NatSlut >= NatStart then
>> IsNat := (Tid > NatStart) and (Tid < NatSlut)
>> else
>> IsNat := (Tid > NatStart) or (Tid < NatSlut)
>
> Med InRange fra math unit:
> IsNat:= InRange(Tid,NatStart,NatSlut);

Got the ol' man ;)

--
Med venlig hilsen
Stig Johansen

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste