# Schrittketten - Mysterium



## MSP (25 August 2005)

Hallo,

wir versuchen im Moment unser Hochregallagermodell mittels Schrittketten ans laufen zu bekommen.

Dazu haben wir zuerst Funktionsbausteine geschrieben die einzelne Anlagenteile ansteuern, die wir dann in einer Schrittkette zu einem ganzen Zusammenfügen wollen.

Und zum Thema Schrittketten habe ich nun einige Fragen, in der Hoffung das Ihr mir weiter gelfen könnt als die beiden Siemens-Ausbildungsunterlagen zu dem Thema  :evil: 

1. Wenn ich in einem Schritt, z.B. S3, INT-Werte in ein Merkerwort MW1 schreibe, um diese im nächsten Schritt zu benutzen, so ist das Merkerwort leer... Wie kann man also Werte 'speichern' um diese innerhalb der Schrittkette wirksam zu Speichern bzw. an andere Schritte zu übergeben.
In unserem Fall geben wir im 1. Schritt per Wahlschalter die X- und die Y-Koordinaten vor, die das RBG anzusteuern hat.
Wir lesen dabei die Werte als Byte ein und splitten diese dann auf, um die INT-Werte einzeln an die Funktionsbausteine für die X- und Y-Achse zu übergeben.
Nur wenn diese Werte in MW1 bzw MW2 geschrieben werden, und dann im nächsten Schritt diese beiden Merkerworte auf den Eingang der Achsenbausteine gegeben werden, so zeigt der Onlinestatus immer eine 0 an ...  :? 

2. Not-Aus
Man kann ja einen Interlock programmieren der erfüllt sein muss, damit die Kette weiterläuft.
Wir geben nun den Not-Aus auf den Interlock, und wenn dieser Ausgelöst wird, hält die Kette auch brav in diesem Schritt inne.
Da wir aber innerhalb der Schritte FB's aufrufen die zB ein Band laufen lassen, läuft das Band auch brav weiter.
Wir haben das also so gemacht das wir den Not-Aus auch im FB nutzen um das Band anzuhalten, was dann aber den Interlock-Not-Aus irgendwie überflüssig erscheinen lässt...
Daher hier die Frage wie Ihr so etwas regelt bzw. angeht.
Ist eventuell die Vorgehensweise bei uns falsch mit den FB's/FC's?

3. Prüfen auf Korrekte werte und danach laden von bestimmten Werten

Wir haben unser Lager so aufgebaut, das es Etagen 1, 2 und 3 gibt.
Da wir Gabellichtschranken zur Positionierung nutzen, haben wir pro Etage 2 Flankengeben, um eine obere und eine untere Position zu ermitteln zum Ein- und Auslagern.
Wir haben nun in der untersten Y-Position den Wert 0 zum auslagern, 1 zum einlagern.
Etage 2 entsprechend Werte 2 und 3 und Etage 3 dann die Werte 4 und 5.

Wir möchten es so machen, das wenn der Bediener sagt das Er in ein Fach in Etage 1 einlagern möchte, das der Anfahrpunkt dann den Y-Wert 1 anfährt.
Soll in Etage 3 ausgelagert werden, so muss der Wert 4 angesteuert werden.

Wir haben nun folgende Bedinungen:

Einlagern
Etage 1: #1
Etage 2: #3
Etage 3: #5

Auslagern
Etage 1: #0
Etage 2: #2
Etage 3: #4

Ich muss also irgendwie in einem FB sagen können das wenn Einlagern gewählt ist und die Etage 2, das dann der Wert 3 ausgegeben wird mit dem die Y-Achse dann arbeiten kann.
Im Moment mache ich das so, das wenn Etage 1 / Einlagern gewählt wurde, einfach auf den Y-Wert 0 addiert wird.
Bei Etage 2 entsprechend 1 und bei Etage 3 dann die 2 aufaddiert.
Beim Auslagern beginnt das ganze mit -1 für Etage 1, +0 bei Etage 2 und +1 bei Etage 3.

Ist das so OK auch von den Laufzeiten oder gibt es da eine eleganzere Lösung für?
Ein anderer Versuch war zB mit Merkern, was aber noch mehr Netzwerke ergab...

Mit freundlichen Grüßen,
Michael


----------



## RMA (25 August 2005)

> 1. Wenn ich in einem Schritt, z.B. S3, INT-Werte in ein Merkerwort MW1 schreibe, um diese im nächsten Schritt zu benutzen, so ist das Merkerwort leer... Wie kann man also Werte 'speichern' um diese innerhalb der Schrittkette wirksam zu Speichern bzw. an andere Schritte zu übergeben.



Habe leider wenig Zeit da ich gleich los muss, aber...

