godi
Level-1
- Beiträge
- 1.460
- Reaktionspunkte
- 185
-> Hier kostenlos registrieren
Guten Morgen!
Ich bin gerade dabei das ich eine Stapelanlage Programmiere.
Ich habe mir gedacht ich mache das über eine Schrittkette mit SPL.
Ein Grundkonzept habe ich schon Programmiert. (ein paar Sachen fehlen natürlich noch)
Jetzt würde mich Interessieren ob da mein Grundgedanke der Schrittkette in Ordnung ist. (Ich weiß in letzter Zeit wurde schon öfters über Schrittketten geredet trozdem würde mich interessieren ob ich da am richtigen Weg bin)
Im ersten Netzwerk will ich für die Schritte eine Freigabe machen so dass die Schritte im Automatikbetrieb einzeln abgefahren werden können. Habe mir das so gedacht wenn die Funktion nicht angewählt ist dann ist die Freigabe immer True ansonsten würde ich das mit einer Flanke weiterschalten.
Der erste Schritt wird von einem anderem Baustein angewählt. Wenn der Automatikbetrieb eine Positive Flanke aufweißt dann wird in die Schrittkette der Wert 1 Transferiert. Bei Handbetrieb wird der Wert auf 0 gesetzt.
Hier der Code
Ich bin für jede hilfe dankbar!
godi
Ich bin gerade dabei das ich eine Stapelanlage Programmiere.
Ich habe mir gedacht ich mache das über eine Schrittkette mit SPL.
Ein Grundkonzept habe ich schon Programmiert. (ein paar Sachen fehlen natürlich noch)
Jetzt würde mich Interessieren ob da mein Grundgedanke der Schrittkette in Ordnung ist. (Ich weiß in letzter Zeit wurde schon öfters über Schrittketten geredet trozdem würde mich interessieren ob ich da am richtigen Weg bin)
Im ersten Netzwerk will ich für die Schritte eine Freigabe machen so dass die Schritte im Automatikbetrieb einzeln abgefahren werden können. Habe mir das so gedacht wenn die Funktion nicht angewählt ist dann ist die Freigabe immer True ansonsten würde ich das mit einer Flanke weiterschalten.
Der erste Schritt wird von einem anderem Baustein angewählt. Wenn der Automatikbetrieb eine Positive Flanke aufweißt dann wird in die Schrittkette der Wert 1 Transferiert. Bei Handbetrieb wird der Wert auf 0 gesetzt.
Hier der Code
Code:
FUNCTION "SK Stapelanlage" : VOID
TITLE =
//
VERSION : 0.1
VAR_TEMP
Freigabe_Schritte : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =Freigabe für einzelne Schritte
SET ;
U M 1.0; //Testmerker
= #Freigabe_Schritte;
NETWORK
TITLE =Sprungleiste für Schrittkette
L "DB_Stapelanlage_neu".Schrittkette;
SPL next;
SPA end; //Bei Schrittkette 0 springe zu end
SPA SK01; //Bei Schrittkette 1 springe zu Schritt 1
SPA SK02; //Bei Schrittkette 2 springe zu Schritt 2
SPA SK03; //Bei Schrittkette 3 springe zu Schritt 3
SPA SK04; //Bei Schrittkette 4 springe zu Schritt 4
SPA SK05; //Bei Schrittkette 5 springe zu Schritt 5
SPA SK06; //Bei Schrittkette 6 springe zu Schritt 6
SPA SK07; //Bei Schrittkette 7 springe zu Schritt 7
SPA SK08; //Bei Schrittkette 8 springe zu Schritt 8
SPA SK09; //Bei Schrittkette 9 springe zu Schritt 9
SPA SK10; //Bei Schrittkette 10 springe zu Schritt 10
SPA SK11; //Bei Schrittkette 11 springe zu Schritt 11
SPA SK12; //Bei Schrittkette 12 springe zu Schritt 12
next: SPA end;
NETWORK
TITLE =SK01 - Referenz Fahren
SK01: UN "DB_Stapelanlage_neu".Referenzposition;
= "DB_Stapelanlage_neu".Fahre_Referenz;
//Transition
U "DB_Stapelanlage_neu".Referenzposition;
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPB SK;
BEA ;
NETWORK
TITLE =SK02 - Grundposition anfordern
SK02: SET ;
= "DB_Stapelanlage_neu".Grundposition_anfordern;
//Transition
U "Daten Roboter".Neue_Daten_geladen;
L S5T#2S;
SS "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
R "DB_Stapelanlage_neu".Grundposition_anfordern;
SPB SK;
BEA ;
NETWORK
TITLE =SK03 - Grundposition anfahren Achse Z
SK03: UN "Achse Z endl. oben";
= "DB_Stapelanlage_neu".Freigabe_Achse_Z_Grundp;
//Transition
U "Achse Z endl. oben";
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPB SK;
BEA ;
NETWORK
TITLE =SK04 - Grundposition anfahren Achse X / Y und Wender
SK04: NOP 0;
// Achse X
U "Achse Z endl. oben";
UN "Verz. E7.3";
= "DB_Stapelanlage_neu".Freigabe_Achse_X_Grundp;
// Achse Y
U "Achse Z endl. oben";
UN "Achse Y Grundst.";
= "DB_Stapelanlage_neu".Freigabe_Achse_Y_Grundp;
// Wender
U "Achse Z endl. oben";
UN "Wender Grundstellung";
= "DB_Stapelanlage_neu".Freigabe_Wender_Grundp;
//Transition
U "Verz. E7.3";
U "Achse Y Grundst.";
U "Wender Grundstellung";
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPB SK;
BEA ;
NETWORK
TITLE =SK05 - Abholposition anfahren
SK05: U "Abnahmepos. Stapelung";
UN "Achse Z Abnahmepos";
U "Wender Grundstellung";
= "DB_Stapelanlage_neu".Paket_Abholen;
//Transition
U "Achse Z Abnahmepos";
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPB SK;
BEA ;
NETWORK
TITLE =SK06 - Paketgreifer Schließen
SK06: U "Achse Z Abnahmepos";
S "DB_Stapelanlage_neu".Paketgreifer_schliessen;
R "DB_Stapelanlage_neu".Paketgreifer_oeffnen;
//Transition
U "Greifer zu Stapelanl.";
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPB SK;
BEA ;
NETWORK
TITLE =SK07 - Achse Z in die Grundposition mit Paket
SK07: UN "Achse Z endl. oben";
U "Greifer zu Stapelanl.";
= "DB_Stapelanlage_neu".Freigabe_Achse_Z_Grundp;
//Transition
U "Achse Z endl. oben";
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPB SK;
BEA ;
NETWORK
TITLE =SK08 - Lade Daten für Ablageposition
SK08: U "Greifer zu Stapelanl.";
= "DB_Stapelanlage_neu".Ablageposition_anfordern;
//Transition
U "Daten Roboter".Neue_Daten_geladen;
L S5T#2S;
SS "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
R "DB_Stapelanlage_neu".Grundposition_anfordern;
SPB SK;
BEA ;
NETWORK
TITLE =SK09 - Ablageposition anfahren Achse X / Y und Wenden
SK09: NOP 0;
// Achse X
U "Achse Z endl. oben";
U "Greifer zu Stapelanl.";
//+++++++++++++ Un Position X erreicht ++++++++++++++++++++++++++
= "DB_Stapelanlage_neu".Freigabe_Achse_X_Ablagep;
// Achse Y
U "Achse Z endl. oben";
U "Greifer zu Stapelanl.";
//+++++++++++++ Un Position Y erreicht ++++++++++++++++++++++++++
= "DB_Stapelanlage_neu".Freigabe_Achse_Y_Ablagep;
// Wender
U "Achse Z endl. oben";
= "DB_Stapelanlage_neu".Freigabe_Wender_Ablagep;
//Transition
//+++++++++++++ U Position X und Y und Wender erreicht ++++++++++++++++++++++++++
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPB SK;
BEA ;
NETWORK
TITLE =SK10 - Ablageposition anfahren Achse Z
SK10: NOP 0;
//+++++++++++++ U Position X und Y erreicht ++++++++++++++++++++++++++
//+++++++++++++ Un Position Z erreicht ++++++++++++++++++++++++++
= "DB_Stapelanlage_neu".Freigabe_Achse_Z_Ablagep;
//Transition
//+++++++++++++ U Position Z erreicht ++++++++++++++++++++++++++
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPB SK;
BEA ;
NETWORK
TITLE =SK11 - Paket Ablegen
SK11: NOP 0;
//+++++++++++++ U Position X, Y und Z erreicht ++++++++++++++++++++++++++
UN "Greifer offen Stapelanl.";
S "DB_Stapelanlage_neu".Paketgreifer_oeffnen;
R "DB_Stapelanlage_neu".Paketgreifer_schliessen;
//Transition
U "Greifer offen Stapelanl.";
L S5T#2S;
SE "SK-Verzögerung";
U "SK-Verzögerung";
U #Freigabe_Schritte;
SPBN end;
L 2;
T "DB_Stapelanlage_neu".Schrittkette;
SET ;
R "SK-Verzögerung";
//+++++++++++++ R Position X, Y und Z erreicht ++++++++++++++++++++++++++
BEA ;
NETWORK
TITLE =SK12
SK12: NOP 0;
BEA ;
NETWORK
TITLE =Ende
end: BEA ;
NETWORK
TITLE =Zähle einen Schritt vorwärts
SK: L "DB_Stapelanlage_neu".Schrittkette;
L 1;
+I ;
T "DB_Stapelanlage_neu".Schrittkette;
SET ;
R "SK-Verzögerung";
END_FUNCTION
Ich bin für jede hilfe dankbar!
godi