Torsteuerung mit S7-200

Marschel1981

Member
Beiträge
9
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Zusammen,

ich bin auf dem Gebiet der SPS-Programmierung absoluter neuling. Ich habe günstig eine S7-200 bekommen und wollte mich mal mit dem Thema auseinander setzen.
Ich habe jetzt schon einige Stunden probiert, allerdings ich habe nichts brauchbares hinbekommen.

Ich möchte eine Torsteurung programmieren, die nach folgendem Muster funktioniert:

Taster 1 (E0.0) wird betätigt -> Tor 1 öffnet (A0.0) -> Taster 1 (E0.0) wird betätigt -> Tor 1 schließt (A0.1), und dann wieder von vorne.

Der Taster 1 ist für ca. 0,5 sec. betätigt
Die Ausgänge A0.0 und A0.1 sollen für 1 sec. betätigt sein und dann abfallen.

Da ich Anfänger bin, wäre ein Lösungsweg in KOP wünschenswert.

Vielen Dank im vorraus.


Mit freundlichen Grüßen

Marschel1981
 

hucki

User des Jahres 2014
Beiträge
5.532
Punkte Reaktionen
1.638
Zuviel Werbung?
->Hier kostenlos registrieren
Ich geh' mal davon aus, daß Du nur ein Tor hast und deswegen keine mehrfach aufrufbare SBR brauchst.
Ungetestet:
Code:
[FONT=courier new]ORGANIZATION_BLOCK MAIN:OB1
TITLE=Torsteuerung

VAR
FP_Taster1:BOOL;
END_VAR


BEGIN

Network 1 // Taster Tor 1
    LD     E0.0
    EU
    =      L0.0

Network 2 // Richtung Tor 1
    LD     L0.0
    UN     M0.0
    LDN    L0.0
    U      M0.0
    OLD
    =      M0.0

Network 3 // Timer Tor 1
    LD     L0.0
    TOF    T37, 10

Network 4 // Tor 1 öffnen
    LD     M0.0
    U      T37
    =      A0.0

Network 5 // Tor 1 schließen
    LDN    M0.0
    U      T37
    =      A0.1

END_ORGANIZATION_BLOCK[/FONT]



P
S: Damit Du auch weißt, was Du da zu Hause einbaust, erklärst Du am Besten mal die einzelnen Netzwerke. ;-)
 
Zuletzt bearbeitet:
OP
M

Marschel1981

Member
Beiträge
9
Punkte Reaktionen
0
Hallo,

danke für die schnelle Antwort. Das ist genau das, was ich brauche.
Allerdings ist mir die Funktionsweise noch nicht so ganz klar.

Es werden mit der Steuerung dann 4 Tore gesteuert, aber da kann ich dann ja die Ein- und Ausgänge einfach abändern, oder?


Gruß

Marschel1981
 

hucki

User des Jahres 2014
Beiträge
5.532
Punkte Reaktionen
1.638
Es ist ein Weg, alles 4x zu programmieren. Für'n Anfänger aus meiner Sicht auch völlig OK.
Fortgeschrittener ist es allerdings, eine SBR zu programmieren und diese dann 4x mit den verschiedenen Ein- und Ausgängen auf zu rufen.

Vlt. erklärst Du ja erstmal, was Du vom obigen Programm verstehst, und dann, wo es Unklarheiten gibt. Sollst ja auch was lernen. ;-)
 
OP
M

Marschel1981

Member
Beiträge
9
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Was ist denn eine SBR?

Zur Verständnisfrage:
- Im Netzwerk 1 wird der Eingang mit einem Merker? über eine steigende Flanke verknüpft. (Wofür steht das L bei L0.0?)
- Im Netzwerk 2 wird in Abhängigkeit von L0.0 und M0.0 die Richtung festgelegt
- Netzwerk 3 ist ne Abschaltverzögerung 5x100ms
- Netzwerk 4 + 5 öffnet bzw. schließt das Tor

Ich hoffe das ist so Richtig?


Gruß

Marschel1981
 

hucki

User des Jahres 2014
Beiträge
5.532
Punkte Reaktionen
1.638
SBR steht für Subroutine, also ein Unterprogramm. Diese können vom Hauptprogramm aus aufgerufen werden und das auch mehrfach während eines Zyklus.
Das Problem bei der S7-200 ist dabei, dass sich die eingebauten Timer und Zähler nicht mit verschiedenen Parametern mehrfach aufrufen lassen, wie man's bei verschiedenen Toren bräuchte. Dafür muss man eigene Lösungen programmieren.

Zur genaueren Erklärung:
Netzwerk 1 fragt den Eingang E0.0 auf eine positive Flanke ab und setzt bei positivem Ergebnis die lokale Variable L0.0 (für einen Zyklus) auf EIN.
Netzwerk 2 ist eine manuelle XOR-Verknüpfung. Bei größerern CPUen (S7-300 ...) steht Dir ein solches Gatter unter AWL und FUP direkt zur Verfügung. Wenn Du hier in der FAQ mal nach Stromstoßschalter suchst, wird Dir dieses Netzwerk auch genau erklärt.
 
