TIA S7-1500 Regal mit Array?!

Synegate

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich habe ein kleines Modell eines Hochregallagers (7 Fächer breit und 4 Etagen hoch) mit einer S7-1500 und einem Touch-Panel und muss mir nun etwas einfallen lassen, sodass in jedem Fach Informationen hinterlegt werden können (z.B. Produktname, Produktionsnummer, Lagerdatum, etc...). Die Fächer lassen sich jeweils per Touch-Panel anfahren und durch einen Zylinder kann ein "Klotz" "eingelagert oder ausgelagert" werden.
Ich habe was von UDT's bzw Arrays gehört aber kann damit leider nicht viel anfangen.
Meine Kenntnisse mit TIA bzw allgemeine S7-Programmierung halten sich leider in Grenzen und bin nach Tage langem recherchieren und lesen langsam am Verzweifeln.
Kann mir evtl jemand bei dem Problem weiterhelfen oder Tipps geben, wie ich das anzupacken habe? Würd mich freuen wenn sich jemand melden würde :)
Falls Infos fehlen oder ich es etwas detaillierter Erklären soll, einfach melden.

Grüße
 
IM DB
Fach Array[1..7] of Struct
Etagen Array[1..4] of UDT1

PLC Datentyp
UDT1
Produktname Sting[10]
Produktionsnummer DInt
Lagerdatum Date_and_Time


Grüße
wiese
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hätte es etwas anders aufgebaut.

Im DB hätte ich ein mehrdimensionales Array of UDT gemacht

Code:
Regalplatz Array[1..4,1..7] OF UDT1
Bereistellungsplatz UDT1
Greifer UDT1

Auf das Array kann dann so zugegriffen werden

Regalplatz[3,2].Produktionsnummer

oder Indirekt Regalplatz[#Etage,#Fach].Produktionsnummer

Außerdem habe ich noch zwei Strukturen hinzugefügt, da ich denke, dass Du diese ebenfalls hast.

Ein Bereitstellungsplatz, auf dem neue Teile ein, oder alte Ausgeschleust werden.
"nur" auf diesem Platz können die Daten über die HMI angepasst werden.
Wenn nun das HRL das Werkstück abholt, könnte es so aussehen:

Code:
IF Einschleusen THEN
Greifer := Bereitstellungsplatz;

Wird in den Platz abgelegt, etwa so:

Code:
Regalplatz[#Etage,#Fach] := Greifer;

Dann kann man Arrays noch sehr einfach durchsuchen,
um z.B. den nächsten freien Platz zu finden

Code:
// Variablen initialisieren
#Etage := 0;
#Fach := 0;

// Nach Leerplatz durchsuchen
for i:= 1 to 4 do
  for j := 1 to 7 do
    
    // Wenn ein Platz ohne Produktionsnummer gefunden wurde
    if (Regalplatz[i,j].Produktionsnummer = 0) then
      // Position merken
      #Etage := i;
      #Fach   := j;
      // Innere Schleife verlassen
      Exit;
    end_if;
  endfor;

  // Aeussere Schleife verlassen, wenn
  // ein Platz gefunden wurde
  if #Etage > 0 OR #Fach > 0 then
    Exit;
  end_if;
end_for;

So, ich hoffe das ganze haut Dich nicht gleich um, ich könnte noch weiter ins Detail gehen... aber mein Ziel war eigentlich einen kleinen Ansatz zu liefern, jetzt ist es schon fast fertig.

Grüße

Marcel
 
Vielen Dank für eure Rückmeldungen! Muss mich jetzt erstmal reindenken und schauen wie das ganze funktioniert was ihr da vorgeschlagen habt :)
@marcel einen Bereitstellungsplatz habe ich nicht. Der "Klotz" wird von Hand auf den Greifer bzw den Zylinder gelegt der den dann einlagert bzw wieder abholt.

Grüße
 
Zurück
Oben