TIA Variable Ablauf Reihenfolge Zylinderbewegungen - wie würdet ihr das umsetzen?

DennisBerger

Level-2
Beiträge
474
Reaktionspunkte
63
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich musste an einer Anlage 3-4 Zylinder inklusive Stellungsabfrage so programmieren, dass die Bewegungsreihenfolge frei über das Display oder eine csv datei passend zu der Artikelvariante veränderbar und einzugeben ist.

Also zb steht im Display / aus der csv datei gelesen im Eingabefeld:
Zylinder A: 1 (fährt dann zuerst)
Zylinder B: 2 (fährt somit als 2. wenn A Arbeitsstellung erreicht hat)
Zylinder C: 3 (als 3. wenn A und B in AS)
Zylinder D: 4 (als 4. wenn A, B und C in AS)

oder zb
Zylinder A: 3
Zylinder B: 1 (fährt als erstes)
Zylinder C: 2 (als zweites)
Zylinder D: 0
(bei 0 soll Zylinder in GS bleiben = deaktiviert)

oder zb fahren Zylinder A und B gleichzeitig und dann Zyl C
Zylinder A: 1
Zylinder B: 1
Zylinder C: 2 (fährt wenn A und B in AS)
Zylinder D: 3


Jeder Zylinder hat 2 Sensoren die AS oder GS abfragen und erst wenn der erste zu bewegende Zylinder AS erreicht hat, soll der 2. Zylinder fahren, wenn dieser AS erreicht hat soll der 3. Zylinder fahren. (oder es kann auch sein, dass 2 Zylinder gleichzeitig fahren sollen)
Steht eine 0 drin soll dieser Zylinder in GS bleiben, ist sozusagen deaktiviert.
edit:
sorry vergessen,
das ganze passiert nach dem Einlegen des Teils in die Anlage 1x,
also Teil einlegen, Schutzhaube fährt zu FB für Spannen/Entspannenablauf wird aufgerufen,
die Zylinder spannen dann in bestimmter Reihenfolge ein Teil ein.
nach dem Spannen läuft die Anlage den Ablauf durch und wenn fertig wird wieder in umgekehrter Reihenfolge der Zylinder entspannt, Schutz geöffnet und das teil entnommen..
das Spannen / Entspannen ist ein eigener FB der gestartet wird durch den FB "Autoablauf", der dann auf "Spannen fertig" Meldung wartet bzw "Entspannen fertig" für den Autoablauf FB
(je nach Artikelvariante braucht man andere Reihenfolge und mal mehr oder weniger Zylinder)

Ich hatte das mit einer Schrittkette und Netzwerken gebaut, leider sind die Netzwerke sehr gross geworden, weil ich immer in jedem NW vergleichen musste, welcher Zylinder welche Zahl bekommen hat (compare Zyl A = 1 oder =2 oder =3, Zyl B =1 oder =2 oder =3 usw) und dann für jede Möglichkeit welcher Zylinder fahren muss nochmal die Stellungen im nächsten Takt abfragen musste.
das ganze wurde dann noch recht unübersichtlich in FUP und dachte ich kann das mal vielleicht mit eurer Hilfe verbessern.

Wollte mal die erfahrenen Programmierer fragen, wie ihr so etwas umsetzen würdet, ich denke der eine oder andere von Euch hatte schon mal solch eine Vorgabe.
egal ob FUP/KOP/AWL oder SCL (bitte aber vorzugsweise kein Graph, da keine erfahrung damit)
Gerne auch nur mit 3 Zylinder anstatt 4.
Vielleicht hab ich mich auch in meiner Denkweise für die Umsetzung da zu sehr festgefahren und zu kompliziert gedacht.

danke und schönen 4. Adventssonntag an euch
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
sorry vergessen, hab es oben editiert und eingefügt:
das ganze passiert nach dem Einlegen des Teils in die Anlage 1x,
also Teil einlegen, Schutzhaube fährt zu und die Zylinder spannen in bestimmter Reihenfolge ein Teil ein.
nach dem Spannen läuft die Anlage den Ablauf durch und wenn fertig wird wieder in umgekehrter Reihenfolge der Zylinder entspannt, Schutz geöffnet und das teil entnommen..
(je nach Artikelvariante braucht man andere Reihenfolge und mal mehr oder weniger Zylinder)

