TIA Stoppuhr S7 TIA Portal

Afromann

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich arbeite im TIA Portal V13 mit einer 300er SPS und möchte mir an einem HMI die Laufzeit meines Prozesses anzeigen lassen.

Also eine Stoppuhr (in Sekunden), die anfängt zu laufen, wenn ich auf Start drücke und aufhört zu laufen, wenn ich auf Stopp drücke.

Gibt es dafür eine fertige Funktion oder hat jemand ne Idee und könnte mit einen Code posten?
 
Hallo,

In der Reiter "Anweisungen" unter der Reiter "Erweiterte Anweisungen" findest du Zeit Funktionen die du benutzen kannst.

z.b. Mit T_Diff zwei Zeiten vergleichen. (Start und Stoppzeit)
Diese ausgangswert (Format TIME) wieder teilen durch 1000.
Das Ergebnis ist die Zeit in Sekunden.

Ohne zu teilen hat man das Ergebnis in Millisekunden

Bram
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

vielen Dank für die Antwort.

Mein Problem ist aber, dass die Stoppuhr bei einem Startsignal anfangen soll zu laufen und den Wert auch direkt anzeigen soll. Wenn ich Anfangs- und Endzeit vergleiche, dann steht der Wert doch erst fest, wenn ich auf Stopp drücke oder?
 
Man könnte auch einfach einen TON-Timer nehmen. Am PT-Eingang irgandwas hohes mit z.B T#24h.
Wenn du am IN ein high Signal anlegst solange der Prozess läuft, dann kannst du direkt den ET-Ausgang (Elapsed Time) nehmen.

ET ist im Format TIME, den kannst du 1:1 und die Visu übernehmen und skalierst ihn dort 1/1000 um und zeigst ihn als Sekunden an.

Mit der Stopp-Taste speicherst du den Wert vom ET-Ausgang dann einfach ein Netzwerk vorher weg.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Man könnte auch einfach einen TON-Timer nehmen. Am PT-Eingang irgandwas hohes mit z.B T#24h.
Wenn du am IN ein high Signal anlegst solange der Prozess läuft, dann kannst du direkt den ET-Ausgang (Elapsed Time) nehmen.

ET ist im Format TIME, den kannst du 1:1 und die Visu übernehmen und skalierst ihn dort 1/1000 um und zeigst ihn als Sekunden an.

Mit der Stopp-Taste speicherst du den Wert vom ET-Ausgang dann einfach ein Netzwerk vorher weg.

Das würde auch gehen, finde ich jedoch eine unsaubere Lösung.

Mit der Starttime und Stoptime ist es viel sauberer.

Gruss
 
Man könnte auch einfach einen TON-Timer nehmen. Am PT-Eingang irgandwas hohes mit z.B T#24h.
Wenn du am IN ein high Signal anlegst solange der Prozess läuft, dann kannst du direkt den ET-Ausgang (Elapsed Time) nehmen.

ET ist im Format TIME, den kannst du 1:1 und die Visu übernehmen und skalierst ihn dort 1/1000 um und zeigst ihn als Sekunden an.

Mit der Stopp-Taste speicherst du den Wert vom ET-Ausgang dann einfach ein Netzwerk vorher weg.
Das würde auch gehen, finde ich jedoch eine unsaubere Lösung.

Mit der Starttime und Stoptime ist es viel sauberer.
Ich hoffe, Du meinst mit Starttime und Stoptime nicht Zeitpunkte, welche durch Abfrage der Uhr ermittelt werden.
Ein solches Meßverfahren wäre nämlich tatsächlich unsauber.
Die Uhr kann während der Meßzeit verstellt worden sein, z.B. durch Uhrzeitsynchronisation.

Wenn man die Dauer von Vorgängen messen will, dann muß man ein Uhrzeit-unabhängiges Verfahren wählen, z.B.
- Startzeitpunkt und Stopzeitpunkt mit SFC64 TIME_TCK ermitteln und Differenz bilden
- oder OB1_PREV_CYCLE aufsummieren
- oder einen Timer laufen lassen, so wie von RONIN beschrieben

