Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 15.11.2009, 20:12 Titel: Laufzeit ermitteln |
|
|
Hallo,
ich suche eine einfache Lösung für folgendes Problem:
Ich möchte die Anschaltzeit eines Ereignisses (z.B einer Pumpe) ermitteln.
Ich stelle mir das so vor, dass ich die aktuelle Zeit bei Beginn des Ereignisses (Pumpe an) in einer Variablen ablege und dann die Zeit am Ende des Ereignisses (Pumpe aus) in eine weiteren Variable und die Differenz berechne und als nn Stunden nn Minuten nn Sekunden ausgebe bzw wegschreibe.
FB 0.20.0 unter Win XP pro
MfG
Dirk |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 15.11.2009, 20:26 Titel: |
|
|
Du hast dir deine Antwort doch schon selbst gegeben, woran scheitert es denn?
Falls du nicht weißt, woher du die Zeit bekommst, da gibt es den Befehl Time |
|
Nach oben |
|
 |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 15.11.2009, 20:56 Titel: |
|
|
MOD hat Folgendes geschrieben: | Du hast dir deine Antwort doch schon selbst gegeben, woran scheitert es denn?
Falls du nicht weißt, woher du die Zeit bekommst, da gibt es den Befehl Time |
Danke für den Hinweis auf Time. Da gäbe es noch NOW und noch so ein paar tolle Sachen. Die Lösungsvorschläge sollten sich ehr auf die Berechnung des Unterschieds zwischen der Start- und der Endzeit beziehen und wie man daraus das oben beschriebene Ergebnis erlangt.
MfG
Dirk |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.11.2009, 21:06 Titel: |
|
|
Ende - Start = Differenz.
Wo ist das Problem? |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 15.11.2009, 21:07 Titel: |
|
|
Now benötigt vbcompat.bi, Time nicht.
Time liefert einen String mit der Zeit zurück. Du musst die Zahl mit Mid rausnehmen und mit Val in eine Zahl umwandeln. Diese speicherst du in deine Variablen. Das gleiche am Ende nochmal und die Zahlen ganz normal voneinander abziehen. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 15.11.2009, 23:48 Titel: Warum DATE$ und TIMER konzeptionell schlecht sind |
|
|
DJS2009 hat Folgendes geschrieben: | Danke für den Hinweis auf Time. Da gäbe es noch NOW und noch so ein paar tolle Sachen. |
Die Funktion Now() kenne ich von VBScript her natürlich bestens. DATE$ und TIME$/TIMER haben ihre Wurzeln dagegen aus dem GWBASIC-Zeitalter, schuld daran sind INT 21h/AH=2Ah und INT 21h/AH=2Ch. Dass dieses Relikt aus den IBM-PC/XT-Anfängen konzeptionell unschön ist, sollte inzwischen jeder wissen, der in Webanwendungen Sitzungen und damit verbunden Sitzungsablaufzeiten programmiert hat: Zum einen macht TIMER über Mitternacht Rollover-Probleme. Selbst wenn man DATE$ hinzuzieht und das Datum serialisiert, um einen UNIX/Linux-ähnlichen Timestamp-Wert zu generieren, besteht immer noch das Problem, dass beispielsweise DATE$ noch um 23.59 Uhr, 59,99998 Sek. abgearbeitet wird, das anschliessende TIMER aber um 0.00 Uhr 0.00001 Sek. (man beachte den sehr kurzen Zeitabstand, wie er beim Abarbeiten eines Prozeduraufrufs völlig normal ist!): Es würde nun ein 24 h danebenliegender Timestamp-Wert resultieren, weil DATE$ und TIMER nicht atomar als einen Aufruf durchgeführt werden können. Derartige nur sehr selten auftretende Fehler geben dann die berühmten Situationen, wo der Fehler beim Testen eines Systems nie auftritt, dafür aber irgendwann einmal im produktiven Betrieb...
=> Von dem her zerschlägt Now() sämtliche hier diskutierten Probleme vollständig, weil es zum einen eine atomar ausgeführte vollständige Zeitabfrage ermöglicht und daneben erst noch eine saubere und problemlose Zeitarithmetik, bei der man sich nicht um Mitternacht-Rollover-Probleme kümmern muss, weil der Zeitdatentyp einen kontinuierlich Wert darstellt. => Aus gutem Grund beitzt eigentlich jede neuere Programmiersprache und Klassenbibliothek immer ein Pendant zur Now()-Funktion. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 16.11.2009, 09:29 Titel: |
|
|
@ dreael
Vielen dank für die umfanreichen Ausführungen - ich werde die Berechnung mit NOW() durchführen, da mir das weniger aufwendig erscheint als mit Time$ und Date$ oder Timer.
Gruß
Dirk |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
|
Nach oben |
|
 |
DJS2009
Anmeldungsdatum: 07.11.2009 Beiträge: 22 Wohnort: Hagen / Westf.
|
Verfasst am: 16.11.2009, 14:03 Titel: |
|
|
@ TPM
Danke für den Hinweis, werde ich mal ausprobieren. Ich habe inzwischen folgendes mit Now() probiert:
Code: |
#include "vbcompat.bi"
Dim Laufzeit As Double
Dim Startzeit As Double
Dim Stoppzeit As Double
DIM Zeit as String
Startzeit=NOW()
SLEEP 20000
Stoppzeit=NOW()
Laufzeit = Stoppzeit-Startzeit
Zeit = Format(Stoppzeit-Startzeit, "hh:mm:ss")
? ZEIT
sleep
|
MfG
Dirk |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 17.11.2009, 18:22 Titel: |
|
|
Wie wärs mit Timer statt Now? |
|
Nach oben |
|
 |
|