# Schrittkettenprogrammierung und Ausgänge sicher schalten



## Earny (26 August 2008)

Hallo,
ich hab mal eine grundsätzliche Frage zur Schrittkettenprogrammierung und zum Ein- und Ausschalten von Ausgängen.
Ich habe bisher eine lineare Schrittkette immer so aufgebaut, dass der Schritt n+1 den Schritt n löscht. Da ich die Schrittkette (meistens FUP) mit Merkern nachbilde, löscht der Schrittmerker des Schrittes n+1 den Schrittmerker des Schrittes n. 
In den Ausgangszuweisungen werden die Schrittmerker dann auf die Ausgänge geschaltet. Das geschieht mit Hilfe von Zuweisungen, manchmal verodert mit weiteren Ein- und Ausschaltbedingungen der Betriebsarten Hand/Einrichten. Gelegentlich muss auch mit einem SR-Glied ein Aktor gespeichert angesteuert werden (z.B. federrückgestelltes Pneumatikventil).

Nun sagte ein Kollege, dass sei in seiner Firma nicht üblich: Es dürfte niemals ein Aktor (Ausgang) gespeichert angesteuert werden. Der Oberprogrammierer dieser Firma sieht das nicht gern und ein Kasten Bier ist dann fällig?
Diese Firma hat dann auch ein ganz anderes System der Schrittkettenprogrammierung: Die Schritte einer Schrittkette werden nacheinander, wie vom Prozess gefordert eingeschaltet, und bleiben alle eingeschaltet, bis der allerletzte Schritt die gesamte Schrittkette in einem Rutsch löscht. Natürlich sind dann Verriegelungen an den Ausgängen erforderlich, die relativ kompliziert werden können.

Die grundsätzliche Frage ist: Dürfen Ausgänge die Aktoren ansteuern, gespeichert eingeschaltet werden oder sprechen Sicherheitsüberlegungen (Not-Aus, Spannungsausfall, usw.) dagegen?

Gruß
Earny


----------



## vierlagig (26 August 2008)

Kollege? andere Firma oder die, die dir monatlich den Brötchenerwerb
 ermöglicht?

wenn letzteres: warum willst du dich mit dem "Oberpragrammierer" und
 "Godfather of Stepchains" anlegen? suchst du Streit?

Sicherheitsüberlegungen sprechen nicht dagegen, da

1. bei einem Not-Aus alle gefährdenden Einrichtungen sicher spannungslos
 gemacht werden müssen, dazu zählt meist das Potential, welches ca. 90%
 der Ausgangskarten versorgt
2. bei einem Spannungsausfall die Ausgangszustände nicht gespeichert
 werden, somit nicht wiederhergestellt werden. Wichtig ist hier nur eine
 funktionierende Anlaufbehandlung. (besonders bei der 200er, wie godi
 feststellte: S7-200 nicht remanente Speicherbereich bei CPU stop zurücksetzen)

was dagegen sprechen könnte ist, dass es als unsauber gilt und viele
 Snobs diese Meinung bis aufs Messer verteidigen.

Also: Du darfst! ...mußt dir aber wohlmöglich von manchen Leuten anhören,
 dass es ihnen nicht gefällt.



vierlagig schrieb:


> .. ähnlich für ausgänge (aber die sollten sowieso nur einmal beschrieben werden  ... aber bei S/R sinds schon mal zwei ...)


 

und hier noch eine Diskussion zu dem Thema, an der sich der geschätzte
 Kollege sps-concept beteiligt hat: Ausgänge bleiben gesetz

das mit der Kiste Bier ist eine schöne Idee!


----------



## kiestumpe (26 August 2008)

*exotische Schrittkette*

Was ich sehr exotisch finde, ist die Schrittketten auf diese Art zu programmieren-kann man das überhaupt noch als Schrittkette bezeichnen???


----------



## Larry Laffer (26 August 2008)

