Step 7 Ein Problemchen beim Planen einer Schrittkette

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Zusammen,

bin gerade dabei eine Schrittkette aufzusetzen. Dabei hatte ich folgende Vorüberlegung:

Ein Alarm oder ein gedrückter NotAus-Schalter entziehen die "Freigabe". Das ist im Betriebsarten-FC so programmiert.

Nun habe ich mir (schlau wie ich bin :p) folgenden Code überlegt:

Code:
CASE Kette OF
   
   0: // Schrittkette in Wartestellung
     ;
   
   1: // Schritt 1 (Initialschritt)    
      IF "Automatik" AND "Freigabe" AND "GS" THEN 
      Kette := 2;
      ELSIF NOT "Automatik" OR NOT "Freigabe" OR NOT "GS" THEN
      Kette := 0;
      END_IF;
   
   2: // Schritt 2
      IF "LS1" THEN
         Kette := 3;
      END_IF;
      
   ...
   
   7: // Schritt 7
      IF "LS2" THEN
         Kette := 0;
      END_IF;
      
END_CASE;

Hm, aber ganz klappt es noch nicht...

1)
Der Schritt 1 soll so etwas in der Art wie ein Initialschritt sein, von dem aus dann (wenn Bedingungen erfüllt) die Automatik startet. Nur, wie komme ich aus Schritt 0 in Schritt 1?

2)
Angenommen der Bediener drückt NotAus, so wird ja die Freigabe entzogen und die SK geht in Schritt 0. Im Grunde muss ich somit doch keine Ausgänge/Merker mehr rücksetzen, wenn ich diese in einem Ausgabebaustein über die jeweiligen Schritte ansteuere, oder?

Lieben Dank erst einmal!
 
Hallo Spirit,

so in etwa mache ich es auch mit den Schrittketten - nur meißt nicht in SCL ...

Wenn Schritt 0 dein Initialschritt ist, in den du den Ablauf bringt wenn die Grundbedingungen nicht mehr da sind dann muß das natürlich von jedem Schritt der Kette passieren (wenn der Ablauf das so zuläßt) und das Wiederkehren der Grundbedingungen muß die Kette natürlich dann auch aus Schritt 0 wieder rauslassen (z.B. nach Schritt 1).
Von Schritt 1 nach 2 kommst du dann vielleicht mit einem "Start" (wie auch immer der gerade geartet ist).

Wenn du die Ausgänge darüber ansteuerst, dass du einen Schrittnummer überprüfst und nicht mit Set-Reset sondern mit der Zuweisung derselben arbeitest (myOut := (Kette = 1) or (Kette = 3) or Kette = 12) ;) dann würdest du kein Rücksetzen in irgendeiner Form mehr benötigen. Willst du es denn so machen ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Larry, heute stresse ich dich ja wieder ganz schön, gell? ;)

Ja, ein Ausgang soll angesteuert werden, wenn z.B. Schritt 6 aktiv ist - denke, dann brauche ich im Fall von NotAus oder Entzug der Freigabe Nichts zurücksetzen...

Den Schritt 0 wollte ich eigentlich (wie angedeudet) als einen Schritt haben, in dem die SK einfach nur in Warteposition ist und nichts unternimmt. Eben z.B. nach NotAus.

Da aber in Schritt 0 (siehe Beispiel) nichts programmiert ist, komme ich halt nicht in Schritt 1 - oder aber ich programmiere außerhalb des Schrittketten-FB's, dass z.B. über einen Start-Taster die Kette in Schritt 1 geht. Wäre das sinnvoll?
 
nur eine idee

Code:
   0: // Schrittkette in Wartestellung
     IF "Freigabe" AND "NOT_AUS_Quittier_taster" THEN
      Kette := 1;
   
   1: // Schritt 1 (Initialschritt)    
      IF "Automatik" AND "Freigabe" AND "GS" THEN 
      Kette := 2;
      ELSIF NOT "Automatik" OR NOT "Freigabe" OR NOT "GS" THEN
      Kette := 0;
      END_IF;
   
2: // Schritt 2
      IF "LS1" THEN
         Kette := 3;
      END_IF;
      
   ...
   
   7: // Schritt 7
      IF "LS2" THEN
         Kette := 1;
      END_IF;
      
