Hochregallager programmieren - aber wie ?

Elektrobody

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS-Fans,
ich hab Probleme, folgende Aufgabe zu lösen:
Ein Hochregallager hat 4 Ebenen mit jeweils 7 Lagerplätzen. Es hat also insgesamt 28 Lagerplätze. Für die Speicherung der Informationen zur Lagerbelegung soll hier ein Datenbaustein angelegt werden. Jedem der Lagerplätzen wird eine Nummer zugeordnet. Die laufende Nummer beginnt beim unteren rechten Lagerplatz und endet beim oberen rechten Lagerplatz. Für jedes Lagerfach soll in dem Datenbaustein ein Speicherplatz mit 16 Bit vom Format INT zur Verfügung stehen. Hier wird für die Belegung jedes Lagerplatzes folgende Zuordnung festgelegt:
0 == leer; 1 == besetzt
Wenn nun ein entsprechendes Teil auf einem Lagerplatz liegt, so steht der jeweilige Wert im Datenbaustein. In einer Standardfunktion soll nun bei einer steigenden Flanke ein Taster BD_SH6 vom Lagerplatz 1 an steigend der erste leere Lagerplatz gesucht werden und als OUT -Variable zur Verfügung gestellt.
Außerdem sollen die Positionswerte für ein Anfahren des ermittelten Lagerplatzes von der Endlage links unten ausgegeben werden. Diese sollen passend für die Zähler im BCD-Code vorliegen.
Für die Positionierung werden bei jedem Lagerplatz horizontal und vertikal Impulse gezählt. Lagerplatz 17 hat beispielsweise für eine Positionierung von links unten aus 5 Impulse und 3 Impulse.
Zuordnungsliste:
Symbol Adresse Kommentar
BD_SH6 E 1.6 Bedienpult weiß SH6
LP_Leer MW 10 Erster LP leer
Pos_ver_leer MW 12 Erster LP vertikal leer
Pos_hor_leer MW 14 Erster LP horizontal leer
M_Flanke_SH6 M 10.0 Flankenmerker SH6

Aufgabe:
- Projekt ABC erstellen
- Datenbaustein DB20 (z.B.) mit 28 LP für Werte vom Format INT anlegen
(ARRAY dazu nutzen)
- Vorbelegung in die Aktualwerte des Datenbausteins schreiben: die zwei unteren Ebenen sind besetzt.
- Standardfunktion FC xx anlegen und ein Programm in AWL erstellen:
Von LP 1 an aufsteigend wird bei einer steigenden Flanke am Taster BD_SH6 der erste leere LP gesucht und
die Nummer dieses LP-Faches als OUT- Variable zur Verfügung gestellt.
- Außerdem sollen die Positionswerte für ein Anfahren des ersten leeren LP von der Endlage links unten
ermittelt werden. Diese sollen passend für die Zähler an zwei OUT-Variablen im BCD-Code vorliegen.
- Da in diesem Standardbaustein keine globalen Variablen vorkommen dürfen, soll auch die Nummer des
durchsuchten Datenbausteins dem F xx als IN-Variable übergeben werden. Die Adressierung innerhalb des FC
erfolgt nur dann am besten, wenn der Datenbaustein mit dem Befehl AUF DB20 zuerst geöffnet und dann auf
dessen Daten zugegriffen wird.
- Fc xx mit den oben angegebenen Merkern beschalten und mit Hilfe des Tasters BD_SH6 im OB12
aufrufen

Ich habe schon mehrere Tage dieses Programm in SIMATIC Step S7 herumprobiert, es ist mir jedoch bisher bis jetzt nicht gelungen, eine vernünftige Lösung zu finden.
Ich wäre froh, wenn einer von Ihnen mir eine passende Lösung anbieten könnte. Verschiedene Lösungsmöglichkeiten sind mir natürlich auch hier herzlich willkommen.

Ich bin gespannt auf Ihre Antwort.

Gruß Elektrobody
 
Zuletzt bearbeitet:
Hallo,
wenn dir das reicht werde ich mich heute Abend mal mit der Sache auseinandersetzen.
Wäre schön, wenn du zu den Ziel-Positionen noch nähere Angaben machen könntest (wie groß ist der Pos.Wert als Zahl) - ich habe das so verstanden, dass du die Ziel-Pos. für den nächsten Lagerplatz auch gleich geliefert bekommen möchtest.

