TIA Schrittkette Zeitabfrage Endlage

SPSnewbie91

Level-2
Beiträge
186
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Ich habe folgende Steuerung: CPU 1512SPF-1 PN

Eigentlich ist das Ganze einfach erklärt. Und zwar steuere ich einen Pneumatikzylinder an, der einen Stopfen schließt und öffnet. Dabei gibt es natürlich jeweils einen Endlagensensor. Ich möchte gerne, dass der Stopfen zwischen 0,3s und 0,5s schließt und zwischen 0,3s und 0,4s öffnet. Ist dies nicht der Fall soll eine Störung ausgegeben werden. Ich bin noch recht neu in der SPS Welt also verzeiht mir, falls dies zu offensichtlich für manche erscheint.

1666248116398.png

Ich hätte das mit der Zeitlichen Abfrage so gelöst, dass ich die Schrittzeit auslese. Aber irgendwie ist mir dann aufgefallen, dass das ja irgendwie gar keinen Sinn macht, da ja falls der Zylinder schneller als 0,3s ist die Transition trotzdem erfüllt wird. Der Schritt "wartet" halt einfach die restliche Dauer ab. Wenn man das so formulieren kann.
Hat hier vielleicht jemand eine Lösung parat wie ich das realisieren kann in meiner Schrittkette? Und wie kann ich aus der Schrittkette eine Störmeldung generieren?


Grüße
Philipp
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok. Also bei Ansteuerung des Zylinders (Je nachdem ob öffnen oder schließen) die Zeit messen und bei Unter- bzw. Überschreitung die Störung ausgeben. Das gilt dann auch für die Schrittkette oder?
 
Hatte jetzt folgende Überlegung.
1666252539457.png

