Step 7 Einschaltverzögerung nach Unterbrechung weiter ablaufen lassen

atari

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Liebe Forumuser,

da der Titel nicht aussagekräftig genug ist erläutere ich mein Problem gleich genauer.
CPU: CPU 315-2 PN/DP V3.2
Programmiersystem: Step 7 V5.5

In einer Chemieanlage stehen Behälter mit Medien(z.B. HCL). Es gibt aber auch Behälter mit Zirkulationsventilen, damit das Medium in Bewegung bleibt.
Die Zirkulation wird nach Ablauf einer Ruhezeit(vom Benutzer parametrierbar) UND wenn kein Medium von der Steuerung angefordert(über einen Eingang) wird
gestartet(Pumpe an und Zirkulationsventil auf). Wird während der Zirkulationszeit(vom Benutzer parametrierbar) ein Medium angefordert, wird die Zirkulation
unterbrochen und erst wenn keine Anforderung mehr vorliegt, soll die restliche Zeit der Zirkulation abgearbeitet werden.

Ich habe mir überlegt für die Zirkulationszeit eine Einschaltverzögerung mit einem invertiertem Eingang(keine Anforderung vom Medium) zu nutzen.
Sobald aber Medium angefordert wird, ist der Timer aus und ich habe auch keine Möglichkeit mehr die abgelaufene Zeit z.B. in ein MW zu speichern.
Sonst könnte ich nachdem die Anforderung erlischt, die Einschaltverzögerung mit der restlichen( Gesamtzeit - abgelaufene Zeit) starten.
Da TW aber in S5Time angegeben werden muss, habe ich da ebenfalls ein Problem.

Kennt ihr eine Möglichkeit, wie man die restliche Zeit nach Unterbrechung ermitteln und weiter abarbeiten kann?

Danke euch

Grüße

atari
 
Solange eine Einschaltverzögerung (S7-Timer SE) noch nicht neu gestartet wurde kann man auslesen wie weit der "Countdown" davor ging, z.B. " L T1"

Beim IEC-Timer TON (SFB4) weiß ich gerade nicht das genaue Verhalten, da müßte man aber ebenfalls an die bisher abgelaufene Zeit rankommen. Notfalls kann man ja auch den ablaufenden Zeitwert in eine Variable umkopieren nur solange die Freigabe am Timer-Eingang ansteht.

Der Datentyp S5TIME sollte kein Hindernis sein. Eine Function zum Umwandeln von S5T# in TIME# und zurück ist eine typische und dankbare Anfänger-Programmieraufgabe mit hohem Lerneffekt. Es gibt aber auch schon fertige Bausteine zum Umwandeln in der Standard Library "IEC Function Blocks": FC33 S5TI_TIM und FC40 TIM_S5TI.

Du könntest auch selber einen Zeitzähler programmieren, der z.B. mittels Addition Sekunden in einer (remanenten) Variable zählt. Wie lang ist typischerweise die Zeitdauer (Zirkulationszeit), die Du einhalten sollst?

Nachtrag:
Es gibt auch einen fertigen Timer-Baustein, den man beliebig unterbrechen kann und nach der Unterbrechung die Restzeit läuft:
Standard Library "TI-S7 Converting Blocks" FC80 TONR speichernde Einschaltverzögerung

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt auch einen fertigen Timer-Baustein, den man beliebig unterbrechen kann und nach der Unterbrechung die Restzeit läuft:
Standard Library "TI-S7 Converting Blocks" FC80 TONR speichernde Einschaltverzögerung

Mann muss sich eigentlich ein Mittag nehmen um den ganze Bibliothek durch zu forschen.

Bram
 
Solange eine Einschaltverzögerung (S7-Timer SE) noch nicht neu gestartet wurde kann man auslesen wie weit der "Countdown" davor ging, z.B. " L T1"
Nachtrag:
Es gibt auch einen fertigen Timer-Baustein, den man beliebig unterbrechen kann und nach der Unterbrechung die Restzeit läuft:
Standard Library "TI-S7 Converting Blocks" FC80 TONR speichernde Einschaltverzögerung

Danke Harald für diesen Tipp.
Genau diesen Baustein habe ich gesucht. Nur mit der Beschaltung im Aufruf im OB1 habe ich noch Probleme:

Ich habe den FC 80 so beschaltet:

Code:
CALL "TONR"
TMR_EN:=E20.0
RESET:=E20.1
PV:=L#5000
DELTA:=#OB1_PREV_CYCLE
Q:=A1.1
ET:=MD100

Die Zeit entspricht ja 5 s, denn angegeben wird sie ja in ms.
Sobald ich den Eingang 20.0 setze und 5 sec warte, wird aber nicht mein Ausgang gesetzt. Das sollte er doch aber nicht?
Rücksetzen kann ich den Timer ja nur über den reset Eingang.
Mir macht noch der Parameter DELAY zu schaffen.
Da ich den Aufruf im OB1 tätige, habe ich den Eingang laut Hilfe beschaltet aber da stimmt doch etwas mit der Beschaltung oder meinem Verständnis nicht.

Ich bitte um kurze Aufklärung.

Danke

atari

PS: die DELTA Variable habe ich als temp angelegt, ich hoffe das war richtig so
 
Hast Du den FC "TONR" in die Steuerung geladen?
Hast Du #OB1_PREV_CYCLE selber im OB1 deklariert? Die TEMP-Variablen OB1_... sollten schon automatisch in dem OB1 deklariert sein. #OB1_PREV_CYCLE ist das LW6. Du kannst mal "LW6" statt "#OB1_PREV_CYCLE" an DELTA_T dranschreiben - das sollte automatisch in #OB1_PREV_CYCLE geändert werden.

Falls in Deinem OB1 keine TEMP-Variablen OB1_... deklariert waren, dann lösche mal Deinen OB1 (oder verschiebe ihn in einen anderen Programm-Ordner) und füge einen neuen OB1 ein: Rechtsmausklick im Bausteineordner > Neues Objekt einfügen > Organisationsbaustein > Name: OB1 > [OK]

Harald
 
Zurück
Oben