So nebenher - merkst du dir nicht, was du in einen Lagerplatz gepackt hast (Code-Nummer für Datensatz oder so ...) ?
 
Zuletzt bearbeitet:
Hallo,
wenn dir das reicht werde ich mich heute Abend mal mit der Sache auseinandersetzen.
Wäre schön, wenn du zu den Ziel-Positionen noch nähere Angaben machen könntest (wie groß ist der Pos.Wert als Zahl) - ich habe das so verstanden, dass du die Ziel-Pos. für den nächsten Lagerplatz auch gleich geliefert bekommen möchtest.

So nebenher - merkst du dir nicht, was du in einen Lagerplatz gepackt hast (Code-Nummer für Datensatz oder so ...) ?


Hallo Larry Laffer,
Positionswerte der Lagerplätze sind selbst die Nummer, die den LP zugewiesen sind. Wie schon gesagt, sind die zwei unteren Ebenen mit "1" besetzt. das heißt Die Lp Nr. 1 bis 14 sind mit "1" (Code) gepackt. Die Aufgabenstellung besagt, dass der erste leere Lagerplatz mit entsprechender Nummer ermittelt werden soll. In diesem Fall soll der LP Nr. 15 mit vertikaler Position 3 und horizontaler Position 5 sein.
Hinweis:
Die laufende Nummer beginnt vom ersten unteren rechten LP aus.
Die Impulse für eine Positionierung werden vom ersten linken LP aus gezählt.
Meine Frage ist auch: Siehe oben Zitat in meinem Beitrag: "..... sollen passend für die Zähler im BCD-Code vorliegen.") Heißt das, dass die zwei Zähler tatsächlich hier eingesetzt werden sollen? oder sollte dies doch nicht der Fall sein, sollte das Programm so gestaltet werden, als wären die Zähler da.

Gruß Elektrobody
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein Hochregallager hat 4 Ebenen mit jeweils 7 Lagerplätzen. Es hat also insgesamt 28 Lagerplätze. Für die Speicherung der Informationen zur Lagerbelegung soll hier ein Datenbaustein angelegt werden. Jedem der Lagerplätzen wird eine Nummer zugeordnet. Die laufende Nummer beginnt beim unteren rechten Lagerplatz und endet beim oberen rechten Lagerplatz.

Ist die Nummerierung der Lagerplätze so richtig? Sonst bitte im Word-Dokument ändern. :confused:

Gruß Kai
 

Anhänge

  • Hochregallager.jpg
    Hochregallager.jpg
    53,8 KB · Aufrufe: 186
  • Hochregallager.doc
    22,5 KB · Aufrufe: 157
Außerdem sollen die Positionswerte für ein Anfahren des ermittelten Lagerplatzes von der Endlage links unten ausgegeben werden. Diese sollen passend für die Zähler im BCD-Code vorliegen.
Für die Positionierung werden bei jedem Lagerplatz horizontal und vertikal Impulse gezählt. Lagerplatz 17 hat beispielsweise für eine Positionierung von links unten aus 7 Impulse und 3 Impulse.

Wenn die Nummerierung so richtig ist wie in meinem obigen Bild, bräuchte der LP 17 bei einer Positionierung von unten links aus nicht 5 Impulse nach rechts und 3 Impulse nach oben? :confused:

Gruß Kai
 
Die laufende Nummer beginnt vom ersten unteren rechten LP aus.
Die Impulse für eine Positionierung werden vom ersten linken LP aus gezählt.
Meine Frage ist auch: Siehe oben Zitat in meinem Beitrag: "..... sollen passend für die Zähler im BCD-Code vorliegen.") Heißt das, dass die zwei Zähler tatsächlich hier eingesetzt werden sollen? oder sollte dies doch nicht der Fall sein, sollte das Programm so gestaltet werden, als wären die Zähler da.

Ich verstehe das so, dass Du nur einen FC erstellst, der die Nummer des ersten freien LP sowie die Positionswerte (Impulse nach rechts und Impulse nach oben als BCD-Wert) ausgibt.

Die Zähler werden erst für das Anfahren des freien LP benötigt, und da Du das Anfahren hier nicht programmieren brauchst, brauchst Du auch keine Zähler. Du gibst mit den Positionswerten nur die Sollwerte für die Zähler als BCD-Wert vor.

