Step 7 Zeitversetztes Öffnen von Ventilen

linuxluder

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

bevor ich wieder "unfreundliche" Kommentar zu hören bekomme: ich bin kein Profi, habe die SPS seit 15 Jahren, habe seit Jahren nichts daran gemacht, also wenig Routine.
Jetzt habe ich sie wieder "rausgekramt", mich seit Stunden bemüht, aber irgendwie komme ich an meine Grenzen.
Ich möchte folgendes realisieren:

Beim Betätigen eines Taster = E 1.0 soll nach einer bestimmten Zeit (T 70) ein Ventil (= A 20.0) für T 71 öffnen. Nach weiteren T 72 soll das Ventil wieder öffnen, für T 73.
Bei nochmaligen Betätigen Taster E 1.0 soll das Ganze Stoppen und das Ventil schließen.
Bei einem weiterern Betätigen Taster E 1.0 soll das Ganze wieder von vorne beginnen.
(Da die Zeiten für das Öffnen des Ventils immer gleich sein sollen, also T 71 = T 73, wäre es gut, wenn man die Zeit, anders als jetzt bei mir, nur einmal festlegt.)

Code:
      U     E    1.0
      S     M    110.0



      U     M    110.0
      L     S5T#5S                      // Zeit vor erster Öffnung
      SE    T     70

      U     T     70
      L     S5T#2S                      // Zeit für Ventil offen
      SV    T     71



      U     T     71
      S     M    110.1

      U     M    110.1
      L     S5T#4S                      // Zeit zwischen Öffnung eins und zwei
      SE    T     72


      U     T     72
      L     S5T#2S                      //  Zeit für Ventil offen
      SV    T     73


      O     T     71
      O     T     73
      =     A     20.0

Danke im Voraus!

Gruß
Jo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ein Ventil (= A 20.0) für T 71 öffnen. Nach weiteren T 72 soll das Ventil wieder öffnen, für T 73.
Das Ventil soll an gehen, wenn T70 an und T71 noch nicht an ist und es soll an sein wenn T72 an aber T73 noch aus ist.

Bei Dir würde das Ventil erst nach Ablauf von T71 an und dann auch nicht wieder aus gehen.
Wenn T73 an geht, ist nämlich T71 sowieso noch an.
;)

PS: Ich hab' vermutlich Mist erzählt, denn Du hast ja SV und nicht SE bei T71 und T73 verwendet.
:oops:


Und wie Brams noch bemerkt hat, fehlt das Rücksetzen der beiden Merker.
Wobei M110.0 auch schon zwischendurch zurück gesetzt werden kann. Dann paasst auch das letzte ODER, wenn dort die richtigen Timer verwendet werden. Dafür muss der erste Merker dann mit dem 2. verriegelt werden.
 
Zuletzt bearbeitet:
Damit die beiden Zeiten gleich sind, schreibst Du die Zeit in einen DB und lädst dann für die beiden Timer den selben Wert aus dem DB anstatt der konstanten Zeitwerte.
Gruß
Erich
 
Hallo,

Danke für eure Tipps.
Ich werde das mal alles probieren/testen.
Das Speichern und Laden in/aus einem DB wäre natürlich super, aber das habe ich noch nie gemacht.

Eine allgemeine Frage noch: muss man jeden Timer zurücksetzen?

Gruß
Jo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Normalerweise nicht. Wenn die Startbedingung wegfällt, wird automatisch zurückgesetzt bzw. die Zeit von vorn begonnen.
Ausnahmen bestätigen wie immer die Regel. Ein Blick in die jeweilige Hilfe F1 gibt genauere Auskunft zu den einzelnen Timern.
 
Bei Deinem Code läuft T72 parallel zu T71. Die Verzögerung zwischen den beiden Mal Einschalten ist demzufolge nur T72-T71 und nicht komplett T72.
Würde ich persönlich nicht mögen.

Und wenn die Zeiten T71 und T73 eh' immer gleich sein sollen, würde ich T73 gleich ganz weglassen und T71 2x starten:
Code:
      U     E      1.0
      UN    M    110.1                  // nicht vor komplettem Durchlauf neu starten
      S     M    110.0                  // 1. Ein-Verzögerung starten


      U     M    110.0
      L     S5T#5S                      // Zeit vor erster Öffnung
      SE    T     70

      U     M    110.1
      L     S5T#4S                      // Zeit zwischen Öffnung eins und zwei
      SE    T     72

      U     T     70
      O     T     72
      =     A     20.0
      L     S5T#2S                      // Zeit für Ventil offen
      SE    T     71


      U     T     71
      U     M    110.1
      R     M    110.1                  // 2. Öffnung rücksetzen

      U     T     71
      U     M    110.0
      R     M    110.0                  // 1. Öffnung rücksetzen
      S     M    110.1                  // 2. Ein-Verzögerung starten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen Hucki,