END_CASE;

Aus schritt 7 gehst du wieder in schritt 1

Ich kenne das so, wenn Spannung weg oder Notaus muss Notaus entriegelt werden sprich deine FREIGABE ist wieder 1 und danach muss dies noch einmal Quittiert werden.

Alternativ falls dein Not_aus Quttieren nicht mit an die SPS geht sagt du nur Wenn Freigabe ok gehe in Kette 1 ;-)

oder versteh ich grade was falsch?
 
Du solltest Dir noch ein paar Gedanken machen, wie Du so etwas wie Not-Aus in jeden Schritt einbaust.
Meistens soll die Schrittkette ja nur angehalten werden.
Ggf. musst Du auch berücksichtigen, dass die Schrittkette während des Not-Aus unbeabsichtigt weiterschalten könnte, wenn jemand durch die Lichtschranke greift.
Eine Möglichkeit wäre, in jeden Schritt einen Merker "Schrittfreigabe" einzubauen.

Ich mache meine Schrittketten üblicherweise so, dass sie von Schritt 0 nach Schritt 1 die Grundstellung der Anlage oder des Anlagenteils abfragen. Ggf. werden im Startschritt noch andere Dinge abgefragt oder ausgelöst.
Den Schritt 0 durchlaufe ich im zyklischen Automatikbetrieb dann nicht mehr. Am Ende der Schrittkette wird zu Schritt 1 gesprungen.

Das mal so als Ansatz zum Nachdenken...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Lieben Dank für euere Unterstützungen...

Wie wäre es denn, wenn ich ganz am Anfang des Bausteins - also vor dem CASE Kette of - folgende Zeilen einfüge:

Code:
IF Taster_Start AND Automatik AND Freigabe AND GS_Aktoren THEN
   SK_Kette := 1;
ELSE
   SK_Kette := 0;
END_IF;

Somit würde doch bei NotAus oder beim Umschaltung in Handbetrieb die Kette automatisch in Schritt 0 gehen und kein Aktor mehr angesteuert mehr werden, richtig?

Außerdem gelangt man dann von Schritt 0 in Schritt 1, wenn der Start-Taster für den Automatikablauf gedrückt wird; ginge doch?
 
aber, willst du wirklich, dass bei Handbetrieb wieder alles auf anfang geht?

also unsere Anlagen bleiben z.B. bei störung in den schritt stehen, könnte dann per hand korriegieren und wieder in automatik schalten und die kette läuft weiter...


Vielleicht magst du mal sagen, was die anlage macht

und was die schritte tun?
 
Zuletzt bearbeitet:
Hi Benni,

also bei Umschaltung von Automatik- in Handbetrieb soll die Schrittkette ihren Zyklus noch fertig machen und dann stehen bleiben. Das wäre doch dann der Fall, oder?

Nur bei NotAus würde es ja nicht klappen; NotAus entzieht die Freigabe. Aber ich sehe grade, dass dann ja die SK auch noch zu Ende fahren würde, und erst dann stehen bliebe. Also müsste die Freigabe wohl in jeden Schritt programiert werden, oder?

Lieben Dank!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
also wir handhaben das so:

Automatik läuft

-Not_Aus: Anlage bleibt SOFORT Stehen, Werkstück muss entnommen werden danach erfolgt eine ggf. Referenzfahrt und anlage wartet in Grundstellung und kann mit Start wieder den Automatikbetrieb beginnen.
-Handbetrieb aus automatik aktueller schrtitt bleibt stehen danach gibt es ein Taster Tippen somit kannst du die schritte weiter trippen (wenn bedingung erfüllt)
ausserdem kann man einfach wieder auf Automatik zurückschalten.
-Schrittkette soll noch zuende fahren nennt sich bei uns Taktende. nach dem Taktende steht die Analge dann in Grundstellung in Betriebsart Handbetrieb
 
Zuletzt bearbeitet:
Ok Benni, danke.

Wie gesagt, die Vorgabe lautet bei mir, dass die SK beim Wechsel der Betriebsart noch zu Ende fährt.

1)
Wenn also die SK bei Umschaltung von Auto in Hand noch bis Taktende fahren soll, dann würden meine Zeilen vor "CASE Kette OF" das bewirken, richtig?

