TIA Zylinder auf zu Zeit messen

sportivo

Level-2
Beiträge
33
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen!

Bin grad ein wenig am Verzweifeln!
Ich solle die Zeit stoppen, die ein Zylinder braucht um von geöffnet nach geschlossen zu kommen und dann wieder von geschlossen nach geöffnet. Habe so angefangen: Zeit läuft weg wenn das Ventil angesteuert wird und Zeit stoppt wenn der Sensor auf 1 geht. Habe TONR genommen. Soweit geht das alles nur dass mir dann beim Rücksetzen die Zeit auf Null gesetzt wird. Wie kann man das machen ohne das man ein Null stehen hat? Das ganze soll auf die HMI. Die Zeit wird mir schon mal auf der HMI angezeigt. Im Anhang mein Programm.

Vielleicht ist wer so gut und hilft mir dabei.

Besten Dank schon mal im Voraus!
Thomas
 
Ich würde da einen TON nehmen und dessen Zeitwert viel viel höher legen als dein Zylinder jemals für seine Bewegung brauchen wird.
Den Timer startest du mit dem Start der Bewegung (Ventil ansteuern) und dessen abgelaufene Zeit liest du ein wenn der Ini erreicht ist.

Gruß
Larry
 
Ich würde da einen TON nehmen und dessen Zeitwert viel viel höher legen als dein Zylinder jemals für seine Bewegung brauchen wird.
Den Timer startest du mit dem Start der Bewegung (Ventil ansteuern) und dessen abgelaufene Zeit liest du ein wenn der Ini erreicht ist.

Gruß
Larry
Du meinst, den Timer stoppen am R? Aber da wird ja die Zeit auf Null gesetzt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie soll ich das machen? Wie kann man beim ET eine Flanke einbauen? Steh da jetzt komplett auf dem Schlauch.
Beim ET geht das natürlich nicht. Du musst die boolsche Bedingung am P_Trig nutzen um einen MOVE Befehl auszuführen. Mit dem MOVE Befehl kannst du den ET in eine Speichervariable kopieren. Das soll natürlich passieren, bevor der Timer auf 0 gesetzt wird
 
Was für eine SPS hast Du?
Falls Du eine S7-300/400/1500 hast, könntest Du zur Laufzeitmessung die Anweisung TIME_TCK verwenden.

Falls Du eine S7-1200/1500 hast, könntest Du theoretisch die neuere Anweisung RUNTIME zur Laufzeitmessung verwenden, allerdings ist die von Siemens sooo schlecht implementiert und dokumentiert :rolleyes:, daß man das Messergebnis nicht verwenden kann falls während der Messung ein Überlauf des internen Zeitzählers auftritt.

Harald
 
Was für eine SPS hast Du?
Falls Du eine S7-300/400/1500 hast, könntest Du zur Laufzeitmessung die Anweisung TIME_TCK verwenden.

Falls Du eine S7-1200/1500 hast, könntest Du theoretisch die neuere Anweisung RUNTIME zur Laufzeitmessung verwenden, allerdings ist die von Siemens sooo schlecht implementiert und dokumentiert :rolleyes:, daß man das Messergebnis nicht verwenden kann falls während der Messung ein Überlauf des internen Zeitzählers auftritt.

Harald
Hast Du schonmal erlebt das Runtime einen Überlauf hatte? Das ist mir gerade neu oO



Zeitgesteuerter OB alle 100ms aufrufen und eine Realzahl um 100ms addieren wäre das was mir als erstes einfallen würde.
UND Verküpfung aus Ansteuerung Ventil UNDN Eingang Endlage.
Was allerdings bei längerer Laufzeit sehr ungenau wäre und am Ende würde man immer gerundet auf +/-200ms ein Ergebnis haben, da der Baustein ja nicht aufgerufen wird wenn gestartet und gestoppt wird. Also kann am Start +/-100ms und am Ende nochmal +/-100ms hinzukommen, was bei genauen Messungen dann mal ein Problem und mal nicht darstellen würde.



Ich würde da einen TON nehmen und dessen Zeitwert viel viel höher legen als dein Zylinder jemals für seine Bewegung brauchen wird.
Den Timer startest du mit dem Start der Bewegung (Ventil ansteuern) und dessen abgelaufene Zeit liest du ein wenn der Ini erreicht ist.

Gruß
Larry
Ich würde diesen Vorschlag nutzen.
Der Zeitwert des TON ändert sich anhand der Zykluszeit, ist also immer mit in der Zykluszeit einberechnet zu dem Zeitpunkt an dem er aufgerufen wird. Daher hat er auch ziemlich "krumme" Zahlen. Zumindest soweit ich weiss.
Allerdings würde ich die abgelaufene Zeit direkt auf dem HMI darstellen, je nach Laufzeit verändert sich die Zeit dann ebenso und bleibt bei Abfall vom IN solange stehen bis neu gestartet wird.
 