ich habe deinen Code eben getestet. Perfekt!
Eine "klein" Frage noch. Wäre es möglich, bei nochmaligen Betätigen des Eingangs während des Ablaufs den Ablauf komplett zu stoppen und das Ventil auf alle Fälle zu schließen? Bei nochmaligen Betätigen des Eingangs soll dann alles wieder "normal" beginnen. Oder wäre es besser einen weiteren Eingang für einen Abbruch einzusetzen?

Gruß
Jo
 
Code von Hucki etwas erweitert,

Code:
      U     E      1.0      
      FP    M    110.2                  // Flank positiv
      =     M    110.3                  // inpuls

      U     M    110.3
      U(    
      O     M    110.0
      O     M    110.1
      )     
      =     M    110.4                  // Reset merker

      U     M    110.3                  // inpuls
      UN    M    110.4                  // reset merker
      UN    M    110.1                  // nicht vor komplettem Durchlauf neu starten
      S     M    110.0                  // 1. Ein-Verzögerung starten

      U     M    110.0
      L     S5T#5S                      // Zeit vor erster Öffnung
      SE    T     70

      U     M    110.1
      L     S5T#4S                      // Zeit zwischen Öffnung eins und zwei
      SE    T     72

      U     T     70
      O     T     72
      =     A     20.0
      L     S5T#2S                      // Zeit für Ventil offen
      SE    T     71

      U     T     71
      U     M    110.1
      O     M    110.4
      R     M    110.1                  // 2. Öffnung rücksetzen

      U     T     71
      U     M    110.0
      O     M    110.4
      R     M    110.0                  // 1. Öffnung rücksetzen
      S     M    110.1                  // 2. Ein-Verzögerung starten

Gruss,

Joop
 
Zuletzt bearbeitet:
Eine "klein" Frage noch. Wäre es möglich, bei nochmaligen Betätigen des Eingangs während des Ablaufs den Ablauf komplett zu stoppen und das Ventil auf alle Fälle zu schließen? Bei nochmaligen Betätigen des Eingangs soll dann alles wieder "normal" beginnen. Oder wäre es besser einen weiteren Eingang für einen Abbruch einzusetzen?
Natürlich ist sowas möglich. Dafür sind wir Programmierer. ;)

Ob gleicher Eingang oder separat, muss der Bediener/Besitzer entscheiden. Das Bedienkonzept sollte halt sinnoll sein und Fehlbedienungen möglichst ausschließen.


Wenn die Entscheidung beim gleichen Eingang liegt:
Schau mal in die FAQ!
Dort gibt es einen Thread zum Stromstossschalter.
Die Besonderheit hier - der Einfluss von M110.1 auf den Stromstossschalter für M110.0. Ersterer ist wie ein Zentral-AUS für den Stromstrossschalter.
Und eine Umschaltung des Stromstossschalters bewirkt immer das Rücksetzen von M110.1.


Separater Eingang ist programmiertechnisch einfacher: Nur Rücksetzen, keine Flanke


Aber wir suchen ja die Herausforderung. Also würde ich mich an Deiner Stelle mal an beiden Varianten versuchen.
:cool:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code von Hucki etwas erweitert, ...
Mit der Flanke geh' ich konfirm.
[EDIT]PS: Das Ausschalten funktioniert übrigens bei Dir nicht richtig, weil in der letzten Zeile M100.1 dabei immer eingeschaltet wird.[/EDIT]


Dann hätte ich einfach einen Stromstossschalter angefügt:
Code:
//      U     E      1.0                  // Ein-Schalter
//      UN    M    110.1                  // nicht vor komplettem Durchlauf neu starten
//      S     M    110.0                  // 1. Ein-Verzögerung starten

//      U     E      1.1                  // Aus-Schalter
//      R     M    110.0                  // M110.0 ausschalten
//      R     M    110.1                  // M110.1 ausschalten

      U     E      1.0                  // Ein-/Aus-Taster
      FP    M    110.2                  // Flankenmerker
      =     M    110.3                  // Flanke Taster

      U     M    110.3                  // bei Tastendruck
      X     M    110.0                  // M110.0 invertieren
      UN    M    110.1                  // bei aktivem M100.1 immer ausschalten
      =     M    110.0

      U     M    110.3                  // bei Tastendruck immer
      R     M    110.1                  // 2. Öffnung abschalten


// ab hier immer der gleiche Code:
      U     M    110.0
      L     S5T#5S                      // Zeit vor erster Öffnung
      SE    T     70

      U     M    110.1
      L     S5T#4S                      // Zeit zwischen Öffnung eins und zwei
      SE    T     72

      U     T     70
      O     T     72
      =     A     20.0
      L     S5T#2S                      // Zeit für Ventil offen
      SE    T     71


      U     T     71
      U     M    110.1
      R     M    110.1                  // 2. Öffnung rücksetzen

      U     T     71
      U     M    110.0
      R     M    110.0                  // 1. Öffnung rücksetzen
      S     M    110.1                  // 2. Ein-Verzögerung starten
