-> Hier kostenlos registrieren
Hallo,
Ich habe folgendes Problem:
Ich habe ein Rundtisch mit 12 Einheiten, welche bei Bedarf mehrfach bearbeitet werden müssen.
Es gibt eine Bearbeitungsstation. Wenn das Werkstück an dieser ankommt, soll ein Rezept, welches aus 4 Komponenten besteht eingegeben werden:
- Länge // Real
- Bearbeitungsart_1 // Bool (immer auszuführen)
- Bearbeitungsart_2 // Bool
- Bearbeitungsart_3 // Bool
Direkt beim ersten erreichen der Bearbeitungsstation soll Bearbeitungsart_1 ausgeführt werden. Danach wird der Takt fortgesetzt, weil das Werkstück in einer Trockenstrecke kühlen muss. Wenn das Werkstück wieder bei der Bearbeitungsstation ankommt, soll geprüft werden, ob noch die Bearbeitungsart_2 durchgeführt werden muss. Falls ja, wird diese durchgeführt und es geht wieder in Trockenstrecke. Das gleiche nun für die dritte Bearbeitungsart. Falls ein Werkstück z.B. nach der 1. Bearbeitung fertig ist, kann dieses schon entnommen werden und der Platz ist wieder frei für ein anderes. Es können auch ganz unterschiedliche Werkstücke aufeinander folgen.
Mein Ansatz ist das klassische Schieberegister für die 12 Einheiten, ich finde aber keine Lösung für das überspringen (falls das Werkstück noch weiter bearbeitet werden muss) und für den Anfang von vorne, da das Schieberegister ja die ersten Werte wieder überschreibt, wenn es bei Platz 12 angelangt ist (das Werkstück kommt ja erneut an und soll nur weiter bearbeitet werden, nicht neu angelegt.). Das Werkstück benötigt ja vermutlich eine Art "Fleck" oder Kennzeichnung, wonach dann alles übersprungen wird aber trotzdem weitergeschoben wird o.ä.
Vielleicht könnt Ihr mir weiterhelfen, mein Ansatz sieht so aus:
Ich habe folgendes Problem:
Ich habe ein Rundtisch mit 12 Einheiten, welche bei Bedarf mehrfach bearbeitet werden müssen.
Es gibt eine Bearbeitungsstation. Wenn das Werkstück an dieser ankommt, soll ein Rezept, welches aus 4 Komponenten besteht eingegeben werden:
- Länge // Real
- Bearbeitungsart_1 // Bool (immer auszuführen)
- Bearbeitungsart_2 // Bool
- Bearbeitungsart_3 // Bool
Direkt beim ersten erreichen der Bearbeitungsstation soll Bearbeitungsart_1 ausgeführt werden. Danach wird der Takt fortgesetzt, weil das Werkstück in einer Trockenstrecke kühlen muss. Wenn das Werkstück wieder bei der Bearbeitungsstation ankommt, soll geprüft werden, ob noch die Bearbeitungsart_2 durchgeführt werden muss. Falls ja, wird diese durchgeführt und es geht wieder in Trockenstrecke. Das gleiche nun für die dritte Bearbeitungsart. Falls ein Werkstück z.B. nach der 1. Bearbeitung fertig ist, kann dieses schon entnommen werden und der Platz ist wieder frei für ein anderes. Es können auch ganz unterschiedliche Werkstücke aufeinander folgen.
Mein Ansatz ist das klassische Schieberegister für die 12 Einheiten, ich finde aber keine Lösung für das überspringen (falls das Werkstück noch weiter bearbeitet werden muss) und für den Anfang von vorne, da das Schieberegister ja die ersten Werte wieder überschreibt, wenn es bei Platz 12 angelangt ist (das Werkstück kommt ja erneut an und soll nur weiter bearbeitet werden, nicht neu angelegt.). Das Werkstück benötigt ja vermutlich eine Art "Fleck" oder Kennzeichnung, wonach dann alles übersprungen wird aber trotzdem weitergeschoben wird o.ä.
Vielleicht könnt Ihr mir weiterhelfen, mein Ansatz sieht so aus:
Code:
Input
Schiebetakt Bool
Rezept Struct
Länge Real
Bearbeitungsart_1 Bool
Bearbeitungsart_2 Bool
Bearbeitungsart_3 Bool
Output
Parameter_Aktuell_Bearbeitung Struct
Länge Real
Bearbeitungsart_1 Bool
Bearbeitungsart_2 Bool
Bearbeitungsart_3 Bool
Static
Stationen Array[1..12] of Struct
R_TRIG_Schiebetakt R_TRIG
Index Int
// Flanke Schiebetakt
#R_TRIG_Schiebetakt(CLK:=#Schiebetakt);
// Wenn Schiebetakt und Registerplatz frei und Kern in Spritzstation
IF #R_TRIG_Schiebetakt.Q
THEN
// for Schleife
FOR #Index := 12 TO 2 BY -1 DO
// Registerplatz Platz 12 bis Platz 2 mit den Daten des vorherigen Platzes beschreiben
#Stationen[#Index] := #Stationen[#Index - 1];
END_FOR;
// Wenn nicht Bearbeitungsart 1,2 oder 3 dann
IF
(NOT #Rezept.Bearbeitungsart_1 OR NOT #Rezept.Bearbeitungsart_2 OR NOT #Rezept.Bearbeitungsart_3)
THEN
// Registerplatz 1 mit aktuellen Daten beschreiben
#Stationen[1] := #Rezept;
END_IF;
END_IF;
// Die Parameter in die aktuelle Bearbeitung transferieren
#Parameter_Aktuell_Bearbeitung := #Stationen[1];