... solche Schrittketten gibt es bei uns als Alt-Lasten auch noch einige. Das ist besonders toll, wenn man etwas daran ändern möchte oder ggf. einen Parallelzweig einfügen möchte. 

Aber das ist ja nicht das Thema ... Ich würde hier *4L* zustimmen. Derjenige, der diesbezüglich in der jeweiligen Firma das Sagen hat, der bestimmt auch, wie es gemacht wird (ist bei uns auch so ...).

Gruß
LL


----------



## Hoyt (26 August 2008)

Hallo



Earny schrieb:


> Diese Firma hat dann auch ein ganz anderes System der Schrittkettenprogrammierung: Die Schritte einer Schrittkette werden nacheinander, wie vom Prozess gefordert eingeschaltet, und bleiben alle eingeschaltet, bis der allerletzte Schritt die gesamte Schrittkette in einem Rutsch löscht.



Solche Schrittketten finde ich zum :sm23: , wenn man diese überhaupt  so bezeichnen kann. 




Earny schrieb:


> Gelegentlich muss auch mit einem SR-Glied ein Aktor gespeichert angesteuert werden



Man muss hier einfach aufpassen, dass der Aktor in *jeder* Situation richtig zurückgesetzt wird.

Schlechtes Beispiel:

```
U #Schritt2
S #Ausgang
U #Schritt5
R #Ausgang
```
Besseres Beispiel: (nach meiner Meinung)

```
O #Schritt2
O #Schritt3
O #Schritt4
O #Schritt5
= #Ausgang
```
Grund: Wird die Schrittkette in Beispiel 1 (z.B. in Schritt 3) aus irgend einem Grund abgebrochen, so bleicht der Ausgang gesetzt.

Gruss Hoyt


----------



## Manfred Stangl (26 August 2008)

Ich denke mal dass es auf die Anwedung der Schrittkette ankommt. Ich hab manche, wo der vorige schritt gesetzt bleibt, u. U. bis zum ende der Kette, und viele wo der Folgeschritt den anstossenden rücksetzt.
Wie immer Not-Aus - Konzept muss vorhanden sein, wie so manches mal hier schon erwähnt wurde.


----------



## vierlagig (26 August 2008)

ich hab auch schon schrittketten gebaut, die einfach eine schrittnummer im format INT (selten DINT ) haben und diese dann für den jeweiligen schritt verglichen wird und inkrementiert ... ähnlich einem GPI (getriggertes prioritäten-inkrement)


----------



## Manfred Stangl (26 August 2008)

du weißt natürlich immer genau wo du stehst (im Programm meine ich)


----------



## arcis (26 August 2008)

*+*



> Nun sagte ein Kollege, dass sei in seiner Firma nicht üblich: Es dürfte niemals ein Aktor (Ausgang) gespeichert angesteuert werden.



Warum? 

Kann man dieses auch irgendwie sachlich begründen?


----------



## arcis (26 August 2008)

*+*

Gerade bei der Anwendung von Schrittketten halte ich diese Forderung für absurd.


----------



## vierlagig (26 August 2008)

arcis schrieb:


> Gerade bei der Anwendung von Schrittketten halte ich diese Forderung für absurd.



Warum?

Kann man dieses auch irgendwie sachlich begründen?


----------



## SPSKILLER (26 August 2008)

ist es nicht so, dass Graph 7 an irgendwelche Normen "angelehnt" ist? 
Dort kann man meines Wissens nach auch gespeicherte Aktionen machen...

Meiner Meinung nach spricht nix dagegen mit Schrittketten FFs zu setzen/rücksetzen!
Das Ganze hängt doch (wie eigentlich immer) von einem schlüssigen Konzept ab...


----------



## Earny (26 August 2008)

