Lap-Timer

egro

Level-1
Beiträge
211
Reaktionspunkte
24
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen

Ich suche einen Funktionsblock, der wie eine handelsübliche Stoppuhr funktioniert (Start, Stop, Zwischenzeiten und Reset)?

Die SuFu habe ich bereits mehrfach genützt, aber nichts mit den Funktionen gefunden.

Ich stelle mir das in etwa so vor:
Eingang 1: START und STOP
Eingang 2: Zwischenzeit
Eingang 3: Reset

Ausgang 1: Aktuelle Rundenzeit
Ausgang 2: Letzte Zwischenzeit (wird immer beim betätigen von Eingang 2 überschrieben.

Kennt jemand einen solchen FB?
 
Hi

In der Zeit wo du den Thread erstellt hast und auf antworten wartest, hättest du den FB schon fast selbst erstellt. :-D

Gruß,

Ottmar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Lieber Ottmar

Vielleicht solltest du einmal in Betracht ziehen, dass hier nicht alles Vollprofis sind... Ich zum Beispiel...

Ich lerne gerne täglich dazu und für mich ist ein Forum, wie dieses hier Gold wert. Ich habe hier schon viele Tipps und Anregungen gefunden.

Wenn ich den gewünschten FB "einfach" selber erstellen könnte, hätte ich es eventuell gemacht, aber ich habe in anderen Threads gelesen (ja, ich habe die SuFu wirklich bemüht!), dass es via Zykluszeit nicht so toll ist und auch mit TON/TOF Nachteile bringt.

Darum habe ich mir gedacht, dass vielleicht Jemand hier einen funktionierenden FB kennt.

Falls es den FB wirklich noch nicht gibt, bin ich gerne bereit, selber Zeit zu investieren.
Manchmal studiere ich auch einfach viel zu weit und sehe den Wald vor lauter Bäumen nicht...

Kurz zusammen gefasst:
Ein kleiner Denkanstoss wäre konstruktiver, als dein Beitrag


PS: Das ist jetzt auch überhaupt nicht böse gemeint. Ich weiss selber, dass es hier vereinzelt Leute gibt, die sich hier Ihre Hausaufgaben machen lassen wollen...
 
Wie genau soll/muss er denn sein ? Ich habe zwar jetzt auch nix fertiges parat. Vom Ansatz her würde ich die Systemzeit beim Start und beim Stop/Zwischenzeit speichern und die Zwischenzeit von der letzen Stoppzeit abziehen. Aber kann dir nicht sagen wie genau du damit auskommst.
 
Ich möchte so 5-10 Minuten messen.
Am liebsten mit 100stel-Sekunden(z.B: 5:22,24 Min:Sek), zur Not würden aber auch 10tel-Sekunden reichen.

Wird die RTC mit ms ausgegeben? Ich habe im Moment keinen Controller zum testen und kann nur simulieren.
 
Bei Vielen Steuerungen ist es möglich die Systemticks (meist in ms oder 100ns), die seit dem Start des Programms vergangen sind, direkt abzurufen. Der Rest ist dann einfach nur Differenzen bilden. Wichtig ist dabei, den Überlauf mit zu beachten. Was den Zugriff auf die RTC angeht, muss man Aufpassen. Die Bausteine die einem die Zeit vom System holen, können unter Umständen mehrere Zyklen dafür benötigen.
Natürlich muss die Zykluszeit der Steuerung ausreichend kurz eingestellt sein. Wenn du 100stel messen möchtest wäre eine Zykluszeit von 1ms schon angebracht. (Das ist aber bei den heutigen Steuerungen idR kein Problem).
 
Das mit der Systemzeit hat einen Schönheitsfehler.

Ich möchte in der Webvisu, die laufende Uhr darstellen.

Wie kriege ich die Systemzeit raus?
Wenn ich mit dem FB "Sysgettime" (oder so ähnlich) arbeite, gibt es mir immer wenn ich das Programm starte schon die Zeit raus. Auch EN/ENO bringt auch kein Unterschied.

Ist das nur ein Problem der Simulation?
Werde versuchen es diese Woche noch mit einem richtigen Controller zu testen.
 
Moin, ich bin zwar nicht auf 10tel Sekunden unterwegs mache aber etwas ähnliches.

Mit NT_GetTime bekommst du die Systemuhrdaten.
Code:
   wYear            : WORD;
   wMonth           : WORD;
   wDayOfWeek       : WORD;
   wDay             : WORD;
   wHour            : WORD;
   wMinute          : WORD;
   wSecond          : WORD;
   wMilliseconds    : WORD;

WIe du dem Code entnehmen kannst auch mit ms angabe. Diese ist wie ich meine 3 Stellig.


Idee hierzu:

Würde einfach beim Startpunkt die Zeit wegspeichern und dann bei jedem Zyklusdurchlauf die Aktuelle Zeit mit der gespeicherten Zeit Vergleichen.

für weiteren Zeiten halt ein neuer Speicher und ein weiterer Vergleich.



TimeSave_1 := Startzeitpunkt
Time:= AktuelleZEit

Grobgesehen

Time -TimeSave_1 = Gestoppte Zeit

vll hilft dir das etwas weiter

MfG
Hendrik
 
Das mit der Systemzeit liegt wirklich an der Simulation. Mit einem realen Controller funktionierte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es war doch schwerer als ich dachte...
Die Pflicht funktioniert, aber an der Kür scheitert es noch.

Ich habe 5 Speicherplatz für die Rundenzeiten, die immer mit der aktuellsten gefüllt werden und die älteste fällt raus.

Jetzt dachte ich, es wäre toll, wenn noch die Differenz angezeigt wird.

Gibt es eine Möglichkeit eine TIME-Variable ins Minus zu bringen?

Ich habe es schon mit umwandeln in DINT probiert, aber dann zeigt es z.B: 15324 ms an. Wie kann ich jetzt 15.324 Sek. daraus machen?
 
Ist gar nicht so dumm...

Aber ich möchte ja die Differenz zur Vorrunde anzeigen. Und wenn die Zweite schneller als die Erste war, gibt es eine Minus-Zeit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein bisschen tricksen. If Neuzeit > Alterzeit then Neuzeit-Altezeit. Else Altezeit-Neuzeit.
Und dann entweder als String wandeln und bei Bedarf ein Minus verpacken oder reicht dir ein Farbwechsel. ZB bei Minus wird die Zeit in Rot angezeigt ?
 
Den Farbwechsel habe ich schon drin. Mit einem "LE-Baustein".

Ich kenn mich mit Strings nicht so aus...
Wie kann ich einen String so formatieren, wie ich möchte?
Zum Beispiel eine Zeit-Angabe von t#136m3s345ms in einen String der dann 02:36:03.345 (h:min:sek.ms)anzeigt?
Ich habe es schon mit "Delete", "Replace", usw. probiert. Da aber die Zahlen manchmal nur einstellig sind, kommt alles durcheinander...

PS: und wo zum Teufel schaltet man die automatische Korrektur, hier im Forum ab?
 
Zuletzt bearbeitet:
Da wirst du wohl deine Zeit in einen String wandeln müssen und gezielt Stück für Stück zerlegen. Bspw. Nach ms suchen. Ms löschen. Dann nach dem s suchen und deine Zimmern dazwischen in den Teilstring MS speichern. Dann suchst du nach "m" und machst das selbe. Und dann nochmal mit deinem letzten String. Deine ms, s und m (also Position) solltest du mit Find finden. Jetzt könntest du noch die 136 zu Int wandeln und dir mit ein paar Berechnungen deine min in Stunden umwandeln. Ist leider etwas schwer hier auf dem Smartphone zu tippen. Hoffe man versteht was ich schrieben wollte. Sonst einfach fragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe es... Ich gehe mal davon aus, dass du auch deine liebe Mühe mit der Autokorrektur hast...
Weil was meine Zimmer mit der String-Programmierung zu tun haben, weiss ich auch nicht:D

Die Kurzfassung deiner Erklärung klingt für mich so:
Ist möglich, scheisse kompliziert, also lass es!!!
 
Ja habe ich [emoji16] kompliziert ist das nicht. Nur ein wenig Arbeit zu Fuß. Aber eine nette Übung. Habe ich vor einigen Monden auch mal gemacht um Kühlhaustemperaturen schön darzustellen und in einen CSV zu packen.
 
Zurück
Oben