2)
Damit aber die SK bei NotAus sofort stehen bleibt, müsste ich wohl in jedem Schritt zusätzlich die Abfrage auf Freigabe machen, wie anfangs schon von Larry vorgeschlagen. Sehe ich das richtig?
 
denke SCL ist nicht so meine welt

ich würde das so machen:
Notaus ist in jeder Weiterschaltbedingung und ein "Schrittkette betrieb merker"

Löst du nun Notaus aus, wird der "Schrittkette betrieb merker" eine 0

Somit fehlen dir 2 Bedingungen. ist dein Notaus wieder entriegelt, soll ja die Anlage nicht gleich anlaufen daher drückst du danach noch einmal Start, dieser Startimpuls setzt dein "Schrittkette betrieb merker" wieder auf 1 und alles läuft weiter

Wegen dem Handbetrieb würd ich es so machen

Bedingung TIPP als weiterschaltbedingung ist immer 1wenn Automatik angewählt ist,
wählst du nun Hand an, vergleichs du kette = 1 und setzt denTipp zurück, somit würde sie im schritt 1 warten, bis du Tipp drückst oder automatik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Damit aber die SK bei NotAus sofort stehen bleibt, müsste ich wohl in jedem Schritt zusätzlich die Abfrage auf Freigabe machen, wie anfangs schon von Larry vorgeschlagen. Sehe ich das richtig?

... oder außerhalb der CASE-Abfrage die Variable #Kette auf 0 schreiben wenn Not-Aus ...

Ansonsten liegst du richtig ... :)

Gruß
Larry
 
... oder außerhalb der CASE-Abfrage die Variable #Kette auf 0 schreiben wenn Not-Aus ...

Ansonsten liegst du richtig ... :)

Gruß
Larry

Hm, aber hätte ich das nichtschon mit folgender Programmierung außerhalb der Case-Abfrage, Larry?

Code:
IF Taster_Start AND Automatik AND Freigabe AND GS_Aktoren THEN
   SK_Kette := 1;
ELSE
   SK_Kette := 0;
END_IF;

Da ja NotAus die Freigabe entzieht; würde doch über den ELSE-Zweig die Kette in Schritt 0 (= keine Aktion) gehen, oder nicht?

Denn ich stelle mir das mal SPS-technisch so vor:

- Baustein wird aufgerufen und von oben nach unten bearbeitet
- Alle Bedingungen erfüllt und Start-Taster gedrückt --> Kette geht in Schritt1
- Anschließend wird in Schritt2, 3, usw. gesprungen

Die Frage aller Fragen ist jetzt nur, was passiert, wenn der Bediener z.B. in Schritt 3 NotAus betätigt?

A) Die SK geht sofort in Schritt0 ODER

B) Da die Bedingungen in Schritt3 für Schritt4 erfüllt sind, wird die SK verlassen und beim erneuten Aufruf des Bausteins hat die Variable #Kette den Wert4, so dass überhaupt nicht auf NotAus reagiert wird? :confused:
 
Zuletzt bearbeitet:
Nochmal ich... ;)

Hatte versucht mir meine oben gestellte Frage selbst zu beantworten; komme aber auf keinen grünen Zweig!

Code:
IF Taster_Start AND Automatik AND Freigabe AND GS_Aktoren THEN
   SK_Kette := 1;
ELSE
   SK_Kette := 0;
END_IF;

Soweit ich weiß, wird die Case-Anweisung sofort verlassen, wenn eine Übereinstimmung gefunden wurde.

Also angenommen, mitten in der Bearbeitung von Schritt3 wird von Auto auf Hand umgeschaltet und die Variable "#SK_Kette" hat in Schritt3 den Wert4 (für nächsten Schritt) erhalten, dann wird die Case-Anweisung doch sofort verlassen, oder?

Wenn die SPS den nächsten Zyklus startet und den Baustein erneut aufruft; auf was wird dann geschaut?

1)
Variable "#SK_Kette" hat den Wert 4; also geht es weiter mit Schritt4. ODER

2)
Die Bedingungen vor der Case-Anweisung sind nicht mehr erfüllt und die Kette geht in Schritt0.