Harald
 
Wie genau ist das mit OB1_PREV_CYCLE ? Ich hab mal gehört das die ms nicht gerundet werden sondern abgeschnitten und zum nächsten Zyklus addiert werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja, das mit dem Timer ist schon OK.
Hat auch einige Vorteile da einfach, Systemzeit-unabhängig und es kommt der "fertigen" Funktion wie vom TE gewünscht am nächsten.
Wenn man allerdings, so wie von mir vorgeschlagen, beim Stopp die Zeit ein Netzwerk vorher wegsichert, dann verliert man einen SPS-Zyklus.
Wenn so genau sein soll, könnte man das aber auch richtigstellen.

Da PN/DP schon den SFC64 TIME_TCK angesprochen hat.
Ich hatte mal ein Beispiel dazu gepostet, ist zwar zum messen der Zeit zwischen 2 Impulsen, aber vom Prinzip her passts.
 
Wie genau ist das mit OB1_PREV_CYCLE ? Ich hab mal gehört das die ms nicht gerundet werden sondern abgeschnitten und zum nächsten Zyklus addiert werden.
Jepp, genau deshalb kann man die Zeiten des OB1_PREV_CYCLE addieren, ohne daß sich Rundungsfehler aufsummieren.
Das fortlaufende Addieren von OB1_PREV_CYCLE kommt auf das selbe Ergebnis wie die Differenzberechnung per SFC64 (von alten CPU abgesehen, wo der SFC64 nur 10ms Auflösung hat). Die Variante mit dem TON-Timer funktioniert ebenfalls so genau, allerdings genau 1 OB1-Zykluszeit zu kurz, was man aber leicht korrigieren kann.

Harald
 
Hallo zusammen,

ich greife dieses Thema nach langer Zeit nochmal auf, da die Problemstellung mit meinem Problem ziemlich gleich lautet.

Ich habe zwei Lichttaster (LT), mit denen ich die Geschwindigkeit beim Ausfahren eines Zylinders messen möchte.
D.h. wenn der Zylinder LT1 erreicht soll eine Zeitmessung gestartet werden. Sobald der Zylinder LT2 erreicht soll die Zeitmessung gestoppt werden.
Die Zeitdifferenz würde ich mit T_Diff berechnen und die restlichen Berechnungen bis ich die Geschwindigkeit habe durchführen.

Nun zu meinem Problem:
Ich will die Systemzeit beim Zeitpunkt Start (LT1) mit Hilfe von Rd_Sys_T auslesen und die Systemzeit beim Zeitpunkt Stop (LT2) auslesen.
Das Problem ist, dass die Systemzeit während dem Ausfahren "mit" läuft und ich bei meiner Berechnung mit T_Diff natürlich dann 0ms erhalte.

Wie muss ich hierbei vor gehen? Oder habt ihr noch bessere Ideen die Aufgabenstellung umzusetzen?

Ich verwende TIA Portal und eine S7-1200 mit CPU 1214C.

Viele Grüße
Chrom:)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du müsstest Dir den Startzeitpunkt LT1 merken (speichern).

Du hast Dich hier an einen älteren Thread angehängt - hast Du die bisherigen Beiträge auch ein bisschen gelesen? Von der Benutzung der Uhrzeit wird nämlich abgeraten.
Anstatt RD_SYS_T Schau Dir besser mal in der TIA-Hilfe die Anweisung RUNTIME an.

Harald
 
Ich probiere gerade noch einen anderen Lösungsansatz aus, bei dem ich einen TON laufen lasse und die Elapsed Time verwenden möchte, wie von RONIN beschrieben.

Das Signal von LT1 lege ich auf IN des TON-Timers. Mit LT2 soll der aktuelle Wert von ET gespeichert werden, damit ich mit diesem dann weiter rechnen kann.
Wie ich das anstelle ist mir noch nicht ganz klar?
 
Hallo Harald,

danke für deine Hilfe!
Habe es nun mit dem TON-Timer hin bekommen. Habe mit den aktual Wert von ET mit MOVE gespeichert und weiter verrechnet.
 
Zurück
Oben