das Spannen / Entspannen ist ein eigener FB der gestartet wird durch den Autoablauf und dann "Spannen fertig" meldet bzw "Entspannen fertig" für den Schrittketten FB "Autoablauf"
 
Zuletzt bearbeitet:
Betriebsarten weniger, eher als variable eingabe in einer CSV datei. (ebenfalls oben nun dazu editiert)
also theoretisch gibt es
alle Zylinder gleichzeitig, oder bestimmte Reihenfolge je nachdem was im Display bzw in der csv passend zum ausgewählten Artikel eingetragen wurde.
(siehe oben)

deshalb wird im FB "Autoaublauf" nach dem Schließen des Schutzes auch der Ablauf im FB "Spannen/Entspannen" gestartet und wenn fertig meldet geht es in der Schrittkette "Autoablauf" weiter.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde jedem Zylinder eine Wertigkeit vergeben und die gewünschte Ansteuerung für jeden Schritt als binär kodierte Nummer eingeben lassen, also wenn in einem Schritt der Zylinder 1 und der Zylinder 3 aktiv sein sollen, dann wäre für diesen Schritt im Rezept eine 5 einzugeben. Kein Zylinder wäre dann die 0 und somit "Programmende".
 
und wie machst du damit die Reihenfolge des Spannens und Abfrage der Sensoren GS und AS?
geht ja nicht nur darum, ob ein zylinder fahren soll, sondern eher darum wann in welcher Reihenfolge (inkl. abfrage ob Position erreicht)
so einfach ist das nicht. weil man so wie ich es gemacht hat, große Netzwerke mit Vergleichen und Schritten hat.
 
Ich denke, ich würde das in einer Art Schrittkette abhandeln.
Im Prinzip wie folgt:

Code:
CASE #N OF
       
    0:
        #A.Y := false;
        #B.Y := false;
        #C.Y := false;
        #D.Y := false;
        IF #A.GS AND
            #B.GS AND
            #C.GS AND
            #D.GS THEN
            #N := 1;
        END_IF;
       
    1:
        #A.Y := (#A.NR = 1);
        #B.Y := (#B.NR = 1);
        #C.Y := (#C.NR = 1);
        #D.Y := (#D.NR = 1);
        IF ((#A.Y AND #A.AS) OR (#A.NR <> 1)) AND
            ((#B.Y AND #B.AS) OR (#B.NR <> 1)) AND
            ((#C.Y AND #C.AS) OR (#C.NR <> 1)) AND
            ((#D.Y AND #D.AS) OR (#D.NR <> 1)) THEN
            #N := 2;
        END_IF;
       
    2:
        #A.Y := #A.Y OR (#A.NR = 2);
        #B.Y := #B.Y OR (#B.NR = 2);
        #C.Y := #C.Y OR (#C.NR = 2);
        #D.Y := #D.Y OR (#D.NR = 2);
        IF ((#A.Y AND #A.AS) OR (#A.NR <> 2)) AND
            ((#B.Y AND #B.AS) OR (#B.NR <> 2)) AND
            ((#C.Y AND #C.AS) OR (#C.NR <> 2)) AND
            ((#D.Y AND #D.AS) OR (#D.NR <> 2)) THEN
            #N := 3;
        END_IF;

usw.

Ich hoffe, ihr kommt mit der Symbolik klar?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal eine kleine Brainstorm meinerseits;

Der Operator gibt für jede Schritt ein was bewegt werden soll. als einzelwert 0/1
4 Einabefelder mit 4 Bit.
z.b. Als erste Zylinder 4, dann 2, dann 1 dann 3
Die Einzelne Schritten reichen den Wert an die Zylinder weiter
Das Grundprinzyp wird dann was gesteuerd wird wird auch zurück erwartet.

Schritt 1
Ansteuerung Wert 8
RM --> Wert 8

Schritt 2
Ansteuerung Wert 10
RM --> Wert 10

Schritt 3
Ansteuerung Wert 11
RM --> Wert 11

Schritt 4
Ansteuerung Wert 15
RM --> Wert 15
z.b.
20221218_162338.jpg
 
Ich hoffe, ihr kommt mit der Symbolik klar?
danke noch nicht, ich versuche mich reinzudenken was du mit dem .Y meinst.
edit: achso , du meinst Zylinder ;)

@de vliegende hollander
danke für die mühe, aber ich werde nicht schlau draus wie du die reihenfolge der Zylinder übernimmst anhand der tabelle links?
die zahlen bei mir in Beitrag 1 geben die reihenfolge an.
Also zb steht im Display / aus der csv datei gelesen im Eingabefeld:
bei Zylinder A: die zahl 1 (fährt dann zuerst)
bei Zylinder B: die Zahl 2 (fährt somit als 2. wenn A Arbeitsstellung erreicht hat)
Zylinder C: 3 (als 3. wenn A und B in AS)
Zylinder D: 4 (als 4. wenn A, B und C in AS)

oder zb
bei Zylinder A: die Zahl 3
Zylinder B: die Zahl 1 (fährt als erstes)
Zylinder C: 2 (als zweites)
Zylinder D: 0
(bei 0 soll Zylinder in GS bleiben = deaktiviert)
es geht mehr darum die Spannfolge der Zylinder anhand der eingaben / csv datei festzulegen und nicht nur welche Zylinder überhaupt spannen sollen.
oder hab ich das falsch verstanden bei deinem Beitrag
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
und wie machst du damit die Reihenfolge des Spannens und Abfrage der Sensoren GS und AS?

Was auch immer GS und AS ist, das Spannen wird im Zweifelsfall auch wie ein Zylinder behandelt, wenn die Rückmeldung der Zylinder die richtige Position meldet geht es weiter zum nächsten Schritt
 
du meinst was es bedeutet oder den Zustand
falls ersters: Grundstellung (sensor) und Arbeitsstellung (sensor)
aber ich denke das wusstest du ;)


Der Operator gibt für jede Schritt ein was bewegt werden soll. als einzelwert 0/1
4 Einabefelder mit 4 Bit.
z.b. Als erste Zylinder 4, dann 2, dann 1 dann 3
Die Einzelne Schritten reichen den Wert an die Zylinder weiter
Das Grundprinzyp wird dann was gesteuerd wird wird auch zurück erwartet.
sorry das hab ich nicht so ganz verstanden. :cry:
 
Zuletzt bearbeitet:
danke für die mühe, aber ich werde nicht schlau draus wie du die reihenfolge der Zylinder übernimmst anhand der tabelle links?
die zahlen bei mir in Beitrag 1 geben die reihenfolge an.
4e Zylinder ist die Reihe des linke Bit, 1e Zylinder das rechter Bit.
Dies wäre eher die Programmierbebene.

Für den HMI bedeutet das, gibt der Operator eine 4 ein. setzt linker Bit
 
das muss ich mir mal in ruhe genauer anschauen. danke,
momentan steig ich noch nicht durch.🙈
Wie das vom HMI dan am Beste umgesetzt wird ist das nächste.
ich versuche es in Worte zu erklären;

Im SPS Programm 4 Variablen als Byte anlegen. Für Schritt 1,2,3 und 4
Steuerbyte Schritt 1
Steuerbyte Schritt 2
Steuerbyte Schritt 3
Steuerbyte Schritt 4

An Hand meiner Skizze;

Im Schritt 1 soll Zylinder 4 bewegt werden.
Bediener gibt für schritt 1 , eine 4 ein und du setzt im Programm das bit der linker Reihe. (Dezimal Wert 8)
Zylinder 4 bleibt angesteuert so muss das bit auch in Steuerbyte Schritt 2,3 und 4 gesetzt werden

Im Schritt 2 soll Zylinder 2 bewegt werden.
Bediener gibt für schritt 2 , eine 2 ein und du setzt im Programm das bit der Reihe wo im Skizze 2 steht. (Dezmalwert 10 entsteht)
Zylinder 2 bleibt auch angesteuert so muss das bit auch in Steuerbyte Schritt 3 und 4 gesetzt werden.

Und so weiter.
 
Für HMI:

Feld mit 4 x 4 Checkboxen die je ein Bit bearbeiten

Dann kann man einfach das anklicken was passieren soll.

für die Schrittkette muss man das dann halt beenden wenn alle zu fahrenden Zylinder ihre Enposition erreich haben (zB.: wenn im 1. Schritt gleich alle 4 Zylinder gefahren werden sollen)
 
Zurück
Oben