Hallo,
wenn ich das richtig verstanden habe, brauche ich mir keine Sorgen machen und "mein" System ist in Ordnung.
Ich bin mir allerdings nicht ganz sicher, wie das von kiestumpe und Larry gemeint war. Welches System ist nun OK, das des Oberprogrammierers der Fremdfirma oder mein System.
Mein System ist angelehnt an Wellenreuther/Zastrow, Automatisieren mit SPS, Theorie und Praxis, 3. Auflage, S. 443. (Die beiden Programmieren ja schon seit Jahrzehnten und ich denke, man kann Ihnen vertrauen.)
Da sieht man das Grundsystem einer Schrittkettenprogrammierung mit Ausgangszuweisungen (teilweise gespeichert). So habe ich das auch bisher immer programmiert, es hat immer funktioniert.
Aber man kann ja eine Sache auch 35 Jahre lang falsch machen, ohne dass es immer gleich auffallen muss.

Der Kollege konnte mir leider nicht sachlich begründen, warum sein Oberprogrammierer auf dieses System schwört. Vermutlich ist die Begründung aber ganz einfach: Das funktioniert, das machen wir hier schon immer so, da könnte ja jeder kommen,...
Es macht sicher Sinn, dass innerhalb einer Firma ein einheitliches System herrscht!

Ich wollte nur sicher gehen, dass ich da nichts übersehen habe.

Gruß
Earny


----------



## Larry Laffer (27 August 2008)

Earny schrieb:


> Hallo,
> wenn ich das richtig verstanden habe, brauche ich mir keine Sorgen machen und "mein" System ist in Ordnung.
> Ich bin mir allerdings nicht ganz sicher, wie das von kiestumpe und Larry gemeint war. Welches System ist nun OK, das des Oberprogrammierers der Fremdfirma oder mein System.


 
Aus meiner Sicht : Dein System ist in Ordnung, wenn sich bisher noch niemand darüber beschwert hat (oder idealerweise deine Programme sogar geschätzt werden) und du selber damit klarkommst. 



Earny schrieb:


> Der Kollege konnte mir leider nicht sachlich begründen, warum sein Oberprogrammierer auf dieses System schwört. Vermutlich ist die Begründung aber ganz einfach: Das funktioniert, das machen wir hier schon immer so, da könnte ja jeder kommen ...


 
Never change a running System ...



Earny schrieb:


> Es macht sicher Sinn, dass innerhalb einer Firma ein einheitliches System herrscht!


 
Vollkommen richtig. Und wenn die Firma dein Kunde ist, dann mußt du dich ggf. da anpassend oder den anderen dein System schmackhaft machen ...

Gruß
LL


----------



## arcis (27 August 2008)

*+*



> Kann man dieses auch irgendwie sachlich begründen?


Welche Bedeutung in diesem Zusammenhang haben Anweisungen wie diese

U M 100.0
U M 100.1
= A 127.0

wobei die Merker M 100.0 und M 100.1 durch R und S Anweisungen gebildet werden?

Es sind sehr leicht Fälle anzugeben, die ohne R und S Anweisungen, entweder direkt auf den Ausgängen oder über Zwischenvariablen, NICHT gelöst werden können.

Deshalb halte ich diese Forderung



> Es dürfte niemals ein Aktor (Ausgang) gespeichert angesteuert werden.


für eine willkürliche, nicht realisierbare Einschränkung. Der Programmierer ist mit seinem Programm dafür verantwortlich, die Ausgänge der SPS so anzusteuern, dass sie in jedem Anlagenzustand die richtigen Signale führen.  Dabei macht es keinen Unterschied, ob das mit "=",  R und  S oder beidem zusammen  erreicht wird.


----------



## Ralle (28 August 2008)

Im Prinzip spricht nichts gegen das Setzen von Ausgängen, wie 4L ja schon erläutert hat. Viele Programmiersysteme heben aus der Schrittkette heraus ein Signal zum Einschalten eines Aktors und eines zum Ausschalten. Diese Signale gehen dann auf einen Aktor-Baustein, der Freigaben, Hand, Automatik, Fehlererkennung etc. handelt. Das ist auch nichts anderes, als ein "Setzen/Rücksetzen" eines Ausgangs, wobei noch einige Randbedingungen (Fehler, Freigaben, etc.) dabei beachtet werden und ich diese Lösung daher persönlich besser finde.


