Steuerschrank


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

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.

Lager Skizze

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

Lager Variablen

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 :


Home Impressum Datenschutz