Vielen Dank für eine Aufklärung!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hm, aber hätte ich das nichtschon mit folgender Programmierung außerhalb der Case-Abfrage, Larry?

Code:
IF Taster_Start AND Automatik AND Freigabe AND GS_Aktoren THEN
   SK_Kette := 1;
ELSE
   SK_Kette := 0;
END_IF;

Da ja NotAus die Freigabe entzieht; würde doch über den ELSE-Zweig die Kette in Schritt 0 (= keine Aktion) gehen, oder nicht?
Ja schon ... aber immer - du wirst nie wirklich aus Schritt=1 herauskommen ...
Also hier wirklich nur zum Setzen auf 0 benutzen ...

Die Frage aller Fragen ist jetzt nur, was passiert, wenn der Bediener z.B. in Schritt 3 NotAus betätigt?

A) Die SK geht sofort in Schritt0 ODER

B) Da die Bedingungen in Schritt3 für Schritt4 erfüllt sind, wird die SK verlassen und beim erneuten Aufruf des Bausteins hat die Variable #Kette den Wert4, so dass überhaupt nicht auf NotAus reagiert wird? :confused:
Immer zyklisch denken.
Es passiert nichts mitten in der Bearbeitung. Der Zustand Not-Aus ist schon bei Aufruf des Bausteins (eigentlich bei Aufruf von OB1) da und es wird reagiert wie programmiert.
Ist der Zustand in dem Zyklus noch nicht da arbeitet die Schrittkette wie programmiert. Der Unterschied in der Reaktion ist deine Zykluszeit ...
Deshalb ja die obige Geschichte - wenn du bei NA die Schrittkette abbrechen willst dann diese Abfrage nicht in jeden Schritt programmieren sondern einmal für alle ...

Gruß
Larry
 
Danke Larry, aber ich glaube ich bin grad mal wieder etwas überfordert... ist aber nichts Neues bei mir... komische SPS-Welt! Hätte vielleicht doch lieber Hauswirtschafterin werden sollen... :p

Also nochmal langsam zum Mitschreiben...

Ja schon ... aber immer - du wirst nie wirklich aus Schritt=1 herauskommen ...
Also hier wirklich nur zum Setzen auf 0 benutzen ...

Gruß
Larry

... es sei denn, ich würde den "Taster_Start" mit einer pos. Flanke verbinden, dann würde ich doch schon aus Schritt 1 herauskommen, richtig?


Immer zyklisch denken.
Es passiert nichts mitten in der Bearbeitung. Der Zustand Not-Aus ist schon bei Aufruf des Bausteins (eigentlich bei Aufruf von OB1) da und es wird reagiert wie programmiert.
Ist der Zustand in dem Zyklus noch nicht da arbeitet die Schrittkette wie programmiert. Der Unterschied in der Reaktion ist deine Zykluszeit ...
Deshalb ja die obige Geschichte - wenn du bei NA die Schrittkette abbrechen willst dann diese Abfrage nicht in jeden Schritt programmieren sondern einmal für alle ...

Gruß
Larry

Hm, das verstehe ich nun nicht so ganz.

Was passiert genau in meinem Beispiel???

Die Schrittkette ist gerade in Schritt3 und die Variable #Kette hat den Wert4 für den nächsten Schritt erhalten. In diesem Moment drückt der Bediener NotAus.

Die Case-Anweisung wird ja verlassen, weil in Schritt3 eine Übereinstimmung gefunden wurde. Nun wird der SK-Baustein erneut aufgerufen und der Zustand NotAus ist vorhanden.

Geht die Kette jetzt (weil im Baustein ganz oben im ELSE-Zweig so programmiert) in Schritt0 oder macht sie weiter in Schritt4, da ja die Variable #Kette den Wert4 hat? :confused:
 
Vorschlag:

UND (AUTOMATIK_START oder IMPULS_EINZELSCHRITT) UND NOTAUS = SCHRITTFREIGABE

jetzt SCHRITTFREIGABE in jeden einzelnen Schritt einbinden.

Im Schritt 0 noch einfügen: >UNDNICHT HNTE (Halt nach Taktende), wobei HNTE noch definiert werden muss. Dieses HNTE verhindert ein Wiederanlauf der Schrittkette nach Betriebsartwechsel.

