Google-Suche auf MEINE-SCHALTUNG.de :
|
Dauerkalender |
Lager
Ein Lager besteht aus 5 Gängen mit jeweils 2 Regalen, die links und rechts
aufgestellt sind. Jedes Regal ist auf 10 Spalten und 10 Reihen aufgeteilt. Somit stehen 1000
Lagerfächer zur Verfügung. Die Arbeit innerhalb des Lagers wird von einem Roboter, der über eine eigene
Steuerung verfügt, ausgeführt. Es soll ein einfaches SPS-Programm erstellt werden, mit dem das
Lager verwaltet wird. Über eine Schnittstelle wird der Roboter mit zwei Word-Variablen darüber
informiert, was gerade zu tun ist. Er kann ein Produkt aus einem beliebigen Fach holen oder in einem
leeren Fach unterbringen. Eine der Variablen enthält die Artikelnummer, die andere die gewünschte
Aktion mit entsprechender Fach-Nummer.
Lagerskizze
Programm-Aufbau:
Alle im Lager vorhandenen Artikel werden in der Array-Variable "Lager_Bestand"
gespeichert. Jedes Feld beinhaltet eine Artikelnummer oder eine Null, falls das betreffende Fach
noch leer ist. Über ein Eingabegerät (im Beispiel feste Vorbelegung) wird der SPS eine
Artikelnummer (Artikel_Nummer) und die gewünschte Aktion (Aktion) mitgeteilt.
Aktion = 0: keine Aktion
Aktion = 1: Artikel holen
Aktion = 2: Artikel lagern
Variablen
Nach erfolgter Eingabe wird der Vorgang mit "Start_Taster" gestartet.
Die Voraussetzung dafür ist, dass der Roboter seine Bereitschaft (Roboter_Bereit = TRUE) meldet.
Das Programm untersucht alle Felder der Variable "Lager_Bestand" nach
a) Artikelnummer, für die Aktion "Holen" oder
b) leerem Fach, für die Aktion "Lagern".
Sobald es findig geworden ist, werden die Übertragungsvariablen für den Roboter (Zum_Roboter)
gebildet.
Die eine Variable enthält die Artikelnummer.
Die Steuervariable enthält die Fachnummer und die gewünschte Aktion. Der Aufbau dieser
Variable sieht wie folgt aus:
[Bit 15:Frei, Bits 14-13: Aktion, Bits 12-10:Gang, Bits 9-8: Seite, Bits 7-4: Spalte,
Bits 3-0: Reihe]
Nach der Übertragung wird abgewartet, bis der Roboter die Ausführung der Aufgabe mit dem
Signal "Roboter_Fertig" bestätigt. Ist das der Fall wird die Bestand-Variable aktualisiert.
Entweder wird unter der vorgegebenen Fachnummer Artikelnummer gespeichert (beim Lagern)
oder eine Null, falls das Fach nach Artikelentnahme frei geworden ist.
Programm:
// Vorbelegung (Eingaben Beispiel)
#Artikel_Nummer := 222;
#Aktion := 1;
// Start
IF "Start_Taster" AND #Roboter_Bereit THEN
#Schritt := 1;
#Roboter_Bereit := FALSE;
#Zwischen_Variable_W2 := 0;
#Fehler := '';
END_IF;
// Programmschritte
CASE #Schritt OF
1:
#Lager.Gang := 0;
REPEAT #Lager.Gang += 1;
#Lager.Seite := 0;
REPEAT #Lager.Seite += 1;
#Lager.Spalte := 0;
REPEAT #Lager.Spalte += 1;
#Lager.Reihe := 0;
REPEAT #Lager.Reihe += 1;
IF #Aktion = 1 THEN
IF #Lager_Bestand[#Lager.Gang, #Lager.Seite, #Lager.Spalte, #Lager.Reihe] = #Artikel_Nummer THEN
#Fach_gefunden := TRUE;
END_IF;
END_IF;
IF #Aktion = 2 THEN
IF #Lager_Bestand[#Lager.Gang, #Lager.Seite, #Lager.Spalte, #Lager.Reihe] = 0 THEN
#Fach_gefunden := TRUE;
END_IF;
END_IF;
UNTIL #Lager.Reihe = 10 OR #Fach_gefunden END_REPEAT;
UNTIL #Lager.Spalte = 10 OR #Fach_gefunden END_REPEAT;
UNTIL #Lager.Seite = 2 OR #Fach_gefunden END_REPEAT;
UNTIL #Lager.Gang = 5 OR #Fach_gefunden END_REPEAT;
#Schritt := 2;
IF NOT #Fach_gefunden THEN
#Schritt := 5;
END_IF;
2:
#Zwischen_Variable_W1 := INT_TO_WORD(#Lager.Reihe);
#Zwischen_Variable_W2 := #Zwischen_Variable_W1;
#Zwischen_Variable_W1 := INT_TO_WORD(#Lager.Spalte);
#Zwischen_Variable_W1 := SHL(IN := #Zwischen_Variable_W1, N := 4);
#Zwischen_Variable_W2 := #Zwischen_Variable_W2 OR #Zwischen_Variable_W1;
#Zwischen_Variable_W1 := INT_TO_WORD(#Lager.Seite);
#Zwischen_Variable_W1 := SHL(IN := #Zwischen_Variable_W1, N := 8);
#Zwischen_Variable_W2 := #Zwischen_Variable_W2 OR #Zwischen_Variable_W1;
#Zwischen_Variable_W1 := INT_TO_WORD(#Lager.Gang);
#Zwischen_Variable_W1 := SHL(IN := #Zwischen_Variable_W1, N := 10);
#Zwischen_Variable_W2 := #Zwischen_Variable_W2 OR #Zwischen_Variable_W1;
#Zwischen_Variable_W1 := #Aktion;
#Zwischen_Variable_W1 := SHL(IN := #Zwischen_Variable_W1, N := 13);
#Zwischen_Variable_W2 := #Zwischen_Variable_W2 OR #Zwischen_Variable_W1;
#Schritt := 3;
3:
#Zum_Roboter[1] := #Zwischen_Variable_W2;
#Zum_Roboter[2] := #Artikel_Nummer;
#Schritt := 4;
4:
IF #Roboter_Fertig THEN
IF #Aktion = 1 THEN
#Lager_Bestand[#Lager.Gang, #Lager.Seite, #Lager.Spalte, #Lager.Reihe] := 0;
END_IF;
IF #Aktion = 2 THEN
#Lager_Bestand[#Lager.Gang, #Lager.Seite, #Lager.Spalte, #Lager.Reihe] := #Artikel_Nummer;
END_IF;
#Schritt := 0;
#Roboter_Bereit := TRUE;
END_IF;
5:
#Fehler := 'Fehler aufgetreten';
END_CASE;
S7-Programmierung TIA-Portal (Übersicht):
Google-Suche auf MEINE-SCHALTUNG.de :
|
|