Problem mit Programmierübung

Gerhard

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute!
Ich hab ein Problem bei einer Programmierübung für eine S7.Es geht um folgendes:Drei verschiedene Flüssigkeiten sollen in einem Behälter gemischt werden.Die Flüssigkeiten laufen nacheinander über ein Ventil V1 in den Behälter.Nachdem die erste Flüssigkeit im Behälter ist,schließt V1,Ventil V2 öffnet und die Leitung wird mit einer Reinigungsflüssigkeit gespült.danach schließt V2,es wird eine Pause eingehalten von 3sec,dann öffnet V1 und die 2.Flüssigkeit läuft in den Behälter.Danch folgt wieder der Reinigungszyklus und der Pausenzyklus.Dann folgt die dritte Flüssigkeit.
Ich hatte das ganze in einem FB programmiert und es funktionierte soweit ganz gut,bis die 2. Flüssigkeit in den Behälter laufen sollte,da öffnete das Ventil V1 dann nur noch bei der zweiten Flüssigkeit.
Es können drei Verschiedene Mischungen eingestellt werden,die unterschiedlichen Mengen werden über die laufzeiten der Pumpen realisiert.
Ich weiß auch gar nicht,ob mein Lösungsansatz (siehe unten) O.K. ist.

Schritt 1:

U Schritt 1
L Zeit (Menge Flüssigkeit 1)
SA Timer 0
U Timer 0
= Ventil 1
= Pumpe Flüss. 1
S Schritt 2
ON SteuEinMerk
O Schritt 3
R Schritt

Schritt 2:

U Schritt 2
UN Timer 0
L Zeit (Menge Reinigungsflüssigkeit)
SA Timer 4
U Timer 4
= Ventil 2
= Pumpe Reinigungsflüssigkeit
S Schritt 3
ON SteuEinMerk
O Schritt 4
R Schritt 3

Schritt 3:

U Schritt 3
UN Timer 4
L Zeit (Pause)
SA Timer 5
U Timer 5
S Schritt 4
ON SteuEinMerker
O Schritt 5
R Schritt 4

Schritt 4:

U Schritt 4
UN Timer 5
L Zeit (Menge Flüssigkeit 2)
SA Timer 1
U Timer 1
= Ventil 1
= Pumpe Flüss. 2
S Schritt 5
ON SteuEinMerk
O Schritt 6
R Schritt 5

Wer hat sowas oder ähnliches schon mal gemacht und kann mir einen Tip geben?

Danke schon mal !

Gruß
Gerd
 
hi,
ich habe mir für solche Zwecke einen kleinen Schrittkettenbaustein geschrieben. Unten poste ich die Quelle.
Der Baustein hat einen Initialschritt(0) und drei "normale" Schritte(1-3)
den kannst du leicht auf die Anzeil der benötigten Schritte erweitern.

In KOP oder FUP lässt er sich leicht beschalten.

Gruss
Alex

hier die Quelle:

FUNCTION FC 50 : VOID
TITLE =Schrittkeittensimulation mit 3 Schritten
//Schrittkette mit 3 Schritten
//Schrittumschaltung nach der erfüllten Transition ohne Pause
//Einer der Schritte ist immer aktiv
AUTHOR : AN
VERSION : 1.0
//know_how_protect

VAR_INPUT
ICmdGst : BOOL ; //Kommando: Grundstellungsfahrt(Schritt = 0)
ITrans00 : BOOL ; //Transitionsbedinung im Schritt 0
ITrans01 : BOOL ; //Transitionsbedinung im Schritt 1
ITrans02 : BOOL ; //Transitionsbedinung im Schritt 2
ITrans03 : BOOL ; //Transitionsbedinung im Schritt 3
END_VAR
VAR_OUTPUT
OAS00 : BOOL ; //Aktiver Schritt 00
OAS01 : BOOL ; //Aktiver Schritt 01
OAS02 : BOOL ; //Aktiver Schritt 02
OAS03 : BOOL ; //Aktiver Schritt 03
END_VAR
VAR_IN_OUT
IOSNr : INT ; //Aktiver Schritt (Temp)
END_VAR
BEGIN
NETWORK
TITLE =Grundstellungsfahrt


// ==[ Anforderung einer Grundstellungsfahrt ]==
U #ICmdGst;
SPBN A002;
L 0;
T #IOSNr;

NETWORK
TITLE =Schrittkettensimulation


// ==[ Sprungveteiler ]==
A002: L #IOSNr;
SPL B002; // Bei >3
SPA C002; // Bei 0
SPA D002; // Bei 1
SPA E002; // Bei 2
SPA F002; // Bei 3

// ==[ Fehler: SNR > 2 ]==
B002: L 0; // Falsche SNR (>3)
T #IOSNr;

// ==[ SNR = 0 ]==
C002: SET ;
S #OAS00;
R #OAS01;
R #OAS02;
R #OAS03;

U #ITrans00; // bei erfüllter Transitionsbedienung
SPBN END2;
L 1; // Schritt 1 im nechsten Zyklus aktivieren
T #IOSNr;
SPA END2;

// ==[ SNR = 1 ]==
D002: SET ;
R #OAS00;
S #OAS01;
R #OAS02;
R #OAS03;

U #ITrans01; // bei erfüllter Transitionsbedienung
SPBN END2;
L 2; // Schritt 2 im nechsten Zyklus aktivieren
T #IOSNr;
SPA END2;


// ==[ SNR = 2 ]==
E002: SET ;
R #OAS00;
R #OAS01;
S #OAS02;
R #OAS03;

U #ITrans02; // bei erfüllter Transitionsbedienung
SPBN END2;
L 3; // Schritt 3 im nechsten Zyklus aktivieren
T #IOSNr;
SPA END2;


// ==[ SNR = 3 ]==
F002: SET ;
R #OAS00;
R #OAS01;
R #OAS02;
S #OAS03;

U #ITrans03; // bei erfüllter Transitionsbedienung
SPBN END2;
L 0; // Schritt 0 im nechsten Zyklus aktivieren
T #IOSNr;
SPA END2;


END2: SET ;
SAVE ;

END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,
da ist ein fehler drin, du steuerst in schritt 1 und schritt 4 Ventil 1 somit wird immer nur die letzte anweisung für Ventil ausgeführt, da kann in schritt 1 das ventil ruhig angesteuert werden, wenn in schritt4 für ventil1 0 steht bleibt das ventil geschlossen.
lösungsmöglichkeit: erst die schrittkette programmieren dann den ausgangsteil.
das sieht dann so aus:
o t0
o t1
= Ventil 1

usw.
mfg
dietmar
 
Zurück
Oben