Über diesen FB werden die Ausgänge der Zylinder über das HMI (Softkey) gesetzt oder eben über meine Schrittkette (siehe InOutputs "Auto_Minus" und "Auto_Plus". Ich würde meine Outputs über den Instanz-DB auslesen

1666252614681.png

und dann über einen tof und ton die Zeitintervalle eingrenzen. Also wenn die Sensoren %E4.4 bzw. %E4.5 nicht zwischen 0.3s und 0.4s bzw. 0.3s und 0.5s kommt, wird das jeweilige Bit in meinem Alarm_DB gesetzt. Ist das so richtig?
 
So ein wenig irritiert mich Deine Angabe zwischen 0,3 und 0,5.
Heißt das das Ding muss sich mindestens 0,3 und maximal 0,5 Sekunden lang bewegen? Sollte nach Netz-Ein die Endlage erreicht sein kommt doch eine Störung weil sie zu früh erreicht wurde, steht da ja schon?!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So ein wenig irritiert mich Deine Angabe zwischen 0,3 und 0,5.
Heißt das das Ding muss sich mindestens 0,3 und maximal 0,5 Sekunden lang bewegen? Sollte nach Netz-Ein die Endlage erreicht sein kommt doch eine Störung weil sie zu früh erreicht wurde, steht da ja schon?!
Genau. Minimal 0.3s und maximal 0.5s. Und ich brauche eine Störung wenn 0.3s unterschritten, also der Sensor schneller als 0.3s kommt, oder die Zeit 0.5s überschritten wird, also der Sensor nach 0.5s kommt.
 
Ich bin noch recht neu in der SPS Welt
So ein wenig irritiert mich Deine Angabe zwischen 0,3 und 0,5.
Heißt das das Ding muss sich mindestens 0,3 und maximal 0,5 Sekunden lang bewegen? Sollte nach Netz-Ein die Endlage erreicht sein kommt doch eine Störung weil sie zu früh erreicht wurde, steht da ja schon?!
ich würd die "Aufgabe" jetzt nicht so ernst nehmen, sondern einfach etwas bauen, was sinnvoll funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das es eine Aufgabe zum Lernen ist hab ich so nicht mitgeschnitten ^^.

Also Dein Konstrukt wird nicht funktionieren, da der TOF sofort durschaltet und demnach nur die Ausgabe der folgenden Meldung verlängert.

Für Deinen Fall mit Min und Max-Zeit ist es am Anfang vielleicht am einfachsten 2 TON zu nutzen:
TON1: Wenn Ausgang und NICHT Endlage dann Zeit starten. Wenn Zeit abgelaufen dann Störung Endlage nicht erreicht innerhalb Zeit
TON2: Wenn Ausgang dann Zeit starten. Durchgehend prüfen ob die Endlage erreicht wurde und TON2 nicht erreicht wurde, dann Störung Endlage zu früh erreicht.

Natürlich wirst Du bei der Simulation noch merken das es Ausnahmefälle gibt und das es wichtig ist in welcher Reihenfolge die Ausführung+Prüfung durchzuführen ist, aber das kannst Du sicher durch Beobachten sehen.
 
Das es eine Aufgabe zum Lernen ist hab ich so nicht mitgeschnitten ^^.

Also Dein Konstrukt wird nicht funktionieren, da der TOF sofort durschaltet und demnach nur die Ausgabe der folgenden Meldung verlängert.

Für Deinen Fall mit Min und Max-Zeit ist es am Anfang vielleicht am einfachsten 2 TON zu nutzen:
TON1: Wenn Ausgang und NICHT Endlage dann Zeit starten. Wenn Zeit abgelaufen dann Störung Endlage nicht erreicht innerhalb Zeit
TON2: Wenn Ausgang dann Zeit starten. Durchgehend prüfen ob die Endlage erreicht wurde und TON2 nicht erreicht wurde, dann Störung Endlage zu früh erreicht.

Natürlich wirst Du bei der Simulation noch merken das es Ausnahmefälle gibt und das es wichtig ist in welcher Reihenfolge die Ausführung+Prüfung durchzuführen ist, aber das kannst Du sicher durch Beobachten sehen.
Danke für deine Hilfe. Hast du das so gemeint?
1666258547558.png
 

Anhänge

  • 1666258466502.png
    1666258466502.png
    54,6 KB · Aufrufe: 3
Was auch funktionieren würde:

Lass einen Timer laufen, wenn ein Fahrbefehlt kommt (einer für auf und einer für zu) und speicher dir die Zeit die benötigt wurde, bis die entsprechende Endlage erreicht wurde. Danach vergleichst du diesen Wert einfach ob er in dem definierten Fenster liegt und gibst eine Störmeldung aus, wenn der Zylinder nicht fährt, aber die Zeiten außerhalb des Fensters sind (und am besten auch nicht Null ist, damit die Störung nicht jedes mal beim CPU neustart kommt).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nicht so ganz.
Ich gehe nun nur auf ein Netzwerk ein, da beide gleich sind:
Im oberen Pfad würde die Maximallaufzeit anzugeben sein, denn der TON wird unterbrochen durch Erreichen der Endlage und somit kann die Störung nicht auftreten.

Im unteren Teil würde der TON zwar seine Zeit erreichen, die Meldung aber durch Erreichen der Endlage unterdrückt werden.

Im Prinzip hast Du nun also zweimal das gleiche erstellt im oberen und unteren Pfad eines jeden Netzwerkes mit der Ausnahme das der obere Pfad nur dann die Zeit ablaufen lässt bis die Endlage erreicht ist, also ein kurzzeitiger Verlust im Betrieb bis zur Laufzeit des TON ausgeblendet wird, im unteren Pfad würde ein kurzzeitiger Verlust der Endlage im Betrieb allerdings sofort zur Störung führen.
Hat je nach Einsatzzweck Vor- und Nachteile.
In jedem Fall sind beide nur für die Maximallaufzeit möglich.

Für die minimale Laufzeit musst Du etwas mehr überlegen wie das Ganze in der Realität aussehen könnte (Gedankenspiel).
Im Prinzip haben wir eine Art Wettrennen. Entweder gewinnt die Endlage oder der TON.
Wenn die Endlage gewinnt, so haben wir einen Fehler, sie war zu früh da. Gewinnt der TON ist alles in Ordnung.
Also muss die erreichte Endlage vor dem Erreichten TON einen Fehler herbeiführen. Das kann man durch Verknüpfungen sowie Flankenerkennung lösen.

Eine ganz andere Art wäre es einfach die Startzeit des Ausgangs mit einer Flanke in eine Variable zu speichern, bei Erreichen der Endlage nochmal eine Speicherung durchführen, die Differenz ermitteln und dann auswerten.
Ich würde Dir zur Übung aber mit den Verknüpfungen raten.
 
Was auch funktionieren würde:

Lass einen Timer laufen, wenn ein Fahrbefehlt kommt (einer für auf und einer für zu) und speicher dir die Zeit die benötigt wurde, bis die entsprechende Endlage erreicht wurde. Danach vergleichst du diesen Wert einfach ob er in dem definierten Fenster liegt und gibst eine Störmeldung aus, wenn der Zylinder nicht fährt, aber die Zeiten außerhalb des Fensters sind (und am besten auch nicht Null ist, damit die Störung nicht jedes mal beim CPU neustart kommt).
Hast du das so gemeint?

1666265708927.png
 
Zuletzt bearbeitet:
Ich bin in KOP zwar nicht so wirklich "zu Hause" aber ist der erste Pfad nicht noch offen? (Compilerfehler?)
Die Störung wird doch auch sofort getriggert, da die Zeit ja immer irgendwann von Null startet?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was UDP meint ist das ein TON vom Ausgang gestartet wird mit T#500s, also viel zu hoch.
Wenn der Endpunkt erreicht ist (positive Flanke), Zeit speichern.
Eine Auswertung ob >0,5 dann Fehler
Eine Auswertung ob <0,3 dann Fehler
 
Bevor dir hier jemand eine fertige Lösung gibt und du dann nicht wirklich was draus lernst. Versuch die vorgeschlagene Lösung mal in mehrere Probleme aufzuteilen und versuche diese dann unabhängig voneinander anzugehen und erst am Ende zu verknüpfen:

1. Ein Zeitrelais das die Zeit für die Vorgang für das Öffnen des Zylinders misst (welche Signale sind hier relevant und wie müssen diese ausgewertet werden)
2. Speichere dir die gemessene Zeit in eine statische Variable (was bietet sich hier für ein Dauerhaftes Speichern an? )
3. Prüfe nun ob die gemessene Variable außerhalb des gewünschten Bereichs liegt und wenn ja, generiere deine Fehlermeldung (gibt es Einschränkungen für die Fehlermeldung und welche könnten das sein?)

4. + das Ganze nochmal fürs Schließen des Zylinders

Geh ruhig jeden der Punkte einzeln an und zeig deinen Lösungsansatz gerne hier.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bevor dir hier jemand eine fertige Lösung gibt und du dann nicht wirklich was draus lernst. Versuch die vorgeschlagene Lösung mal in mehrere Probleme aufzuteilen und versuche diese dann unabhängig voneinander anzugehen und erst am Ende zu verknüpfen:

1. Ein Zeitrelais das die Zeit für die Vorgang für das Öffnen des Zylinders misst (welche Signale sind hier relevant und wie müssen diese ausgewertet werden)
2. Speichere dir die gemessene Zeit in eine statische Variable (was bietet sich hier für ein Dauerhaftes Speichern an? )
3. Prüfe nun ob die gemessene Variable außerhalb des gewünschten Bereichs liegt und wenn ja, generiere deine Fehlermeldung (gibt es Einschränkungen für die Fehlermeldung und welche könnten das sein?)

4. + das Ganze nochmal fürs Schließen des Zylinders

Geh ruhig jeden der Punkte einzeln an und zeig deinen Lösungsansatz gerne hier.
Ja das habe ich schon verstanden. Nur kapiere ich nicht, wie ich meine Zeit messen kann. Bei meinem TON am PT gebe ich ja die Zeit vor und am ET könnte ich die Zeit abspeichern. Nur weiß ich nicht genau, wie ich meine Endlage mit dem TON verknüpfe, sodass die Zeit stehen bleibt sobald die Endlage erreicht ist.
Für die maximale Zeit habe ich ja schon eine Lösung wurde mir bestätigt
1666330937124.png
Nur verstehe ich nicht genau, wie ich meine Minimalzeit mit einbinde und wie das weiter oben mit den Flanken gemeint war
 
Nur weiß ich nicht genau, wie ich meine Endlage mit dem TON verknüpfe, sodass die Zeit stehen bleibt
Einmal das TON markieren, F1 für Hilfe drücken und im Zeitdiagramm ansehen wann was passiert.
Sobald am IN des TON das Ergebnis von TRUE auf FALSE wechselt bleibt er stehen. Wechselt er wieder auf TRUE so startet die Zeit neu. Eine Fortsetzung ist nicht möglich.

Flanke: Eine Flanke ist der eine Zyklus in dem ein Signal von HI nach LO oder LO nach HI wechselt. In genau diesem Moment wird ein Merker/Variable für einen Zyklus auf HI gesetzt um das zu Erkennen.
In der TIA-Hilfe kannst Du nach P_TRIG sowie N_TRIG suchen.

Die Zeit vergleichen kann man indem man mit den Variablen aus Deinem letzten Bild einen Vergleicher == nutzt und #st_TON_PLG_Close_1.ET mit dem Wert T#500ms vergleicht.
ET steht für Elapsed Time, also vergangene Zeit.

edit:
Vergleicher
== steht für ist GENAU gleich
<= für ist darunter oder genau gleich
>= darüber oder genau gleich
< ist darunter aber nicht gleich
> ist darüber aber nicht gleich
 
Zurück
Oben