Zuletzt bearbeitet:

hucki

User des Jahres 2014
Beiträge
5.532
Punkte Reaktionen
1.638
Zuviel Werbung?
->Hier kostenlos registrieren
Nö.

Unter Programmbausteinen ist standardmäßig schon eine SBR vorhanden und man kann auch mit Rechtsklick noch weitere (max. 64) einfügen:


In der SBR (im Main/OB1 auch) kann man den oberen Rand des Programmeditors herunter ziehen, um dort die Schnittstelle zu programmieren:

Die hier programmierten Variablen gelten nur für die SBR (lokale Variablen) und werden bei Beendigung der SBR wieder gelöscht. Deshalb muß man Sachen, die man länger braucht, außerhalb der SBR speichern (hier Richtung und Startzeit). Über IN, IN/OUT und OUT werden Werte an die/von der SBR vom/an den Aufruf übergeben.

Dann programmiert man die gewünschten Sachen (Pfeil zeigt noch mal, wo man die Schnittstelle aufzieht):



Wenn dies geschehen ist, kann man die SBR vom OB1 oder einer anderen SBR aus aufrufen.
Ist die SBR in sich gekapselt (nur lokale Variablen L... benutzt; Eingänge E..., Ausgänge A..., Merker M..., Variablen V..., Timer T... und Zähler Z... sind global!), kann man sie auch mehrmals in einem Zyklus mit verschiedenen Parametern aufrufen:
 
Zuletzt bearbeitet:

hucki

User des Jahres 2014
Beiträge
5.532
Punkte Reaktionen
1.638
Das sieht nur so aus.

Bei 4 Toren geht das vlt. noch mit dem einzeln programmieren. Aber stell' Dir z.B. 'ne Feuerwehr vor, die haben oft noch mehr Tore. Und wenn Du da 'ne Änderung brauchst, mußt Du die mit der SBR nur einmal machen und sie gilt für alle Tore.

Wenn Du Dir das Programm ansiehst, merkst Du, daß die SBR auch nur aus 5 Netzwerken besteht. Den Timer muß man halt selbst übernehmen. Dafür bieten die neueren S7-200 (ab S7-22x) die Möglichkeit, mit BGN_ITIME die aktuelle CPU-Zeit zu speichern und mit CAL_ITIME die Zeitdifferenz in ms dazu zu messen. Die vom Aufruf übergebenen Sekunden in ms umrechnen und dann beides vergleichen, fertig.
 

hucki

User des Jahres 2014
Beiträge
5.532
Punkte Reaktionen
1.638
So 'ne SBR kann man auch global programmieren, dann 3x kopieren und anschließend anpassen. Diese lassen sich zwar nicht mit verschiedenen Parametern aufrufen, aber so hat man trotz 4facher Programmierung wenigstens noch ein bißchen Unterteilung drinne, was zu welchem Tor gehört und spart sich meist die Schnittstelle der SBR.

Ich hab' Dir mal das obige Programm auf beide Varianten angepaßt, damit Du Dir beides in Ruhe ansehen kannst:
 

Anhänge

  • Torsteuerung.rar
    8,5 KB · Aufrufe: 13

mariob

Well-known member
Beiträge
2.048
Punkte Reaktionen
275
Hallo,
@hucki, lass mal den TE auch ein wenig in die Vorhand kommen, mit fertigen Lösungen ist auch nicht immer geholfen. Außergewöhnliche Ansätze von Unbedarften sehe ich sehr gerne, da sie einem selbst zu neuen Sichtweisen inspirieren können.
Ohne sich den Kram mit den Timern angeschaut zu haben, bei einer solchen Steuerung sind da wenige ms nicht entscheidend. Ich habe mir deswegen in solch unkritischen Anwendungen einen 10 ms Zyklustick gebastelt, der dann in den SBRs eine einfache Variable inkrementiert/dekrementiert.
Das spart den Streß der Timer und Timerübergabe und macht die SBRs ein wenig universeller, da hier nur noch eine Inout Variable als Speicher angebunden werden muß.

Gruß
Mario
 

hucki

User des Jahres 2014
Beiträge
5.532
Punkte Reaktionen
1.638
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Namensfetter,

ich glaub eh', daß er erst mal bei der 4fach Variante bleibt:
Es ist ein Weg, alles 4x zu programmieren. Für'n Anfänger aus meiner Sicht auch völlig OK.
...
Hab' genauso angefangen.

Trotzdem fand ich's damals interessant, als ich die mehrfach aufrufbaren SBR's entdeckte. Und ich persönlich fand es einfacher, so ein Beispiel in Ruhe nach zu vollziehen, als dies dem Handbuch zu entnehmen. Aber ich geb' Dir Recht, es gibt einfachere Beispiele als gleich die Timer.