----------



## Rudi (29 August 2008)

Das ist natürlich immer so das jeder Argumente für "sein System" hat.
Bin aber auch der Meinung man sollte sich evtl. Wünschen der Kunden anpassen solange es nicht ganz unsinnig ist. Letztendlich ist man allerdings immer für sein Programm verantwortlich. Und wenn der Preis nicht stimmt kann man natürlich keinen Mehraufwand betreiben um sich anzupassen.


----------



## kiestumpe (3 September 2008)

Earny schrieb:


> Hallo,
> 
> Ich bin mir allerdings nicht ganz sicher, wie das von kiestumpe und Larry gemeint war. Welches System ist nun OK, das des Oberprogrammierers der Fremdfirma oder mein System.
> 
> ...


Zu der FRage: ich meinte dieses hier


> Die Schritte einer Schrittkette werden nacheinander, wie vom Prozess gefordert eingeschaltet, und bleiben alle eingeschaltet, bis der allerletzte Schritt die gesamte Schrittkette in einem Rutsch löscht.


Ich kenne das nur so, dass immer nur ein Schritt aktiv sein darf, es sei denn du hast ne Parallelverzweigung.
Ist die "Fremdfirma" Kunde oder einfach nur ein externer Programmierer.
Im ersten Fall würde ich deinen Chef auf den mit dieser Methode verbundenen Mehraufwand aufmerksam machen, im zweiten Falle auf den sog. Experten sch*en...


----------



## Larry Laffer (3 September 2008)

@Earny:
Was hast du an meinem Beitrag nicht verstanden ?


----------



## Earny (3 September 2008)

Hallo Larry,
in Deinem Beitrag vom 26.8. zu meinem Thema hattest Du geschrieben:


> ... solche Schrittketten gibt es bei uns als Alt-Lasten auch noch einige. Das ist besonders toll, wenn man etwas daran ändern möchte oder ggf. einen Parallelzweig einfügen möchte.


 
Ich war mir da nicht ganz sicher, ob Du das Schrittkettensystem des Oberprogrammierers der Fremdfirma meinst oder mein System.

Aber in Deiner Ergänzung vom 27.8. war dann klar, dass Du meine Art der Schrittkettenprogrammierung für i.O. hältst.


> Aus meiner Sicht : Dein System ist in Ordnung, wenn sich bisher noch niemand darüber beschwert hat (oder idealerweise deine Programme sogar geschätzt werden) und du selber damit klarkommst.


 
Gruß
Earny


----------



## moeins (10 September 2008)

vierlagig schrieb:


> ich hab auch schon schrittketten gebaut, die einfach eine schrittnummer im format INT (selten DINT ) haben und diese dann für den jeweiligen schritt verglichen wird und inkrementiert ... ähnlich einem GPI (getriggertes prioritäten-inkrement)



Das gleiche Prinzip wende ich auch an. 
Vorteil an der Sache ist, das man den Schrittkettenzähler schön am Panel anzeigen und sogar mit Textlisten hinterlegen kann. Da weiß der Bediener gleich was Tango ist.

Ausgänge werden dann mit = zugewiesen


```
O #Schritt1
O #Schritt3
O #Schritt6
O #Schritt7
O #Schritt11
O #Schritt15
O #HAND_EIN
UN #STOERUNG
UN #NOTAUS
UN #PAUSE_HALT
= #ANTRIEB1

O #Schritt2
O #Schritt4
 O #Schritt6
 O #Schritt7
 O #Schritt12
 O #Schritt13
O #HAND_EIN
 UN #STOERUNG
UN #NOTAUS
UN #PAUSE_HALT
= #ANTRIEB2

usw.
```


----------



## Kieler (10 September 2008)

Hallo moeins,

wo in Deinem Beispiel verbirgt sich denn jetzt die INT Zahl?