Gruß Kai
 
Wenn die Nummerierung so richtig ist wie in meinem obigen Bild, bräuchte der LP 17 bei einer Positionierung von unten links aus nicht 5 Impulse nach rechts und 3 Impulse nach oben? :confused:

Gruß Kai

PARDON!!

Oben in der Aufgabenstellung habe ich mich leider vertippt:
Richtig soll es heißen:
Lagerplatz 17 hat beispielsweise für eine Positionierung von links unten aus 5 ( nicht 7 !)Impulse und 3 Impulse.

Gruß Elektrobody
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zuordnungsliste:
Symbol Adresse Kommentar
BD_SH6 E 1.6 Bedienpult weiß SH6
LP_Leer MW 10 Erster LP leer
Pos_ver_leer MW 12 Erster LP vertikal leer
Pos_hor_leer MW 14 Erster LP horizontal leer
M_Flanke_SH6 M 10.0 Flankenmerker SH6

Das geht so nicht, es gibt hier ein Überschneidung der Merkerbereiche.

Änderungsvorschlag: M_Flanke_SH6 M16.0

Gruß Kai
 
Hi

Ist eigentlich Ideal für die Programierung mit UDTs und SCL ;)


Habt ihr eich schon für eine Programmiersprache entschieden.
 
So, ich mal ein bisschen rumprogrammiert. Viel Spaß beim Ausprobieren. :cool:

Gruß Kai
 

Anhänge

  • Hochregallager.doc
    24,5 KB · Aufrufe: 107
  • OB1.pdf
    3,8 KB · Aufrufe: 137
  • FC20.pdf
    4,5 KB · Aufrufe: 146
  • DB20.pdf
    10,6 KB · Aufrufe: 120
  • Hochrega.zip
    201,7 KB · Aufrufe: 93
Anbei das geänderte Wort-Dokument
Gruß ELektrobody
Beim Abspeichern eines geänderten Word-Dokuments bleibt der Inhalt jedoch der gleiche wie vorher.
Die folgende Nummerierung der LP sieht wie folgt aus:
1. unterste Ebene:
Lp Nr. 1 ganz rechts -- LP Nr. 7 ganz links
2. Ebene:
Lp Nr. 8 ganz rechts -- LP Nr. 14 ganz links
3. Ebene:
Lp Nr. 15 ganz rechts -- LP Nr. 21 ganz links
4. oberste Ebene:
Lp Nr. 22 ganz rechts -- LP Nr. 28 ganz links

Gruß Elektrobody
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe das Programm an die neue Nummerierung angepasst.

Es wurden das Word-Dokument und der DB20 geändert.

Gruß Kai
 

Anhänge

  • Hochregallager.doc
    25,5 KB · Aufrufe: 67
  • OB1.pdf
    3,8 KB · Aufrufe: 43
  • FC20.pdf
    4,4 KB · Aufrufe: 61
  • DB20.pdf
    10,6 KB · Aufrufe: 64
  • Hochrega.zip
    201,6 KB · Aufrufe: 46
Hier noch eine weitere Lösungsmöglichkeit der Aufgabe. In dem neuen Programm wird mit 3 Zählern als Indizes gearbeitet, und die Anzahl der Impulse horizontal und Impulse vertikal werden nicht als DW in einem DB gespeichert, sondern im FC berechnet. :cool:

Gruß Kai
 

Anhänge

  • Hochregallager.doc
    25,5 KB · Aufrufe: 45
  • OB1.pdf
    3,5 KB · Aufrufe: 59
  • FC22.pdf
    4,4 KB · Aufrufe: 90
  • DB22.pdf
    4,6 KB · Aufrufe: 53
  • Hochrega.zip
    203,5 KB · Aufrufe: 56
Hier noch eine weitere Lösungsmöglichkeit der Aufgabe. In dem neuen Programm wird mit 3 Zählern als Indizes gearbeitet, und die Anzahl der Impulse horizontal und Impulse vertikal werden nicht als DW in einem DB gespeichert, sondern im FC berechnet. :cool:

Gruß Kai


Sag mal bekommst du eigentlich Geld dafür, oder hast du nur gerade nichts zu tun? ;) :ROFLMAO:
 
Zurück
Oben