4 Übungen
4.1 Grundlagen Ablaufdiagramme
Ergänzend zum Unterricht nachfolgend Übungen zum Thema der Ablaufdiagramme.
4.1.1 Zuggesteuerter Bahnübergang
Wie der Name schon sagt, wird ein zuggesteuerter Bahnübergang durch den Zug selbst gesteuert. Sobald der Zug eine Einschaltstelle (1) vor dem Übergang passiert, schliessen sich die Schranken und die Signalanzeigen beginnen zu blinken. Sobald der Bahnübergang gesichert ist (Schranken geschlossen und Signalanlage blinkt) wird dem Zug die Durchfahrt mittels einer weissen Signalleuchte (2) erlaubt. Sollte dieses Signal nicht vorhanden sein, muss der Zug davor stoppen. Hat der Zug den Bahnübergang passiert (3), öffnen sich die Schranken wieder und die Signalanlage wird ausgeschaltet. Damit ist der Übergang wieder für den Verkehr offen.
Installation:
- Es gibt zwei unabhängige Schranken (d.h. beide können unabhängig geöffnet/geschlossen werden und müssen dementsprechend modelliert werden)
- Signalisation Übergang gibt es nur eine (Wenn eingeschaltet blinken beide Seiten des Übergangs).
- Es gibt ein «Durchfahrt freigegeben» (2) Signal
- Es gibt ein Signal, wenn ein Zug die Einschaltstelle passiert (1) und wenn er den Bereich wieder verlässt (3).
Aufgabe:
Zeichnen sie das Ablaufdiagramm dieses Bahnübergangs.
Wählen sie sinnvolle Schritte und Transitionen. Anhand der definierten Schritte muss klar ersichtlich sein, wann der Bahnübergang gesichert und wann er offen ist. Es müssen keine Fehler dargestellt werden («Schönwetterfall»). Auf Aktionen kann verzichtet werden. Synchronisieren sie die sinnvollen Prozesse.
4.1.2 Personenschleuse
Nachfolgendes Bild zeigt eine vereinfachte Personenvereinzelungsschleuse. Jede Seite der Schleuse verfügt über eine Anforderungstaste, mit der eine Person die Durchquerung beantragen kann. Ist die Schleuse frei, öffnet sich die erste Türe auf der entsprechenden Seite. Sobald die Person die Schleuse betritt, wird dies über einen «Personen Sensor» detektiert und die Türe schliesst sich wieder. Sobald die Türe geschlossen ist, öffnet sich die Türe auf der anderen Seite. Hat die Person die Schleuse verlassen schliesst sich auch diese Türe und die Schleuse ist bereit für die nächste Person. Einziger Ausnahmefall ist, wenn eine Person die Schleuse nicht betritt, wird die Schleusung nach einer Zeit abgebrochen.
Aufgabe:
Zeichnen sie das Ablaufdiagramm dieser Schleuse. Es muss die beschriebene Funktion darstellen. Alle anderen Fehler müssen nicht modelliert werden. Wählen sie sinnvolle Schritte und Transitionen. Auf Aktionen und Qualifier kann verzichtet werden. Nutzen sie Mutual Exclusion.
4.1.3 Verifikation von Barcodes
Eine Anlage zur Prüfung von Barcodes auf Paketen, besteht aus einem Förderband und einer Verifikationsstation mit Kamera. Ist die Anlage gestartet und es wird ein Paket aufs Band gelegt (Sensor S1), schaltet das Förderband ein. Auf dem Band können mehrere Pakete unterwegs sein. Ein Mitarbeiter stellt dabei sicher, dass die Abstände zwischen den Pakten richtig sind. Kommt ein Paket am Ende des Bandes an (Sensor S2), wird geprüft ob die Verifikationsstation bereit ist. Ist dies der Fall wird, das Paket übergeben, andernfalls stoppt das Förderband. Sollte innerhalb einer Zeit (t1) kein Paket am Ende des Bandes ankommen, wird das Band ohne Fehler wieder gestoppt. Sobald ein Paket auf der Verifikationsstation steht (Sensor S3), wird per Kamera der Barcode gelesen. Ist die Lesung erfolgreich, wird das Paket auf eine Rutsche gefördert oder andernfalls mit einem Pusher aussortiert. Die Station kann nur ein Paket gleichzeitig bearbeiten und gilt als bereit, wenn sie frei ist. Das Band und die Station arbeiten soweit als möglich unabhängig voneinander. Beim Einschalten der Anlage muss damit gerechnet werden, dass noch Pakete auf dem Förderband sind. Der Rest der Anlage kann als leer angenommen werden. Ausschalten kann man die Anlage nur wenn Band und Station frei sind.
Aufgabe:
Zeichnen sie das Ablaufdiagramm der ganzen Anlage (Nur der Anlage, keine Personen etc.). Wählen sie sinnvolle Schritte und Transitionen. Anhand der definierten Schritte muss klar ersichtlich sein, was der Zustand der einzelnen Komponenten ist. Abgesehen von der beschriebenen Funktion, müssen keine Fehler dargestellt werden («Schönwetterfall»). Auf Aktionen und Qualifier kann verzichtet werden. Synchronisieren sie die sinnvollen Prozesse.
4.1.4 Brücke mit einer Fahrspur
4.1.4.1 Grundfunktion
Eine Brücke für Autos verfügt nur über eine Fahrspur. Damit dennoch Autos von beiden Seiten die Brücke überqueren können, sind Durchfahrtssignale zur Steuerung montiert. Initial sind beide Seiten gesperrt und die Brücke frei. Sobald ein Fahrzeug auf einer Seite detektiert wird (S1/S2) wird das entsprechende Durchfahrtssignal (D1/D2) freigegeben. Das Signal bleibt eine gewisse Zeit (t1) freigeschaltet bevor es wieder gesperrt wird. Damit die Fahrzeuge, die noch unterwegs sind, genügend Zeit haben die Brücke zu überqueren, bleibt die Brücke eine weitere Zeit (t2) gesperrt, bevor das nächste Signal freigeschaltet wird.
4.1.4.2 Erweiterung
Die in a) beschriebene Funktion hat ein Prioritätsproblem. Warten auf beiden Seiten viele Fahrzeuge, kann es passieren, dass wieder dieselbe Seite die Durchfahrt erhält, die bereits zuvor an der Reihe war. Erweitern sie die Steuerung, dass die Seite, die zuletzt an der Reihe war, eine Zeit (t3) länger gesperrt bleibt, um der anderen Seite die Freigabe zu ermöglichen. Nach dieser Zeit sind beide wieder gleichberechtigt.
4.1.4.3 Aufgabe
Zeichnen sie das Ablaufdiagramm dieser Brücke. Es muss die beschriebene Funktion darstellen. Alle anderen Fehler müssen nicht modelliert werden. Wählen sie sinnvolle Schritte und Transitionen. Auf Aktionen und Qualifier kann verzichtet werden. Aufgabe b) kann direkt im Ablaufdiagramm eingebaut werden. Nutzen sie Mutual Exclusion.
4.2 Einführung SPS
Nachfolgend einführende Übungen zum Verständnis der SPS Umgebung.
4.2.1 Zyklus Zähler
Starten wir mit einem einfachen Beispiel. Dazu legen wir eine Counter Variable vom Typ SINT an und zählen jeden Zyklus hoch.
Deklaration:
Counter : INT;Implementierung:
Counter := Counter + 1;- In welchem Takt wird der Counter hochgezählt?
- Wie gross ist der Datentyp
SINT? - Was passiert wenn der Zähler ewig zählt?
4.2.1.1 Erweiterung Enable
Der Zykluszähler soll ein und ausgeschaltet werden können. Also legen wir eine weitere Variable Enable vom Typ BOOL an. Der Zähler läuft nur, wenn Enable auch True ist.
Deklaration:
Enable : BOOL;Implementierung:
IF Enable THEN
Counter := Counter + 1;
END_IFBreakpoints: Testen wir am Beispiel Breakpoints:
- Klicken auf eine Code-Zeile -> Rechtsklick -> Breakpoint / Haltepunkt
- Der Programmzeiger hat angehalten. Klicken auf Run, macht immer einen neuen Zyklus bis der Haltepunkt entfernt wird.
- Machen wir den Haltepunkt im IF und Ausserhalb um zu versthen wie es funktioniert. Viel Erfolg!
4.2.2 Erweiterung: Hoch und Runterzählen!
Okay wir haben begriffen wie der Zähler funktioniert. Bitte wie folgt anpassen:
- Zähler zählt hoch bis 200
- Wird 200 erreich wird runter gezählt bis -200
- Dieser Vorgang läuft solange
Enableaktiv ist. - Zusatz: Können wir eine Variable
Reseteinfügen, das beim Setzen den Zählwert einmalig auf 0 und Reset direkt aufFalsegesetzt wird.
4.2.3 Zustandsautomat
Ablaufdiagramme haben wir im Griff, also überführen wir das in die Programmierumgebung. Erstellen wir ein Zustandsautomat für ein Tor. Das Tor kann ?Auf, Zu, Am Öffnen, Am Schliessen sein. Zur Steuerung stehen die Eingangssignale TorAuf, TorZu, SensorTorAuf und SensorTorZu, zur Verfügung, wie die Ausgänge MotorAuf und MotorZu.
Zuerst brauchen wir eine Variable, um den aktuellen Zustand zu speichern. Legen wir also die Variable State als INT an. Zusätzlich direkt mit den Eingangssignalen TorAuf, TorZu, SensorTorAuf und SensorTorZu, wie auch die Ausgänge MotorAuf und MotorZu:
Deklaration:
TorAuf : BOOL;
TorZu : BOOL;
SensorTorAuf : BOOL;
SensorTorZu : BOOL;
MotorAuf : BOOL;
MotorZu : BOOL;
State : INT;Machen wir die CASE-Struktur mit den Transitionen.
Implementierung:
CASE State OF
0: // Zu
IF TorAuf THEN
State := 1;
END_IF
1: // Am Öffnen
IF SensorTorAuf THEN
State := 2;
END_IF
2: // Auf
IF TorZu THEN
State := 3;
END_IF
3: // Am Schliessen
IF SensorTorZu THEN
State := 0;
END_IFAuftrag:
1. Legen wir im TwinCAT3 ein neues Programm an und fügen es dem Task hinzu. 2. Übernehmen wir obiges Programm in die Entwicklungsumgebung 3. Laden wir das Programm herunter und starten den Zyklus 4. Schalten wir die Variablen TorAuf und TorZu und versuchen den Ablauf nachzuvollziehen 5. Können wir die Motorvariablen MotorAuf und MotorZu einfügen? Prüfen wir aber auch, dass sie nur in den Schritten 1 und 3 aktiv sind.
- Können wir den Programmzeiger manuell nachverfolgen?
- Wieviele Zyklen braucht es im besten Fall für einen Durchgang (Start State 0, Ende State 0)
- Sind die Motoren nur in den richtigen Schritten aktiv?
4.2.4 TON
Ein immer wieder benötigter Baustein ist TON, eine Einschaltverzögerung. Diesen Baustein gibt es in jeder SPS-Umgebung und wird über Bilbiotheken zur Verfügung gestellt. In TwinCAT3 liegt der Baustein unter References -> Standard.
Versuchen wir Ihn in unser Programm zu integrieren: Deklaration:
fbDelay : TON;
Counter : INT;Implementierung:
fbDelay(IN := True, PT := T#5s);
IF Delay.Q THEN
fbDelay(IN := FALSE);
Counter := Counter + 1;
END_IF- Wieviele Zyklen braucht es, um den Counter um eins zu erhöhen?
- Könnte ich mehrere Timer gleichzeitig laufen lassen? Warum?
4.2.5 Einen Timer implementieren
Implementieren wir den Timer aus den Unterrichtsfolien “Einführung_SPS”.
4.3 SPS Hardware
In diesen Übungen möchten wir Signale in einer SPS Verarbeiten und Ansteuern.
4.3.1 Taster und Counter
Lesen wir einen Taster des Steuerungsaufbaus ein und lassen einen Counter hochzählen, wenn dieser aktiv ist.
Variable im
Mainanlegen:Taster1 AT %I* : BOOL; Counter : INT; // CountervariableSPS Projekt übersetzen (Build / Erstellen)
Anschliessend unter E/A (I/O) -> Klemme 1809 -> Channel 15 verknüpfen
Konfiguration aktivieren (Treppe)
Ins MAIN wechseln und folgenden Code einfügen:
IF Taster1 THEN Counter := Counter + 1; END_IFEinloggen und Programmzeiger starten (Play)
Testen wir!
4.3.2 LED-Ansteuerung
Steuern wir eine LED an.
Variable im
Mainanlegen:LED_Red AT %Q* : BOOL;SPS Projekt übersetzen (Build / Erstellen)
Anschliessend unter E/A (I/O) -> Klemme 2809 -> Channel 14 verknüpfen
Konfiguration aktivieren (Treppe)
Ins MAIN wechseln und einloggen (Grüne Tür)
Programmzeiger starten (Play)
Setzen sie die Variable manuell und klicken sie auf “Werte schreiben”
Testen wir!
4.3.3 Potentiometer
Wir möchten die 3 LEDs als Niveausteuerung nutzen und den Füllstand mit dem Poti simulieren.
| Hardware | Anschluss | Zweck |
|---|---|---|
| Poti | EL3064 - Channel 4 - Value (INT) | Poti |
Beschreibung:
Mit den LEDs werden vier Bereiche eingerichtet Leer - 33 % - 66% - 100 %. Der Bereich des Poti wird entsprechend eingeteilt, wobei 0 = leer ist.
4.3.4 Fussgängerampel
Erstellen wir den ersten Zustandsautomat für eine Ampelsteuerung. Die Ampel ist für die Autos, die Fussgänger haben aktuell keine eigene Anzeige.
Grundfunktion:
Ein Fussgänger kann das Überqueren der Strasse durch einen Taster anfordern.
Für die Aufgabe möchten wir folgende Hardware des Laboraufbaus verwenden:
Hardware Anschluss Zweck Taster1 EL1809 - Channel 15 Anforderung zur Überquerung LED-Rot EL2809 - Channel 14 Rote LED der Ampel LED-Gelb EL2809 - Channel 15 Gelbe LED der Ampel LED-Grün EL2809 - Channel 16 Grüne LED der Ampel Wird die Anlage eingeschaltet ist die Ampel auf durchfahrt (Grün)
Mit der Anforderung erfolgt folgender Signalwechsel (Übergang 1 Sekunden):
Grün -> Gelb -> RotAmpel bleibt 3 Sekunden gesperrt
Anschliessend schaltet die Ampel zurück (Übergang 1 Sekunden):
Rot -> Gelb und Rot -> GrünLösen wir die Aufgabe mit einem Zustandsautomat
4.3.4.1 Erweiterung: Enable/Disable
Als Erweiterung erhält die Ampel einen Hauptschalter.
| Hardware | Anschluss | Zweck |
|---|---|---|
| Taster2 | EL1809 - Channel 16 | Ampelsteuerung Enabled/Disabled |
Beschreibung:
Von Enabled nach Disabled:
- Die Ampel wechselt direkt in den Ablauf zur Sperrung
- Anschliessend wechselt die Ampel auf
Gelb Blinkend
Von Disabled nach Enabled:
- Die Ampel möchte sperren und wechselt direkt auf
Gelb-Rot->Rot - Anschliessend läuft wieder das normale Programm.
4.3.4.2 Erweiterung: Zeitsteuerung
Wer jetzt noch nicht genug hat, kann gerne das Poti integrieren, um die Sperrzeit bei Rot steuern zu können.
| Hardware | Anschluss | Zweck |
|---|---|---|
| Poti | EL3064 - Channel 4 - Value (INT) | Poti |
4.4 Praktikum: Motorensteuerung
Folgt.