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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
Station: Erkennung Metall/nicht Metall -> Rückgabewert BOOL.
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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ß
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
Teile aus Magazin ausschieben
Schieber zurück
Greifarm ausfahren
Hubzylinder absenken
Venturidüse ein
Hubzylinder anheben
Greifarm einfahren und bis zur Position Mat.-Erkennung schwenken
Greifarm ausfahren
Hubzylinder absenken (hier Sensor für Lageerkennung)
Hubzylinder anheben
Weiterschwenken bis Pos-Bandablage (Hier Transportband mit
Sensoren für Materialerkennung und Transport zur den
Auschiebepositionen)
Hubzylinder absenken
Venturidüse aus
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
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
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
Weitertransport zur Station3
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
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ß
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
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.
Teile aus Magazin ausschieben
Schieber zurück
Greifarm ausfahren
Hubzylinder absenken
Venturidüse ein
Hubzylinder anheben
Greifarm einfahren und bis zur Position Mat.-Erkennung schwenken
Greifarm ausfahren
Hubzylinder absenken (hier Sensor für Lageerkennung)
Hubzylinder anheben
Weiterschwenken bis Pos-Bandablage (Hier Transportband mit
Sensoren für Materialerkennung und Transport zur den
Auschiebepositionen)
Hubzylinder absenken
Venturidüse aus
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
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