... einen 10 ms Zyklustick gebastelt, der dann in den SBRs eine einfache Variable inkrementiert/dekrementiert.
Das spart den Streß der Timer und Timerübergabe und macht die SBRs ein wenig universeller, da hier nur noch eine Inout Variable als Speicher angebunden werden muß.
Kommt das nicht auf's Gleiche raus? Ich hab' doch auch nur eine IN/OUT-Variable in der die Startzeit gespeichert wird. BGN-ITIME und CAL-ITIME sind doch gute und einfache Bordwerkzeuge, die den S7-22x mitgegeben wurden.
(Die restlichen IOs sind die Sachen für's Tor, die er bei der 4fach Variante auch hat.)

Gruß
Hucki
 
OP
M

Marschel1981

Member
Beiträge
9
Punkte Reaktionen
0
Hallo zusammen,

ich habe die Torsteuerung soweit programmiert wie im Anhang. Das funktioniert auch soweit.

Jetzt möchte ich noch ein paar zusätzliche Sachen programmieren. Die Steuerung ist für eine Freiwillige Feuerwehr.

Ich möchte das bei Alarmeingang (E1.0) folgendes passiert:

- Licht geht an: Fahrzeughalle (A1.0), Parkplatz (A1.1), Umkleide (A2.0), wird alles per Stromstoßtaster geschaltet, brauche daher nur nen kurzen Implus; das Licht soll nur an gehen, wenn das Licht auch aus (Meldeeingänge E1.2, E1.3, E1.4)

- wenn dann der Taster Alarmtür (E1.1) innerhalb von 10 Minuten nach Alarmeingang 1X betätigt wird, soll das Licht in der Umkleide und Parkplatz wieder ausgehen, in der Fahrzeughalle aber an bleiben

- wenn der Taster Alarmtür (E1.1) innerhalb von 10 Minuten nach Alarmeingang 2x (innerhalb von 5 sec.) betätigt wird, soll das Licht überall an bleiben und die Tore nach und nach geöffnet werden (Tor 1, nach 5 sec. Tor 2, wieder 5 sec. Tor 3, wieder 5 sec. Tor 4)

- wenn innerhalb von 10 Min. nach Alarmeingang der Taster Alarmtür nicht betätigt wird, soll das Licht komplett wieder ausgehen (in Abhängigkeit der Meldeeingänge Licht) und die Tore sollen natürlich auch zu bleiben.


Ich hoffe ihr könnt mir helfen.


Gruß

Marschel
 

Anhänge

  • Torsteuerung mit Licht.rar
    8,9 KB · Aufrufe: 8

hucki

User des Jahres 2014
Beiträge
5.532
Punkte Reaktionen
1.638
Hast Du für die Beleuchtung extra Stromstoßschalter?
Wenn ja, warum machst Du das nicht über die SPS? Ist doch einfacher zu handhaben!

Es ist von der Bedienung her immer doof, wenn etwas bei einmaligem Tastendruck passieren soll, aber bei zweimaligem nicht! (OT: Das gleiche Problem besteht auch immer bei den Taster-Wünschen zum Rollladenprogramm)
Entweder man wartet die 5 Sekunden mit dem Licht ausschalten, ob vlt. noch ein 2. Tastendruck erfolgt. Dann weiß aber der Bediener nicht, ob der Tastendruck angenommen wurde, versucht's u.U. noch mal und hat damit natürlich den 2.Tastendruck.
Oder man schaltet das Licht nach dem ersten Tastendruck aus und muß es beim 2. wieder einschalten.
Beides wie gesagt doof.
Gibt es eine Alarmmeldeleuchte, wo man die Quittierung erkennen kann?
Eine Leuchte im Taster während der Codeannahmezeit könnte das Problem bei der 1.Variante lösen.
Andere Möglichkeit, die Funktion 1x und 2x tauschen. Dann muß man allerdings ein Tor wieder schließen. Oder das Öffnen des 1. Tores auch verzögern und mit 'ner Leuchte vorher auf das anstehende Öffnen aufmerksam machen.
Sollte man sich alles genau überlegen.



Zu Deinem Programm:
Das mit dem Impuls-Mitzählen für Stromstoßschalter außerhalb der SPS geht meist in die Hose und ist ja auch gar nicht nötig, wenn Du Rückmeldeeingänge der Lampen hast.

Die ODER-Verknüpfung eines boolschen Wertes mit dessen negiertem Wert (z.B.: V0.6 OR NOT V0.6) ergibt immer HIGH. Da kannst Du entweder den Sondermerker SM0.0 (Immer_Ein) nehmen oder, wenn noch mit einem weiteren boolschem Wert (z.B. Timerbit) UND-verknüpft wird, gleich ganz weglassen.



Kleines, getestetes Weihnachtsgeschenk (@mariob, nicht böse sein, ist einfacher als jetzt alles zu erarbeiten ;)):
So würde ich das nach Deinen Vorgaben machen, wobei ich mal noch die Variante der internen Stromstoßschalter mit rein genommen habe (Diese SBR ist im Moment nur durch "LDN SM0.0" deaktiviert - zum Variante wechseln einfach in der AWL-Ansicht das N löschen und bei der V1 das N zum LD hinzufügen):
 

Anhänge

  • Torsteuerung.rar
    13,9 KB · Aufrufe: 13
Oben