Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Datenerfassen/auslesen mittels ARRAYS

mskippi
2006-12-06
2006-12-17
  • mskippi - 2006-12-06

    Hallo zusammen,

    für ein Studienprojekt soll ich eine Lösung mittels Arrays in St verfassen.

    Habe nur leider noch nie mit Arrays gearbeitet.

    Es geht um Folgendes.

    Verschiedene Teile werden einem Prozess zugeführt,an verschiedenen Erkennungspunkten nach Lage und Art des Materials erfasst und an insg. 3 Sortierstationen ausgeworfen.

    Wie kann ich die Materialeigenschaften nacheinander in ein Array schreiben und nach der Sortierung wieder löschen? Insgesamt können 6 Teile gleichzeitig im Umlauf sein.

    Über Eure Hilfe würde ich mich sehr freuen

    Gruß

    Mskippi

     
  • Denkes - 2006-12-06

    Hallo mskippi

    zunächst zum Verständnis:

    Stell dir vor, du hättest einen Apothekerschrank mit vielen Schubkästen. Diese sind in Reihen und Spalten angeordnet. Wenn du nun in das Fach [3,2] eine Information legst, kannst du sie auch jederzeit dort wieder finden, denn die "Adresse" ist eindeutig. Ob du erst die Reihennummer und dann die Spalte adressierst oder umgekehrt legt der Programmierer fest.

    Eine an sich sehr gute Erklärung findest du in der CoDeSys-Hilfe unter "ARRAY".

    Bei deinem Problem wäre zu klären, welche Informationen du speichern musst, denn in einem ARRAY sind alle Elemente vom gleichen Typ. Man kann aber natürlich auch mehrere ARRAYS mit unterschiedlichen Typen oder aber auch mit selbst definierten Strukturen anlegen. (Das ist aber schon etwas für Fortgeschrittene)

    Ansonsten stell deine Aufgabe mal etwas genauer vor. Ohne dir die Projektarbeit abzunehmen ist ein kleiner Hinweis manchmal sehr hilfreich

    In diesem Sinne viel Erfolg

    Norbert

     
  • mskippi - 2006-12-07

    Hallo Denkens,

    vielen Dank für die schnelle Antwort. Das mit dem Schubladenprinzip habe ich verstanden, nur wie dich die Information dort ablege, zur richtigen Zeit abrufe und lösche ist mir nicht klar.

    Hier der Ablauf:

    Teile werden aus einem Magazin entnommen und weiter transportiert.

    1.Station: Erkennung der Lage -> Rückgabewert BOOL.

    Weitertransport zur Station2

    1. Station: Erkennung Metall/nicht Metall -> Rückgabewert BOOL.

    Weitertransport zur Station3

    1. Station: Erkennung hell/dunkel ->Rückgabewert BOOL.

    Weitertransport zur Ablage

    Die 3 Ablageposition sind nacheinander angeordnet. Die Teile passieren schrittweise die Positionen und sollen bei entsprechender Eigenschaft ausgeschoben werden. (Bei falscher Lage wird das Teil an allen Ablagepositionen vorbei geführt und fällt in einen Auffangbehäter)

    Wichtig vielleicht noch: Nachdem die Eigenschaften eines Teils erfasst wurden, wir erst zur Ablageposition 1 weitertransportiert bevor ein neues Teil aus dem Magazin der Erkennung zugeführt wird.

    Ich muss nun die Materialinformation nacheinander in ein oder mehrere Array(s) schreiben, und nach dem Ausschieben an den passenden Ablagepositionen das entsprechende Array löschen.

    Nach dem Auschieben an den 3 Ablagepositionen können jeweils nur 2 Teile auf den Abtranport warten. Das ein Teil abgeholt wurde, wird durch eine nachdolgende Anlage durch ein Boolsches Signal signalisiert.

    Ich wäre dankbar über jede Hilfe oder Hinweise darüber wo ich weitere Informationen zum programmieren mit CodeSys erhalten kann. Das Handbuch zur Progammierung gibt leider für Anfänger nicht soviel her.

    Gruß

    Markus

     
  • ljtequila - 2006-12-07

    Servus,

    hab Deine Aufgabenstellung gelesen und fühle mich stark an mein SPS-Labor errinnert, wo wir so eine ähnliche Aufgabe mit S7 lösen mussten.

    Wo machst Du die Studienarbeit?

    Zum Verständnis: Ich nehme an, Du sollst das Array als Datenspeicher nutzen. Da du sagst, dass Du max. 6 Teile hast wäre die Grenze damit schonmal geklärt:

    Var

    Buffer: Array[0..6] of <datentyp>;</datentyp>

    End_Var

    Welchen Datentyp Du jetzt nutzt, ist Geschmackssache. Da gibt es viele Möglichkeiten (z.b. Struct). Zum Anfang würde ich die Eigenschaften Bitcodiert (Lage=Bit0,Metal=Bit1,usw.) speichern, d.h. den Datentyp <byte> wählen.</byte>

    Var

    arBuffer: Array[0..6] of Byte;

    End_Var

    Jetzt brauchst Du eine indexvariable (Integer) mit der Du auf die Felder zugreifst:

    Var

    arBuffer: Array[0..6] of Byte;

    nIndex1: int;

    End_Var

    Im Programm kannst Du nun über folgende Syntax auf die Array-Elemente zugreifen und dort die Eigenschaften speichern:

    arBuffer[nIndex1].0:=<lage>;</lage>

    arBuffer[nIndex1].1:=<ist metall="">;</ist>

    Wie Du siehst musst Du jetzt <nindex1> mit der Anzahl der erkannten Teile verknüpfen, z.b. über einen Zähler.</nindex1>

    Wenn jetzt die Teile an der Auswurfposition erkannt werden, musst Du dort wieder mit einer anderen Indexvar <nindex2> die Informationen abrufen. </nindex2>

    So, zum Anfang sollte das mal reichen.. (Du weißt ja: Nicht zur Strafe, sondern zur Übung ). Falls Du noch Fragen hast, meld Dich!

    Gruß

     
  • Denkes - 2006-12-08

    Hallo mskippi

    ich habe dir mal einige Erläuterungen zu deinem Problem zusammengestellt. Schicke mir mal deine e-Mail-Adresse als private Nachricht. Dann kann ich dir die Ausarbeitung zumailen. Als private Nachricht über das Forum geht das nicht.

    Gruß Norbert

     
  • mskippi - 2006-12-12

    Hallo Denkes,

    danke für Deine Hilfe, mit Deinem Beispiel und der Erklärung von ljtequila bin ich ordentlich weiter gekommen. Morgen werden die Karten für die Array-Auswertung neu gelegt.

    Dein Hinweis für die Ablaufsteuerung Hilft nicht ganz soviel.

    Kleine Erläuterung des Ablaufes.

    1. Teile aus Magazin ausschieben

    2. Schieber zurück

    3. Greifarm ausfahren

    4. Hubzylinder absenken

    5. Venturidüse ein

    6. Hubzylinder anheben

    7. Greifarm einfahren und bis zur Position Mat.-Erkennung schwenken

    8. Greifarm ausfahren

    9. Hubzylinder absenken (hier Sensor für Lageerkennung)

    10. Hubzylinder anheben

    11. Weiterschwenken bis Pos-Bandablage (Hier Transportband mit

      Sensoren für Materialerkennung und Transport zur den

      Auschiebepositionen)

    12. Hubzylinder absenken

    13. Venturidüse aus

    14. Hubzylinder anheben Greifarm einfahren und zur Pos-Magazin

      schwenken.

    Was funktioniert:

    Der Ablauf wird über einen separaten Baustein "Betriebssteuerung" bedient. Dabei funktionieren die Betriebsarten Automatik-Einzelablauf und Automatik-Dauerbetrieb fehlerfrei.

    Probleme gibt es in der Betriebsart Tippbetrieb. Hier soll durch das Tippen auf eine Freigabetaste jeweils um einen Schritt weitergeschaltet werden. Das funktioniert in den Ersten Schritten auch. Nun schwenkt der Greifarm stoppt aber nicht den Positionen Mat-Erkennung, Bandablage bzw beim Rückschwenken nicht an der Position Magazin.

    Ich habe dieses Problem in einer Siemenssteuerung (FUB) durch ein Abbruchsignal und einem bedingten Baustein Ende gelöst.

    Hier mit CodeSys (AS) bekomme ich das Problem nicht in Griff.

    Die Lösung ist wahrscheinlich einfach, ich sehe nur vor lauter Wald die Bäume nicht mehr. Habe das Problem erstmal zur Seite gelegt und werde mich mehr um das Gesamtprojekt kümmern.

    Hilfe wird gerne angenommen!!

    Gruß mskippi

     
  • mskippi - 2006-12-17

    DANKE!

    Dank an Alle, die mir hier geholfen haben.

    Das ARRAY steht und meine Sortierstation schiebt die Teile an den richtigen Positionen aus.

    War gar nicht so schwer (nachdem ich die Arrays verstanden hatte).

    Gruß

    mskippi

     

Log in to post a comment.