Moin,
Ich nutze immer die CPU systemzeit für CPU-genaue Zeitauswertunh…
Mit Flanke Start wird die CPU-systemzeit Einmalig eingelesen (Startzeitpunkt), ein weiteres mal bei Erreichen des Endes (Endzeitpunkt). Dann einfach Ende minus Start = Laufzeit in msec…
In TIA ‚rd_sys_t‘
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast Du schonmal erlebt das Runtime einen Überlauf hatte? Das ist mir gerade neu oO
Da der CPU-interne Zeitzähler nicht unendlich weit zählen kann, sondern einen von Siemens leider undokumentierten endlichen Zählumfang hat, muß der Zeitzähler und damit RUNTIME irgendwann einen Überlauf haben. Vermutlich etwa einmal im Monat. Bei S7-1200 bei mehreren Generationen sogar einmal pro Minute. siehe TIA-Hilfe zu "RUNTIME Anweisung"
RUNTIME: Laufzeitmessung

Die Anweisung "Laufzeitmessung" verwendet einen internen hochfrequenten Zähler um die Zeit zu berechnen. Wenn der Zähler überläuft, gibt die Anweisung Werte <= 0.0 zurück. Dies kann für S7-1200-CPUs mit Firmware Stand <V4.2 bis zu einmal pro Minute vorkommen. Diese Runtimewerte sind zu ignorieren.
...sind zu ignorieren :ROFLMAO: Die ausgereifte technische Lösung des 21. Jahrhunderts...


Ich nutze immer die CPU systemzeit für CPU-genaue Zeitauswertunh…
(...)
In TIA ‚rd_sys_t‘
Vorsicht bei Nutzung der Uhrzeit! Was passiert in Deinen Programmen, wenn die Systemuhr während der Zeitmessung verstellt wird (vor oder zurück! z.B. durch Uhrzeitsynchronisation)? Nicht daß dann eine unerwartet große oder gar negative Zeitdifferenz entsteht und Deine CPU bei Folgerechnungen in STOP geht oder sonstigen unerwarteten Unsinn treibt...

Harald
 
...sind zu ignorieren :ROFLMAO: Die ausgereifte technische Lösung des 21. Jahrhunderts...
Immerhin haben die eine Lösung :D.
Zumindest müsste man als Abhilfe nur den Vorgängerwert mitschreiben und diesen dann einmal nutzen, als Hilfskrücke halt. Oder eben einen Mittelwert der letzten paar.

Ich find das irgendwie fies das sowas zwar in der Doku auftaucht, aber irgendwie "kaum" an die Programmierer herangetragen wird. Klar wirft es ein schlechtes Licht auf die, aber ich kann auch nicht bei jedem Softwareupdate jede einzelne dumme Anweisung überprüfen ob da was zugekritzelt wurde.

Wie auch immer, Danke!
 
Hallo Leute!

Danke danke für Eure nützlichen Tipps! Ich habe nun folgendes gemacht: siehe Bilder
 

Anhänge

  • 2021-10-22 11_13_15-Siemens  -  C__Users_thomas.kasch_Documents_Automatisierung_Sessions_AU_12...png
    2021-10-22 11_13_15-Siemens - C__Users_thomas.kasch_Documents_Automatisierung_Sessions_AU_12...png
    13,3 KB · Aufrufe: 90
  • 2021-10-22 11_13_02-Siemens  -  C__Users_thomas.kasch_Documents_Automatisierung_Sessions_AU_12...png
    2021-10-22 11_13_02-Siemens - C__Users_thomas.kasch_Documents_Automatisierung_Sessions_AU_12...png
    14,9 KB · Aufrufe: 83
  • 2021-10-22 11_12_43-Siemens  -  C__Users_thomas.kasch_Documents_Automatisierung_Sessions_AU_12...png
    2021-10-22 11_12_43-Siemens - C__Users_thomas.kasch_Documents_Automatisierung_Sessions_AU_12...png
    19,6 KB · Aufrufe: 83
Reichlich undurchsichtig und umständlich, verwendet die problematische Uhrzeit, und das Genie beherrscht das Chaos auch ganz ohne Kommentare... ;)

Harald
Stimmt sicherlich! Bin noch eher Anfänger und muss mich da noch ordentlich damit beschäftigen.
Aber wenn man schon dabei sind, wie würde deine Programmierung aussehen? Dann kann ich ja von dir lernen wie man es richtig macht.
 
Für was brauchst du die Zeit, als l
Laufzeitüberwachung Oder nur einmalig als Info.
Wenn nur zur einmaligen Info gibt es eine sehr einfache
Möglichkeit mit der Trace Funktion
 
Zurück
Oben