erstens würde ich mich abgewöhnen WORDs auf ungerade Adressen zu schreiben, S7 lässt das zwar zu im Merker Bereich zu (nicht aber im DBs), aber es ist kein guter Praxis und kann zu komischen Problemen führen bei Adress-Überschreitungen

Wass dein Merker angeht, Du kannst hier nicht mit "N" arbeiten, das setzt das Bit nur solnge der Schritt aktiv ist. Hier musst Du "S" Setzen (und Rücksetzen) nutzen so dass der Wert im nächsten Schritt noch vorhanden ist.

Habe leider kein Zeit um weiter zu lesen, aber wenn die anderen nicht weiter helfen können, guck ich morgen wieder rein.


----------



## MSP (25 August 2005)

Hallo,

also ich arbeite nicht mit N oder S bei den Merkerworten, sondern ich habe einfach einen CALL benutzt der den FB aufruft der am Ausgang das Merkerwort bzw die INT-Zahl liefert.
An diesen Ausgang habe ich nun das MW1 stehen und möchte dieses nun im nächsten Schritt nutzen...

Michael


----------



## Zottel (26 August 2005)

Da du schreibst MW1,MW2 noch etwas zum Aufbau des Speichers einer S7:
Deine S7 hat z.B. 256 BYTE Merkerspeicher.
Diesen kannst du als MB0 bis MB255 ansprechen.
Sprichst du MW0 an, so werden MB0 UND MB1 benutzt.
Sprichst du MW1 an, so werden MB1 UND MB2 benutzt.
Sprichst du MW2 an, so werden MB2 UND MB3 benutzt.
MW1 "überlagert" also Teile von MW0 und MW2.
Ferner liegen die Merker M0.0 bis M0.7 im MB0. Die Benutzung dieser Merker ändert also auch den Inhalt von MB0, MW0,MD0 (ein Doppelwort, überlagert MB0 bis MB3).
Du kannst denselben Speicher immer nur einmal nutzen. Sonst gibt es das, was RMA "komische Probleme" nennt.
Unter "Referenzdaten" kannst du ermitteln, welche Adressen dein Programm benutzt, in welcher Weise es auf sie zugreift und wo der Zugriff erfolgt.


----------



## RMA (26 August 2005)

Weil ich das gestern eilig hatte, hatte ich nicht bis zum dritten Satz in §1 gelesen und das mit dem MW1 & MW2 nicht gelesen. Aber das hat Zottel schön aufgegriffen - danke Zottel.

Du sagst es nicht explizit, aber ich gehe davon aus, dass Du S7-GRAPH benutzt für Deine Schrittkette - oder nennst Du die Art das Programm abzuarbeiten nur so? Wenn Du mit GRAPH arbeitest ist es sinnvoll so viel wie möglich innerhalb von GRAPH zu machen. Selbstverständlich kann man aus GRAPH FBs und FCs mit CALL aufrufen aber wenn man überwiegend so arbeitet dann verschenkt man viele der Möglichkeiten von GRAPH insbesondere was das Beobachten vom Program ablauf angeht - dann hättest Du es genau so gut (und günstiger - da spricht der Schotte schon wieder  ) in STL machen können.

Es wäre vielleicht nicht schlecht wenn Du mindest teilweise Dein Code posten könntest, im Moment ist es mir nicht ganz klar genau was Du machst


----------



## MSP (26 August 2005)

Hallo,

erstmal ein dickes DANKE an Zottel, das mit dem Speicher war mir in der Tat nicht so bewusst!

Zu Grapg, ja wir arbeiten mit Graph, dort erstellen wir bzw haben vor die Ketten für das Ein- und Auslagern im Automatikmodus sowie den Handbetrieb zu programmieren.

In den einzelnen Schritten rufe ich dann jeweils einen FB oder FC auf der einzelnen Funktionen abarbeitet, wie zB das Zulaufband, die X- oder Y-Achse etc.

Der Gedanke dahinter ist eigendlich das Programm Modular zu halten und die SK so kurz wie möglich, aber soweit das bis jetzt gelungen ist bei Uns scheint das doch nicht zu gehen.

Die Gedanken gehen auch schon in die Richtung das ganze als komplette Kette ohne die FB / FC-Aufrufe zu erstellen, entweder in Graph oder AWL.

Da wir jedoch im Unterricht nur mit Möller / Sucosoft arbeiten und kein Stück Siemens / Step7, müssen wir uns alles im Moment selber erarbeiten und raussuchen 

Den Code würde ich gerne posten, jedoch habe ich schon Wochenende und der Laptop mit Step7 drauf ist in der Schule an der Anlage  :? 

Gruss,
Michael


----------