----------



## moeins (10 September 2008)

Kieler schrieb:


> Hallo moeins,
> 
> wo in Deinem Beispiel verbirgt sich denn jetzt die INT Zahl?


Die steckt in meiner Schrittkette 

Das Beispiel ist ja die Zuweisung der einzelnen Ausgänge, weil es beim Thema um das setzen/rücksetzen von Ausgängen ging.

Für meine Schrittkette habe ich mir einen FC programmiert, indem einfach per SPL bedingt gesprungen wird.

Dieses Netzwerk ist der Kern vom Baustein:


```
L     #SchrittkettenZaehler
      SPL   Ende                        // Sprung bei >= 20
      SPA   S001                        // Sprung bei = 0
      SPA   S002                        // Sprung bei = 1
      SPA   S003                        // Sprung bei = 2
      SPA   S004                        // Sprung bei = 3
      SPA   S005                        // Sprung bei = 4
      SPA   S006                        // Sprung bei = 5
      SPA   S007                        // Sprung bei = 6
      SPA   S008                        // Sprung bei = 7
      SPA   S009                        // Sprung bei = 8
      SPA   S010                        // Sprung bei = 9
      SPA   S011                        // Sprung bei = 10
      SPA   S012                        // Sprung bei = 11
      SPA   S013                        // Sprung bei = 12
      SPA   S014                        // Sprung bei = 13
      SPA   S015                        // Sprung bei = 14
      SPA   S016                        // Sprung bei = 15
      SPA   S017                        // Sprung bei = 16
      SPA   S018                        // Sprung bei = 17
      SPA   S019                        // Sprung bei = 18
      SPA   S020                        // Sprung bei = 19

Ende: NOP   0
      SPA   Zuws                        // Schritt-Zuweisungen anspringen
      BEA   

Takt: L     #SchrittkettenZaehler       // Schritt hochzählen
      L     1
      +I    
      T     #SchrittkettenZaehler
      BEA   

S001: U     #Schritt_1
      U     #Freigabe_STEP
      SPB   Takt
      SPA   Ende

usw...
```
Natürlich gibts da noch ein bisschen mehr drumherum, wie Freigaben, Tipp-Betrieb, Reset und Pause.

Gruß
moeins


----------



## Kieler (10 September 2008)

Hallo moins,

was ich nicht verstehe :


```
S001: U     #Schritt_1
      U     #Freigabe_STEP
      SPB   Takt
      SPA   Ende
```

Warum gibt es noch eine binäre Variable Schritt_1, wenn der Schritt doch eigentlich in der Integerzahl steht?


----------



## moeins (10 September 2008)

Um es verständlicher zu machen, der Baustein sieht von aussen in etwa so aus (siehe Anlage). 


#Schritt1 ist das Ergebnis der Verknüpfung -> Weiterschaltbedingung vom Schritt 1

Mein Baustein enthält 20 Schritte und ist weiter kaskadierbar.


----------



## Kieler (10 September 2008)

...ja so wird ein Schuh daraus.


----------



## xetni (10 September 2008)

*Nun denn !*

Wenn ich in Schrittketten etwas speichere -dann muss ich den Speicher auch mal wieder löschen. Das kann bei einem großen Programm mal zu Problemen führen.(Vergessen!)
Wenn ich die Ausgangszuweisung am Schluss über "=" Zuweisung mache welche ge-odert sind :

Lade Schritt 12
oder Schritt 13
oder Schritt 44
= A0.3

-kann ich nichts vergessen weil automatisch bei jedem anderen Schritt der Ausgang sozusagen automatisch nicht aktiv ist.

Das ist doch der Gag an der Sache !!

Natürlich ist die Verlockung groß dass wenn in 20 aufeinanderfolgenden Schritten ein Ausgang gesetzt sein soll ich den Ausgang beim 1sten Schritt setze und beim 20sten Schritt dann wieder Rücksetze.