LG
olddragon
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was passiert genau in meinem Beispiel???

Das meinte Larry mit zyklisch denken.
Das Programm läuft zyklisch von oben nach unten durch.
Denk auch noch mal daran, dass das Prozessabbild am Anfang des Zyklus eingelesen wird.
Wenn also im Zyklus zuerst der Not-Aus abgefragt wird, springt die Kette gemäß der Anweisung auch nach Schritt 0.

Ob eine Schrittkette nur angehalten oder auf 0 zurückgesetzt werden sollte, muss man vermutlich individuell entscheiden.
Nach Deiner Aussage soll der Zyklzus noch zu Ende gefahren werden, wenn man auf Hand umstellt. Was ist denn, wenn jemand eine "echte" Handfunktion braucht? Z.B. wenn etwas verklemmt ist o.ä. Muss er dann nicht doch etwas verfahren können, ohne den Zyklus zu beenden?

Vielleicht noch ein weiterer Ansatz:
Wenn man eine Schrittkette bei Not-Halt (nur) anhält, kann man die Aktoren sehr schön abschalten, indem man einen Merker in die Zuweisung für den Ausgang bringt.

Code:
U #Automatik
UN #Stoerung
U #Schritt_XY
= Ventil_Auto_Ein
 
Übrigens, zum Aufstarten Schritt 0 in Schritt 1:
Du kommst zwar aus dem Schritt 1 heraus, wenn die Bedingung stimmt; allerdings wird der Schrittwert sofort wieder 0, wenn du die Starttaste losläßt oder eine andere der Startbedingungen nicht mehr stimmt.

olddragon
 
Ok, dank' euch!

Ich versuche es nochmals...

Code:
IF Taster_Start AND NOT FLM AND Automatik AND Freigabe AND GS_Aktoren OR LS1 and GS_Aktor1 THEN
   SK_Kette := 1;
ELSEIF NOT Freigabe THEN
   SK_Kette := 0;
END_IF;
FLM := Taster_Start;

Gehe ich recht in der Annahme, dass durch diese Programmierung ganz am Anfang des SK-Bausteins Folgendes passiert:

1)
Sind alles Bedingungen erfüllt und es wird der Start-Taster gedrückt so geht die SK in Schritt1 und sind dort die Bedingungen erfüllt, so geht die SK beim nächsten Aufruf des Bausteins in Schritt2. Im Automatikablauf geht die Kette dann über die OR-Bedingung selbstständig von Schritt0 in Schritt1.

2)
Drückt der Bediener während der Abarbeitung der SK den NotAus, so wird dieser Zustand (über das Prozessabbild) im nächsten SPS-Zyklus eingelesen und die Schrittkette geht beim nächsten Bausteinaufruf über den ELSEIF-Zweig in Schritt0. Wie lange das dauert, von der Auslösung des NotAus bis die Kette in Schritt0 geht, hängt von der Zykluszeit ab!

Stimmen die Punkte 1 und 2 so? Hoffe es sehr! ;)


Nach Deiner Aussage soll der Zyklzus noch zu Ende gefahren werden, wenn man auf Hand umstellt. Was ist denn, wenn jemand eine "echte" Handfunktion braucht? Z.B. wenn etwas verklemmt ist o.ä. Muss er dann nicht doch etwas verfahren können, ohne den Zyklus zu beenden?

Nun, es gibt einen Schalter für Handbetrieb und wenn dieser aktiviert wird, dann können die Zylinder über das Display einzeln gefahren werden...

Vielleicht noch ein weiterer Ansatz:
Wenn man eine Schrittkette bei Not-Halt (nur) anhält, kann man die Aktoren sehr schön abschalten, indem man einen Merker in die Zuweisung für den Ausgang bringt.

Code:
U #Automatik
UN #Stoerung
= Ventil_Auto_Ein

Hm, aber werden die Aktoren nicht sowieso abgeschaltet, wenn die SK in Schritt0 geht? Ich dachte mir das so, dass im Ausgabebaustein bei einem best. Schritt die notwendigen Aktoren angesteuert werden. Und in Schritt0 passiert Nichts!
 
Zuletzt bearbeitet:
Zurück
Oben