So sind die Varianten "Nur Einschalter", "Gleicher Ein-/Ausschalter" und "separate Ein-/Ausschalter" einfach austauschbar.
:cool:
 
Zuletzt bearbeitet:
@linuxluder,

das Verwenden von Merkern und auch der S5-Timer ist nicht mehr wirklich zeitgemäß. Bei der S7-1200 gibt es z.B. letztere schon nicht mehr.

Du solltest den Baustein mal als gekapselten FB (warum FB und nicht FC?) erstellen.
Dabei musst Du dann auch überlegen, welche Merker durch statische Variablen ersetzt werden müssen, welche auch temporär sein können, wie man die IEC-Timer als Multiinstanz einfügt und wie Du Zeitvorgaben sowie Ein-/Ausgänge über die Bausteinschnittstelle übergibst.
Insgesamt ein wirklich schönes Übungsprojekt.
:cool:
 
Vielen herzlichen Dank an hucki und joop für den Code. Alles läuft nun wie es soll. Ich werde auch versuchen, den Code zu verstehen - ich will auch was dazu lernen.

Gruß
Jo
 
Wenn die Netzwerke davor richtig programmiert wurden, dann nicht.

Wenn jedoch in den NWs davor nicht so programmiert wurde, dass die VKE-Verkettung beendet und im nächsten neu begonnen wird (z.B. durch Auskommentieren), kann es zu VKE-Verschleppungen kommen:
Mit dem UND wird FALSE verschleppt und das VKE bleibt ggf. auf FALSE, wo man eigentlich TRUE erwartet.
Mit dem ODER wird TRUE verschleppt und das VKE geht ggf. auf TRUE, wo man eigentlich FALSE erwartet.

Im Allgemeinen nimmt man lieber das fehlerhafte FALSE in Kauf. Deshalb benutzten viele als Erstes ein UND.
Richtige Programmierung in den vorigen NWs ist jedoch das eigentliche Stichwort.
 
Hallo nochmal!

Entschuldigt bitte, wenn ich das für euch vermutlich sehr triviale Thema nochmal aufgreife.
Den Code, den ihr mir hier gepostet habt, klappt für meine Zwecke prima. Nun habe ich versucht, ihn genau zu begreifen, denn ich möchte ihn erweitern. Leider habe ich hier und da noch meine Probleme, trotz den Kommentaren daneben. Nun ja, habs halt nie so richtig gelernt.
Jedenfalls soll x Sekunden nach dem ersten Öffnen des Ventils ein weiterer Ausgang (ein NC-Relais) für y Sekunden geöffnet werden. Und wiederum soll alles mit E 1.0 gestartet, unterbrochen und zurückgesetzt sowie neu gestartet werden können.

Vielen herzlichen Dank für eure Hilfe!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In meinem obigen Code habe ich an einer Stelle etwas gespart:
Code:
      U     T     70
      O     T     72
      =     A     20.0
      L     S5T#2S                      // Zeit für Ventil offen
      SE    T     71
Eigentlich hätte der Code lauten müssen:
Code:
      U     T     70                    // 1. Verzögerungszeit Start V1
      O     T     72                    // 2. Verzögerungszeit Start V1
      L     S5T#2S                      // Zeit für Ventil offen
      SE    T     71                    // Verzögerungszeit Ende V1

      U     T     70                    // 1. Verzögerungszeit Start V1
      O     T     72                    // 2. Verzögerungszeit Start V1
      UN    T     71                    //    Verzögerungszeit Ende V1
      =     A     20.0
Weil diese Bedingung (UN T 71) aber bei der 1. Ablaufbeschreibung eh' nicht auftrat, konnte ich obige Kürzung einbauen.


Durch die neue Anforderung muss das nun aber doch ausgeschrieben werden.

Danach ist für das 2. Ventil genau der gleiche (Teil-) Ablauf wie beim 1. Ventil einzufügen:
Merker "Öffnung 2" -> "Verzögerungszeit Start V2" -> "Verzögerungszeit Ende V2"
Venil 2 = "Verzögerungszeit Start V2" UND NICHT "Verzögerungszeit Ende V2"

Der Merker "Öffnung 2" (M100.1) darf jetzt aber erst zurück gesetzt werden, wenn die "Verzögerungszeit Ende V1" UND "Verzögerungszeit Ende V2" auf ein sind.
 
So, bevor ich mich daran machen möchte, den Code zu erweitern, will ich den vorliegenden verstehen, zumindest etwas.

EINSCHALTVERZÖGERUNG (SE)
Der Ausgang eines Zeitgliedes, das als Einschaltverzögerung gestartet wird, führt nach dem Starten erst dann Signalzustand 1, wenn die programmierte Zeit abgelaufen ist und das VKE 1 am Starteingang noch ansteht ...

Warum ist dann hier

U M 110.0
L S5T#5S // Zeit vor erster Öffnung
SE T 70

T 70 "sofort" auf 1 und nicht erst nach 5 Sekunden?
 
Zurück
Oben