Aber wie gesagt : Vorsicht! Vorsicht !

Da ist die Methode mit der 20-maligen "=" Zuweisung sicherer - zumal  Rücksetzfehler oft bei Programmänderungen oder Erweiterungen passieren.

Gruß Xetni


----------



## chrisgoossens (11 September 2008)

*Schrittkette*

Wenn man die schritkette richtig aufbaut, kann man die ausgaenge steuern ohne speicherfunktion. Ich baue erst die kette auf mitt das richtige anzahl schritte (ich beginn mit zb schrittnummer 10,20,30 usw, so kann ich spaeter einfach schritte einfuegen). Die ausgaenge steuer ich dann mit vergleichfunktionen. zb ausgang ist hoch wenn schrittnr  >30 und <50.
Bei notstop oder spannungsausfall schreibe ich einfach 0 in schrittvar und alles geht nach eine sichere ruhezustand.Auch sehr einfach beim fehlersuchen. Die position wo die kette gestopt ist gibt direct auch die ursache an warum die machine nicht weiter lauft. 

Kann einfach programmiert werden in FUP oder KOP

Chris


----------



## Oberchefe (14 September 2008)

Ich bevorzuge auch die Variante mit der Variable. Bei der Variante mit zig Merkern passiert es doch mal leichter daß irgendwo ein Setzen oder Rücksetzen vergessen wird, zudem kann man leichter von einem Punkt des Ablaufs an einen ganz anderen Punkt springen (z.B. von 40 auf 150 statt auf 50), abhängig von entsprechenden Bedingungen (z.B. Produkt vorhanden...). In ST kann man das auch schön mit der "Case" Anweisung programmieren.


----------



## Maeggy (28 September 2008)

Halo Erny

Vieleicht ist es für den Anfang nicht schlecht sich an die Gegebenheiten in der Firma anzupassen. Generell ist es auch nicht unbedingt gut in den Schrittketten Ausgänge zu nutzen. Ausgänge als Speicher zu nutzen hat tatsächlich ab und an zu  Schwierigkeiten geführt. Mindestens bei S5. Ob das bei S7 auch noch so ist kann ich nicht sagen. Wenn Schrittkette dann eher über Datenbaustein. Diese sind bei S7, mindestens ab 315 immer remanet gespeichert. Allerdings muß nach einem Abbruch die Schrittkette eventuel rückgesetzt werden.  
Die Ausgänge würde ich eher einem Anlagenteil, einem Antrieb oder einer sonstigen Einheit zuordnen. Diese Einheiten werden dann von den Schrittkettenzuständen gesteuert.
Mit dieser Trennung von Anlagenteilen und Schrittketten kann dann auch eine komplexere Struktur erzeutgt werden. 

Gruß Maeggy


----------



## Rudi (28 September 2008)

Maeggy schrieb:


> Ausgänge als Speicher zu nutzen hat tatsächlich ab und an zu Schwierigkeiten geführt. Mindestens bei S5.


Welche Schwierigkeiten sollen das denn sein ???


----------



## Maeggy (29 September 2008)

Hallo Rudi

hab ich in eigenen Anwendungen Erfahrungen gesammelt, als ich Ausgänge als SR Gliedern verwendet habe. Da es allerdings schon mehr als 20 Jahre her ist kann ich dies nicht mehr näher erkläutern. Deshalb empfehle ich Schrittkettenergebnisse immer in DB's zu speichern.

Gruß Maeggy


----------



## derwestermann (9 Oktober 2008)

Ausgänge setzen hat für mich den Nachteil, steht die Anlage in Störung o.ä. und ich muß eine Handbedienung machen, komme ich mit der Schrittkette vielleicht in Konflikt. Habe ich einen Schrittkettenmerker und eine Zuweisung, UND-Verknüpft mit Auto und was weiß ich, dann kann ich das mit Hand und was weiß ich verodern und bin immer sauber.


----------



## Beren (9 Oktober 2008)

*gelöscht*


----------

