# Eine Frage zu Flankenmerkern...



## anne (20 Mai 2010)

Hallo Ihr,

ich habe eine kurze Frage:

Wenn ich beispielsweise programmiere


```
U E 0.0
U E 0.1
U E 0.2
FP M0.0
= A 0.0
```
 
wird dann die Flanke aus allen drei Eingängen gebildet?

Wenn ich möchte, dass *nur E 0.0* eine Flanke bilden soll, muss ich dann das Ganze wie folgt programmieren?


```
U E 0.0
FP M0.0
U E 0.1
U E 0.2
= A0.0
```
 
Lieben Dank!


----------



## marlob (20 Mai 2010)

kurz und knapp: JA


----------



## anne (20 Mai 2010)

Gut, dann stimmen sozusagen meine *beiden* "Behauptungen"?

Vielen Dank!


----------



## Manfred Stangl (20 Mai 2010)

ja beide stimmen.


----------



## anne (20 Mai 2010)

Dank' euch!


----------



## sailor (20 Mai 2010)

Hi Anne,

In Teil 1 wird die Flanke nur dann gebildet, wenn all 3 E "1" sind. wird nur einer zu "1" dann nicht.
In Teil 2 wird die Flanke immer gebildet, wenn E0.0 zu "1" wird.
Der A0.0 ist nur dann 1 , wenn E 0.1 und E0.2 "1"sind. und die Flanke von E0.0 kommt.
Gruß
Sailor


----------



## anne (20 Mai 2010)

Supi, hab's kapiert! 

Vielen Dank!


----------



## hucki (20 Mai 2010)

Und noch einer:
In Teil 1 *kann* E0.0 als Letztes "1" werden (oder E0.1/E0.2)
in Teil 2 *muss* E0.0 als Letztes "1" werden, damit A0.0 "1" wird.


----------



## PN/DP (20 Mai 2010)

*Spezialanwendung?*


```
U E 0.0
...
FP M0.0
...
= A 0.0
```
A0.0 ist hier nur beispielhaft? Bzw.: wofür macht es Sinn, einen Ausgang für nur 1 Zyklus einzuschalten?

Gruß
Harald


----------



## anne (20 Mai 2010)

PN/DP schrieb:


> A0.0 ist hier nur beispielhaft? Bzw.: wofür macht es Sinn, einen Ausgang für nur 1 Zyklus einzuschalten?
> 
> Gruß
> Harald


 
Ja Harald, A0.0 war nur beispielhaft!


Jetzt ist doch noch eine Verunsicherung bei mir aufgetreten:


"hucki" schreibt ja zu meinem Beispiel


U E 0.0
FP M0.0
U E 0.1
U E 0.2
= A0.0 

in Teil 2 *muss* E0.0 als Letztes "1" werden, damit A0.0 "1" wird. 


Warum gibt es hier eine *zeitliche* Abhängigkeit?


----------



## Manfred Stangl (20 Mai 2010)

wegen des zyklus.
wenn die flanke positiv wird, ist sie das nur einen zyklus, wenn deine beiden eingänge später hi werden wird das nix. da nicht alle eingänge hi sind


----------



## anne (20 Mai 2010)

Hm, wie sonst könnte man das dann programmieren?

Die Aufgabe besteht darin, dass ein Zylinder nur dann startet, wenn

- eine LS über eine pos. Flanke einen Impuls abgibt
- ein anderer Zylinder in seiner GS steht
- ein vorhergehender Schritt (einer Schrittkette) gesetzt ist


Frage:

*Wie* kann ich da eine zeitliche Abhängigkeit berücksichtigen?

Vielen Dank!


----------



## vierlagig (20 Mai 2010)

anne schrieb:


> *Wie* kann ich da eine zeitliche Abhängigkeit berücksichtigen?



a) die flankenauswertung wie in fall1 realisieren, wobei dann bei jeglichem signalwechsel (0->1) aller beteiligten operanden ausgelöst wird
b) die flankenauswertung mit einem hilfsmerker abschließen und diesen in der verknüpfung verwenden


----------



## anne (20 Mai 2010)

Danke vierlagig,

aber was wäre nun in dem konkreten Beispiel


```
U  E0.0     // LS
FP M0.0     // positive Flanke
U  M10.1    // Schrittmerker Schritt_1
U  E0.2     // BS, Zylinder_1 (GS)
S  M10.2    // Schrittmerker Schritt_2
```
 

wenn z.B. zuerst M10.1 den Status 1 erhält, danach E0.2 und erst danach E0.0 - würde dann der Merker M10.2 *nicht* gesetzt werden?

Verstehe das grad irgendwie nicht... 


Wie würde dein Vorschlag b) für mein Beispiel aussehen?


----------



## marlob (20 Mai 2010)

anne schrieb:


> Danke vierlagig,
> 
> aber was wäre nun in dem konkreten Beispiel
> 
> ...


In dem Fall wird M10.2 gesetzt. M10.1 und E0.2 müssen 1-Signal haben bevor E0.0 hoch wird.


----------



## vierlagig (20 Mai 2010)

anne schrieb:


> wenn z.B. zuerst M10.1 den Status 1 erhält, danach E0.2 und erst danach E0.0 - würde dann der Merker M10.2 *nicht* gesetzt werden?



doch, dann würde er gesetzt werden.
vielleicht kann es untenstehende tabelle (bezogen auf deinen code) ein wenig verdeutlichen:

```
*

E0.0	M10.1	E0.2    M10.2
0->1	0	0	0
0->1	1	1	1
0->1	0->1	1	1
1	0->1	1	0
```


----------



## vierlagig (20 Mai 2010)

marlob schrieb:


> M10.1 und E0.2 müssen 1-Signal haben bevor E0.0 hoch wird.



oder mindestens im selben zyklus 1 bekommen haben )


----------



## anne (20 Mai 2010)

Ok, dann ist das aber ja eher eine sehr unvorhersehbare und unzuverlässige Programmierung! *unzufriedenmitmirbin* 

Wie könnte ich das Beispiel zuverlässiger programmieren, wenn eben nur E0.0 an der Flanke beteiligt sein soll und M10.2 *immer* gesetzt werden soll, unabhängig davon, wer zuerst den Status 1 erhält?


----------



## Günni1977 (20 Mai 2010)

anne schrieb:


> Ok, dann ist das aber ja eher eine sehr unvorhersehbare und unzuverlässige Programmierung! *unzufriedenmitmirbin*
> 
> Wie könnte ich das Beispiel zuverlässiger programmieren, wenn eben nur E0.0 an der Flanke beteiligt sein soll und M10.2 *immer* gesetzt werden soll, unabhängig davon, wer zuerst den Status 1 erhält?



hi,
das geht halt eben nicht. wenn du mit einer Flanke arbeitest, muss der Rest schon den Zustand 1 haben, weil die gemerkte Flanke im nächsten Zyklus "weg ist". einzige Möglichkeit wäre bei der Flanke ein weiteres Bit zu setzen. dann musst du allerdings überlegen/aufpassen, wann dieses Bit wieder rückgesetzt wird...


----------



## vierlagig (20 Mai 2010)

Günni1977 schrieb:


> dann musst du allerdings überlegen/aufpassen, wann dieses Bit wieder rückgesetzt wird...



naja, wenn die aktion gestartet oder abgebrochen wurde?!


----------



## Günni1977 (20 Mai 2010)

vierlagig schrieb:


> naja, wenn die aktion gestartet oder abgebrochen wurde?!



...und wenn ich nochmal nachdenke...


```
U E0.0
FP M0.0
S M1.0

U M1.0
U M10.1
U E0.2
S M10.2
```
das geht dann natürlich auch ohne Flanke, weil ja der M1.0 gesetzt wird...

die konkrete Aufgabenstellung wäre vielleicht hilfreicher...


----------



## Larry Laffer (20 Mai 2010)

Günni1977 schrieb:


> ... die konkrete Aufgabenstellung wäre vielleicht hilfreicher...


 
Sehe ich auch so ...
Vielleicht ist es sogar richtig, diesen Punkt zum Bestandteil der Schrittkette zu machen (sprich die SK zu erweitern) ...

Gruß
LL


----------



## PN/DP (20 Mai 2010)

anne schrieb:


> Hm, wie sonst könnte man das dann programmieren?
> 
> Die Aufgabe besteht darin, dass ein Zylinder nur dann startet, wenn
> 
> ...


Das löst man am Besten mit einem zusätzlichen Warte-Schritt in der Schrittkette
"Warte bis alle Bedingungen zum Ausfahren des Zylinders erfüllt sind" und danach 
zum Schritt "Ausfahren des Zylinders" weiterschaltet.

Dann braucht man keine Flanke. Die LS muß nur (egal wie lange schon) belegt sein.
In welcher zeitlichen Reihenfolge die Bedingungen erfüllt werden ist dann egal. 
Hauptsache irgendwann sind alle Bedingungen gleichzeitig erfüllt.

Gruß
Harald


----------



## anne (20 Mai 2010)

Günni1977 schrieb:


> die konkrete Aufgabenstellung wäre vielleicht hilfreicher...


 
Nun, die eigentlich Aufgabe habe ich eigentlich schon genannt:

Die Aufgabe besteht darin, dass ein Zylinder nur dann startet, wenn

- eine LS über eine pos. Flanke einen Impuls abgibt
- ein anderer Zylinder in seiner GS steht
- ein vorhergehender Schritt (einer Schrittkette) gesetzt ist

Insgesamt sollen sechs Zylinder in die Schrittkette eingebunden werden. Als Startbedingung der anderen Zylinder habe ich jeweils den vorherigen Schrittmerker sowie die entsprechende Stellung des Zylinders angesetzt.


----------



## Michael Müller (21 Mai 2010)

Hi,
ich würde dir generell bei solchen Schrittketten ein zusätzliche Endlagen oder Schrittüberwachung empfehlen. 
So kommst du auch aus der Situation
U e0.0
fp m0.0
u e0.1  // noch nicht da?       
	

	
	
		
		

		
			




u e0.2  // oder noch nicht da  
	

	
	
		
		

		
		
	


	



= a0.0
wieder raus. 
	

	
	
		
		

		
		
	


	




Vorsicht bei Sprungen mit den Flankenmerkern.

u m0.0
spb m001

u e 0.0
fp m 0.1
= a 0.0
s m0.0

m001 : nop 0

u e0.1
fp m0.2
r m0.0


Was macht der fp m 0.1 wenn bei Durchlauf ( m0.0 =0) der E0.0 schon 1 ist?

Grüße michael


----------



## anne (21 Mai 2010)

Michael Müller schrieb:


> Was macht der fp m 0.1 wenn bei Durchlauf ( m0.0 =0) der E0.0 schon 1 ist?
> 
> Ich würde dir generell bei solchen Schrittketten eine zusätzliche Endlagen oder Schrittüberwachung empfehlen.
> Grüße michael


 
Hallo Michael,

wenn bei Durchlauf E0.0 schon 1 ist, so wird der FP M0.1 vermutlich *keine *Flanke mehr bilden.


Habe am Anfang der Schrittkette einen Richtimpuls programmiert, der ja dafür da ist, dass der Schritt 0 beim ersten Mal erreicht wird:


```
UN M0.0
= M0.1
S M0.0
O M0.1
O
U "Zylinder_1 in GS"
S M10.0   // Schritt 0
U M10.1   // Schritt 1
R M10.0
```
 

Aber wie kann ich bei Schrittketten eigentlich erreichen, dass nach dem Einschalten der SPS oder nach Spannungsaus (z.B. Notschalter drücken) *alle* Zylinder wieder in ihrer GS stehen - gibt es hierfür eine Möglichkeit?

Danke für eure Unterstützung!


----------



## Michael Müller (21 Mai 2010)

mache doch einfach eine Initialisierungsschritt der bei notaus oder neustart durchlaufen wird.

Bei manchen Schrittketten habe ich auch schon mal 
am Schrittanfang alle Funktionen gnadenlos gesetzt bzw.rückgesetzt 
so wie eigentlich der Zustand sein soll wenn ich in den Schritt reinkomme.

Grüße Michael


----------



## anne (21 Mai 2010)

Wie kann ich so etwas machen, Michael?

Dazu müsste ich ja die entsprechenden Schritte setzen, die für die GS der einzelnen Zylinder zuständig sind, oder?

Aber wo baue ich so einen Initialisierungsschritt in die Schrittkette ein?


----------



## Michael Müller (21 Mai 2010)

mache doch einfach:

ob100
set
r m100.0 // Neustart


u E0.0      // Nothalt =0
u M100.0  // Neustart
spb NHLT 

R A0.0          // Zylinder 1 in GS fahren
R A0.1          // zylinder 2 in GS  fahren
usw..

// nicht vergessen Schrittmerker zurücksetzen 
r M10.0          //Schritt 1
r M10.1          //Schritt 2
usw..

S m100.0       // Neustart fertig
NHLT  : nop 0 // Ziel

Grüße 
Michael


----------



## anne (21 Mai 2010)

Michael Müller schrieb:


> mache doch einfach:
> 
> ob100
> set
> ...


 

Sorry für die vielen dummen Fragen, aber irgendwie ist mir die Programmierung (oder was sie bewerkstelligen soll) nicht klar...

Könnte das bitte jemand etwas ausdeutschen - sozusagen für Dummies?


----------



## Michael Müller (22 Mai 2010)

ob100
set
r m100.0 // Neustart

Also der OB100 ist ja der Anlauf-OB und somit wird  beim Anlauf der SPS der Merker M100.0 auf 0 gesetzt - nur *wofür *das? 
Könnte sein das der Merker remanent ist! Einstellung in der CPU.


u E0.0 // Nothalt =0
u M100.0 // Neustart
spb NHLT 

Soll E0.0 der *NotAus-Schalter* sein? Ja
Da M100.0 zurückgesetzt wurde, kann ja nicht zu der  Sprungmarke NHLT gesprungen werden... sondern es geht weiter mit dem  Rücksetzen der einzelnen Ausgänge? Richtig - der wird aber nach einmaligen Durchlauf gesetzt. Es wird nun solange durchlaufen bis der E0.0 auf 1 geht. Also Nothalt beendet.

R A0.0 // Zylinder 1 in GS fahren
R A0.1 // zylinder 2 in GS fahren
usw..

// nicht vergessen Schrittmerker zurücksetzen 
r M10.0 //Schritt 1
r M10.1 //Schritt 2
usw..

Genügt es hier nicht *nur* die Schrittmerker  zurückzusetzen, die die entsprechenden Ausgänge der Zylinder in GS  fahren? 

Wenn du das so programiert hast - ja.

 S m100.0 // Neustart fertig
NHLT : nop 0 // Ziel

Durch *was* wird M100.0 hier an dieser Stelle  gesetzt?
Was passiert an der Sprungmarke? Nichts! Es geht weiter im Programm.

Grüße Michael


----------



## rostiger Nagel (22 Mai 2010)

Hallo Michael und Anne,
das ist mir zu bunt, versuche es doch mal mit Zitaten und Code Tags

nur noch mal so als Beispiel




> Wie wird eine UND-Verknüpfung gemacht?


 
hier kann jetzt eine Antwort stehen mit den endsprechenden code.

```
U E 0.0
      U E 0.1
      = A 0.0
```


----------



## PN/DP (22 Mai 2010)

Bevor Anne das konfuse OB100-Beispiel von Michael aufwändig austestet,
ein paar Bemerkungen dazu.

Der OB100 wird beim STOP->RUN-Übergang der CPU *genau 1 mal* aufgerufen.
Das umständliche rücksetzen, verknüpfen, "spb NHLT" und setzen des M100.0 
in einem bedingten Programmzweig im OB100 ist sinnlos.
Der Sprung "spb NHLT" wird nie ausgeführt.


Michael Müller schrieb:


> [Anne:] Da M100.0 zurückgesetzt wurde, kann ja nicht zu der  Sprungmarke NHLT gesprungen werden... sondern es geht weiter mit dem  Rücksetzen der einzelnen Ausgänge? [Michael:] Richtig - der wird aber nach einmaligen Durchlauf gesetzt. *Es wird nun solange durchlaufen bis der E0.0 auf 1 geht.* Also Nothalt beendet.


Diese Aussage ist falsch, der OB100 wird ja nur 1x aufgerufen.

Ausgänge im OB100 rücksetzen ist völlig überflüssig.
Wenn der OB100 aufgerufen wird, dann sind alle Ausgänge=0.
Außer ein Ausgang ist geforced, dann nützt aber ein Rücksetzen nichts.

Einzelne oder alle Schrittmerker im OB100 rücksetzen ist ebenso sinnlos 
oder gar gefährlich (eventuelle Kollisionsgefahr der Zylinder!).
Entweder die Schrittmerker sind normal nicht-remanent, dann sind beim 
STOP->RUN-Übergang und somit im OB100 schon alle Schrittmerker=0.
Oder der Programmierer hat absichtlich remanente Schrittmerker benutzt,
dann ist das Rücksetzen im OB100 nicht zielführend.
Eine geordnete und ggf. zeitlich gestaffelte Reaktion der Schrittkette 
auf das Aus-/Einschalten der Steuerung muß separat programmiert werden.
Das könnte eine eigene Grundstellungs-Initialisierungs-Schrittkette sein,
falls das Anfahren der Grundstellung beim Einschalten erwünscht ist.

Das Verknüfen des Notaus-Signals im OB100 ist sinnlos.
Bei Einschalten der Steuerspannung MUSS Notaus zunächst aktiv sein und 
irgendwann später mit einem extra-Taster erst quittiert/aufgehoben werden.
Wenn nur die CPU in STOP und dann wieder in RUN geschaltet wird, dann muß 
je nach Aufgabenstellung und Gefährdungs-Analyse entschieden werden, ob das 
einen Einfluß auf die Schrittkette haben soll und wie dann ggf. reagiert 
werden soll.


Noch ein Sicherheits-Hinweis zu den Zylindern:
Wenn das z.B. Pneumatik-Zylinder sind, dann muß für jeden Zylinder durchdacht
werden, wie der Zylinder auf Ausschalten, Einschalten und Notaus reagieren 
soll und entsprechende Magnetventile eingesetzt werden.
Stichwort: Gefährdungs-Analyse
Und: das Aktivieren von Notaus darf keine gefährlichen Bewegungen auslösen.
Und: Nur durch Einschalten der Steuerspannung bzw. Spannungswiederkehr 
nach Spannungsausfall darf die Maschine in der Regel nicht selbständig 
Bewegungen ausführen.

Gruß
Harald


----------



## Michael Müller (22 Mai 2010)

Harald,
vielen dank für deine ausführliche Beschreibung.
Mein Fehler war natürlich anzuzeigen wo der OB1 anfängt.
Sorry,


ob100
set
r m100.0     // Neustart


OB1!!!!!!!!!!!!!!!!!!!!!

u E0.0          // Nothalt =0
u M100.0      // Neustart
spb NHLT 


R A0.0          // Zylinder 1 in GS fahren
R A0.1          // zylinder 2 in GS fahren
usw..

// nicht vergessen Schrittmerker zurücksetzen 
r M10.0        //Schritt 1
r M10.1        //Schritt 2
usw..


 S m100.0       // Neustart fertig
NHLT : nop 0  // Ziel




Grüße Michael


----------



## marlob (22 Mai 2010)

@Michael

hier noch mal Helmuts Hinweis. Besonders das rote beachten ;-)



Helmut_von_der_Reparatur schrieb:


> Hallo Michael und Anne,
> das ist mir zu bunt, versuche es doch mal mit Zitaten und Code Tags
> 
> nur noch mal so als Beispiel
> ...


----------



## anne (25 Mai 2010)

Hallo und lieben Dank für eure Erklärungen und Hilfestellungen...

In dem aktuellen Projekt müssen die sechs Zylinder nach dem Abschalten mittels AUS-Taster noch ihre Bewegungen zu Ende bringen. Dies ist mir dadurch gelungen, dass ich als Bedingung für Schritt 0 den AUS-Taster hinzugenommen habe. 

Mein Problem ist der Start *nach* NOTAUS!

Beim Drücken von NOTAUS müssen alle Zylinder *sofort* stehenbleiben. Das klappt ja recht gut durch das Rücksetzen der einzelnen Schrittmerker.

Aber wie kann ich eine Art "Grundstellungsfahrt" nach NOTAUS bewerkstelligen - nachdem also die Spannung wieder eingeschaltet wurde?

Wäre hierfür das Beispiel von "Michael Müller" mit dem OB100 und OB1 geeignet oder ist so etwas noch einfacher zu programmieren?


----------



## Paul (25 Mai 2010)

Hallo
@Anne
Aber wie kann ich eine Art "Grundstellungsfahrt" nach NOTAUS bewerkstelligen - nachdem also die Spannung wieder eingeschaltet wurde?

Die Maschine darf keinesfalls nach <Hauptschalter Ein> irgendwelche
Zuckungen ausführen. Auch nicht nach quittieren des Not-Aus und Spannungswiederkehr

Außerdem wird der OB100 nach Not-Aus gar nicht abgearbeitet weil du ja
bei Not-Aus nicht die CPU von der Versorgungsspannung trennst (normalerweise)

Ich würde die Zylinder mit einer Art Handfunktion (Einrichtbetrieb) vom 
Bediener zurückfahren lassen. Wenn die Maschine nach Not-Aus kreuz und quer
stehengeblieben ist kann das sehr teuer bzw. sogar gefährlich werden Zylinder 
einfach zu bewegen. Es sei denn die Maschine ist so simpel das sich da wirklich 
nichts in die Quere kommen kann.
Trotzdem darf sich ohne Tastendruck o. Ä nichts bewegen

Mfg
Paul


----------



## anne (25 Mai 2010)

Paul schrieb:


> Es sei denn die Maschine ist so simpel das sich da wirklich
> nichts in die Quere kommen kann.
> Trotzdem darf sich ohne Tastendruck o. Ä nichts bewegen
> Mfg
> Paul


 
Danke für deine Antwort Paul. Nun im Grunde ist die Maschine nicht schwierig - und ohne einen Tastendruck würde sich nach NOTAUS und Spannungswiederkehr auch *nichts* bewegen, weil es einen Button auf einem Panel gibt, der sozusagen den Automatikbetrieb erst startet.

Gut, eine Möglichkeit ist natürlich alle Zylinder erst mal per Hand in ihre GS zu bewegen - aber mich würde einfach einmal interessieren, ob ich das auch programmieren könnte und vor allem wie?

Lieben Dank!


----------



## PN/DP (25 Mai 2010)

Ich würde eine zweite Schrittkette "Grundstellungsfahrt" programmieren, und solange diese Schrittkette 
nicht im Endschritt "Grundstellungsfahrt beendet" steht, die Produktiv-Schrittkette sperren bzw. deren 
Schrittmerker alle auf 0 halten. Bei CPU-Start oder Notaus wird die Schrittkette "Grundstellungsfahrt" 
auf den Startschritt gesetzt, der auf die Start-Taste vom Panel wartet.

Es kann aber sein, daß ein vollkommen automatisches Anfahren der Grundstellung nicht immer möglich ist.
Bei/nach einem Notaus werden sich in der Regel noch Produkt(e) irgendwo in der Anlagen befinden, die 
manuell entfernt oder durch die Bearbeitungsstrecke gefahren werden müssen. 
Wenn also sowieso Maschinenteile im Handbetrieb bewegt werden müssen, dann lohnt sich eine automatische 
Grundstellungsfahrt vielleicht nicht bzw. ist nicht 100% kollisionsfrei-sicher realisierbar.
Du als Programmiererin mußt Dir alle möglichen und unmöglichen Stellungen vorstellen können, in denen 
sich die Maschine nach Spannungswiederkehr befinden kann.

Es kommt immer darauf an, wie groß ist die Anlage, wieviele Aktoren müssen wie verfahren werden. 
Eventuell ist auch eine Halbautomatik für jeden Zylinder, Greifer oder was-weiß-ich sinnvoll, bei der mit 
verschiedenen Tastern jeweils nur 1 Aktor für sich eine eigene Grundstellungsfahrt macht. Das wäre auch 
schon eine Unterstützung des Anlagenfahrers, der "aufräumen" muß. Der Anlagenfahrer entscheidet, in welcher 
Reihenfolge er die einzelnen Aktoren ihre Grundstellungsfahrt machen läßt.

Ohne Deine Anlage genauer zu kennen, kann man Dir nicht "die" richtige Grundstellungs-Prozedur empfehlen.

Gruß
Harald


----------



## anne (26 Mai 2010)

Danke für deine Erläuterungen Harald.

Ja, ist sicher schwer etwas zu sagen, wenn man die Anlage nicht kennt. Die Zylinder nach NOTAUS zunächst manuell in die GS zu fahren ist vermutlich die sicherste Variante. 

Nur so aus Neugierde...

Gibt es denn keine Möglichkeit, *nicht* mit einer zweiten Schrittkette, sondern ähnlich dem Vorschlag des Users Michael Müller, über einen OB oder Ähnlichem die Zylinder in ihre GS fahren zu lassen, nachdem z.B. ein Taster (Grundstellung) gedrückt wird?


----------



## rostiger Nagel (26 Mai 2010)

anne schrieb:


> Danke für deine Erläuterungen Harald.
> 
> Ja, ist sicher schwer etwas zu sagen, wenn man die Anlage nicht kennt. Die Zylinder nach NOTAUS zunächst manuell in die GS zu fahren ist vermutlich die sicherste Variante.
> 
> ...


 
Hallo Anne, 
mann kann im Anlauf OB einen Initalisierungsmeker setzen und dann im
Zyklischen Programm damit irgendwie in die Grundstellung fahren.
Dieses muß aber geordnet passieren, dazu muß Mann bzw. Frau den Aufbau der Anlage kennen.
Wenn sich da Einrichtungen oder Aggregate beim Grundstellung fahren in 
die Quere kommen, ist die Schrittkette schon der richtige weg.
Die gestaltung der Schrittkette kann so sein das diese in der Ablauf-
schrittkette intregiert ist oder sie ist eine separate.
Grundsätzlich wird aber die GS-Fahrt nicht über einen separaten OB
ausgeführt, dann schon lieber ein eigener FC oder FB, der im zyklischen
Programm ausgeführt wird.

gruß helmut


----------



## Ralle (26 Mai 2010)

@anne

Die Variante der geordneten Grundstellungsfahrt über einen Initialisierungsteil (z.Bsp. Schritt 1-10) der Schrittkette kenne ich auch, verwende das allerdings sehr selten. In meinen Maschinen verriegele ich ohnehin alle Antriebe/Zylinder, die sich ins Gehege kommen können nochmals gegeneinander, so daß auch bei einer Handbetätigung nichts zerstört werden kann. Es hat also ein Horizontalzylinder nur dann eine Bewegungsfreigabe, wenn alle Vertikalzylinder in Grundstellung sind usw, unabhängig von der Schrittkette. Wird dann eine Grundstellungsfahrt ausgeführt, wartet jeder Zylinder seine Freigabe ab, woraus dann ein "nacheinander fahren" resultiert. Nur in ganz seltenen Fällen, wenn Zylinder sich gegenseitig freifahren müssen, also einer der Zylinder z.Bsp. erst in Arbeitstellung fahren muß, damit der andere Zylinder in Grundstellung fahren kann, muß auch mal eine Schrittkette her.


----------



## rostiger Nagel (26 Mai 2010)

Richtig sinn macht eine Schrittkette, nur so als beispiel, wenn ein Bohrer
oder Fräser in einen Werkstück ist. Dann darf z.b. das Werkstück erst
entspannt werden wenn der Bohrer wieder in Grundstellung ist. Sonst
könnte ein herumschleudern des Werkstückes erfolgen.

Oder Bei einen Portal, wenn ein Werkstück von A nach B gefahren wird.
Da kannst du betimmt nicht das Werkstück zurück zum Aufnahmeplatz
fahren oder einfach das Vakuum lösen, bevor das Werkstück abgelegt ist.

Wie gesagt die Maschine bzw. Aufgabenstellung gibt vor was wie zu
machen ist. Vlt. beschreibst du einfach mal was du da so hast, dann
kann man zielgerichteter hilfestellung geben.


----------



## anne (26 Mai 2010)

Dank‘ euch!

Die Anlage, an der ich mich grad zu schaffen mache… 

In einem großen Lager gibt es einen Kettenförderer, an dem in regelmäßigen Abständen Haken angebracht sind. An den einzelnen Haken sind Verpackungen angehängt. Bei Anforderung fährt ein vertikal angebrachter Zylinder 1 nach oben in die AS - danach fährt ein Horizontalzylinder 2 nach vorne in die AS und somit in den Haken am Förderer, während ein Schwenkzylinder die Verpackung vom Haken nimmt und an eine Waage übergibt. Drei weitere Zylinder übergeben die Verpackung dann anschließend an weitere Anlagenteile.



> In meinen Maschinen verriegele ich ohnehin alle Antriebe/Zylinder, die sich ins Gehege kommen können nochmals gegeneinander, so daß auch bei einer Handbetätigung nichts zerstört werden kann.


 
Hättet ihr evtl. mal so eine "Verriegelungs-Programmierung" für mich, damit ich mir das mal durchsehen kann, wie man das in der Praxis bewerkstelligen kann? *weißschonichbinlästig*

Vielen Dank für eure Geduld mit mir...


----------



## rostiger Nagel (26 Mai 2010)

das musst du natürlich für deine Anlage anpassen


```
U(
U #Einrichten
U #Taster_drehen_Grundstellung
O
U #Automatik
U #irgendetwas
)
U #Freigabe_Not_Aus
U #Vertikal_Ruhestellung
= #Ventil_drehen_Grundstellung_fahren
 
 
 
U(
U #Einrichten
U #Taster_Horizontal_einfahren
O
U #Automatik
U #irgendetwas
)
U #Freigabe_Not_Aus
U #Vertikal_Ruhestellung
U #Drehen_Ruhestellung
= #Ventil_Horizontal_einfahren
```


----------



## anne (26 Mai 2010)

Aja ok Helmut, vielen Dank.

Dein geposteter Code entspricht dann sozusagen einer manuellen Grundstellungsfahrt mit Verriegelung, oder?

Das kann bei mehreren Zylindern aber auch sehr schnell kompliziert werden, wenn man immer im Auge haben muss, welche Zylinde sich irgendwie ins Gehege kommen können...


----------



## rostiger Nagel (26 Mai 2010)

Deshalb war der Ansatz von Harald, das über eine Schrittkette zu machen
die es für dich kontrolliert macht. Wenn mann Handbetriebsart, Initalisierung
und Automatikbetrieb berücksichtigt, sieht es vlt. so ähnlich aus.
Bei den Weiterschaltbedingungen für die einzelnen Fahrten muß du in den
Schrittketten natürlich auch die entsprechenden Grundpositionen über-
wachen.


```
U(
U #Hand
U #Taster_drehen_Grundstellung
U #Vertikal_Ruhestellung
U #Horizontal_Ruhestellung
O
U #Ini
U #Schritt_Ini_irgendwas
O
U #Automatik
U #Schritt_Automatik_irgendwas
)
U #Freigabe_Not_Aus
= #Ventil_drehen_Grundstellung_fahren
 
 
 
U(
U #Einrichten
U #Taster_Horizontal_einfahren
U #Vertikal_Ruhestellung
U #Drehen_Ruhestellung
O
U #Ini
U #Schritt_Ini_irgendwas
O
U #Automatik
U #Schritt_Automatik_irgendwas
)
U #Freigabe_Not_Aus
= #Ventil_Horizontal_einfahren
```


----------



## anne (26 Mai 2010)

Helmut_von_der_Reparatur schrieb:


> Bei den Weiterschaltbedingungen für die einzelnen Fahrten muß du in den
> Schrittketten natürlich auch die entsprechenden Grundpositionen über-
> wachen.


 
Dabei müsste es im Automatikbetrieb doch eigentlich reichen, dass ich als Bedingung für den Schritt 1 den Initiator für die GS des 1. Zylinders programmiere. Entsprechend dann für Schritt 2 den Initiator für die GS des 2. Zylinders, usw. 

Dann kann doch im Grunde nichts schiefgehen, oder?


----------



## Ralle (26 Mai 2010)

anne schrieb:


> Dabei müsste es im Automatikbetrieb doch eigentlich reichen, dass ich als Bedingung für den Schritt 1 den Initiator für die GS des 1. Zylinders programmiere. Entsprechend dann für Schritt 2 den Initiator für die GS des 2. Zylinders, usw.
> 
> Dann kann doch im Grunde nichts schiefgehen, oder?



Außer, es schaltet jemand in Hand um, fährt einen Zylinder in die falsche Stellung und schaltet dann die Automatik wieder ein!!! Dann verhindert eine Allgemeine Verriegelung, daß es kracht. Natürlich gehört dann auch eine Fehlermeldung, wie "Laufzeitüberschreitung" dazu, sonst "schläft" die Maschine einfach ein. Ich habe für Motore/Zylinder eigenen Standardbausteine, die haben das alles gleich drin. Da gibt es dann einen Input für die Freigabe, extra noch einen für die Grundstellungsfahrtfreigabe usw.


----------



## anne (26 Mai 2010)

Ralle schrieb:


> Außer, es schaltet jemand in Hand um, fährt einen Zylinder in die falsche Stellung und schaltet dann die Automatik wieder ein!!!


 
Aber auch dann sollte doch eigentlich Nichts passieren, da im Automatikbetrieb Schritt 1 ja nur ausgeführt wird, wenn Zylinder 1 auch wirklich in GS steht. Und wurde z.B. Zylinder 2 im Handbetrieb in AS gefahren, so wird im Automatikbetrieb der Schritt 2 nicht ausgeführt werden, da Zylinder 2 nicht in GS steht, usw.

Oder hab ich da jetzt nen Denkfehler?


----------



## Ralle (26 Mai 2010)

anne schrieb:


> Aber auch dann sollte doch eigentlich Nichts passieren, da im Automatikbetrieb Schritt 1 ja nur ausgeführt wird, wenn Zylinder 1 auch wirklich in GS steht. Und wurde z.B. Zylinder 2 im Handbetrieb in AS gefahren, so wird im Automatikbetrieb der Schritt 2 nicht ausgeführt werden, da Zylinder 2 nicht in GS steht, usw.
> 
> Oder hab ich da jetzt nen Denkfehler?



Je nachdem wie das programmiert wurde.

Bsp..

Schritt 1 --> Zylinder 1 Horizontal in AS
Schritt 2 --> Zylinder 2 Vertikal in AS (nach unten)
Schritt 3 --> Zylinder 3 Greifer in AS (greifen)
Schritt 4 --> Zylinder 2 Vertikal in GS (nach oben)
Schritt 5 --> Zylinder 4 Zwischenanschlag in AS
Schritt 6 --> Zylinder 1 Horizontal in MS (Mittenstellung)

Wenn nun jemand im Schritt 5 die Automatik stoppt und in Hand den Zylinder 2 Vertikal wieder in AS senkt, dann könnte, nach Wiedereinschalten der Automatik, der Horizontalzylinder losfahren, wenn keine zusätzliche Freigabe dies sperrt. Man kann und will ja auch nicht in jedem Schritt alle anderen Vorbedingungen mitprüfen, dann werden die Abfragen in den Schritten ellenlang, außerdem wird man garantiert irgendwann etwas vergessen oder einen Fehler machen.

Daher habe ich an jedem Zylinder selbst nochmals eine Freigabe, die definiert, unter welchen Bedingungen (andere Zylinder etc.) er nun auch wirklich fahren darf. Ist also der Zylinder 2 Vertikal in Arbeitsstellung, hat der Zylinder 1 Horizontal keine Freigabe, was immer die Schrittkette oder die Handbedienung auch sagen.


----------



## anne (27 Mai 2010)

Ralle schrieb:


> Daher habe ich an jedem Zylinder selbst nochmals eine Freigabe, die definiert, unter welchen Bedingungen (andere Zylinder etc.) er nun auch wirklich fahren darf. Ist also der Zylinder 2 Vertikal in Arbeitsstellung, hat der Zylinder 1 Horizontal keine Freigabe, was immer die Schrittkette oder die Handbedienung auch sagen.


 
Danke für die Erklärung Ralle - ja das ist wohl eine gute Idee!

Eine Frage noch dazu:

Diese *zusätzliche* Freigabe an den Zylindern, die du für jeden Zylinder einzeln definiert hast ist ja dann vermutlich weder Bestandteil des Automatik- noch des manuellen Betriebs, oder?

Anders gefragt, wie und an welcher Stelle wird dann diese zusätzliche Freigabe definiert?

Es muss ja dann im Automatikbetrieb jeweils auch diese zusätzliche Freigabe geprüft werden, ohne dass diese eine Bedingung für einen Schritt darstellt, oder verstehe ich das falsch?

Lieben Dank!


----------



## Ralle (27 Mai 2010)

@anne

Ja, die zusätzliche Freigabe gilt allgemein, kann aber natürlich bei Bedarf auch für Hand- oder Automatikbetrieb getrennt werden. Das ist im Prinzip ein Netzwerk vor dem Baustein mit der Beschaltung der Ausgänge des Zylinders. Darin werden in KOP/FUP/AWL (je nach Vorliebe) die Bedingungen angegeben, unter denen sich der Zylinder bewegen darf. Die Freigabe ist dann eine Temp-Vat, die anschließend an dem Zylinder-Baustein als Freigabe-Input eingetragen ist. Diese Freigabe sperrt die Bewegung des Zyinders. Je nach Ventiltyp ist das etwas unterschiedlich, ein Monoventil soll ja z.Bsp. auch in seiner Arbeitsstellung verbleiben, wenn die Freigabe weggeht usw.

Für den Horizylinder sieht die Freigabe dann einfach so aus:


```
U E 7.3  //(Vertikal in GST)
UN E 7.2 //(Vertikal in AST)
= #FRG
```

Am Baustein steht dann #FRG am Input für die Freigabe.

In der Schrittkette wird immer nur das abgeprüft, was gerade ausgeführt wird. Wenn also in Schritt 3 der Greifer schließt, ist die Weiterschaltbedingung, daß der Greifer zu ist. Da wird normalerweise nicht nochmals abgefragt, ob der Vertikalzylinder auch unten ist, das hat ja der Schritt davor erledigt. Bei besonders gefährdeten Sachen kann man aber auch in der Schrittkette nochmals zur Sicherheit ein paar Abfragen einbauen, wenn man es für nötig hält.


----------



## anne (27 Mai 2010)

Hm, also ich versuche mal zusammenzufassen:

- Ich habe in einer FC1 einen Automatikbetrieb programmiert
- Ich habe in einer FC2 einen manuellen Betrieb programmiert

Im ersten Netzwerk der FC2 wird nun z.B. für _jeden_ Zylinder eine Freigabe *#FRG* programmiert und #FRG als Temp-Variable deklariert.




Ralle schrieb:


> Am Baustein steht dann #FRG am Input für die Freigabe.


 
Hier habe ich jetzt noch ein kleines Problem... ist *#FRG *dann ein Teil der Bedingung für das manuelle Schalten (also Handbetrieb) eines Zylinders?

Also beispielsweise


```
U #FRG
U M_Man     // manueller Betrieb
U M 10.0    // Button auf dem Panel schaltet Zyl. in GS
R A 2.0     // Rücksetzen (AS) von Zyl. 1
S A 2.1     // Setzen (GS) von Zyl. 1
```
 
War das so gemeint - oder wo muss #FRG stehen?


----------



## pinolino (27 Mai 2010)

anne schrieb:


> Hier habe ich jetzt noch ein kleines Problem... ist *#FRG *dann ein Teil der Bedingung für das manuelle Schalten (also Handbetrieb) eines Zylinders?
> 
> Also beispielsweise
> 
> ...


 
Hi anne,

ja ich denke so hat Ralle das gemeint. Somit würde dann der Zylinder in deinem Beispiel per Hand nur dann geschalten werden können, wenn eben die Freigabe #FRG erfüllt ist.


Eine Frage noch dazu:

Im Grunde könnten doch dann die Bedingungen, unter denen ein Zylinder schalten darf, für jeden Zylinder als *ODER*-Verknüpfung eingepflegt werden, so dass man auch bei mehreren Zylindern mit nur *einer* Freigabe auskommt, oder?

Also beispielsweise so:


```
U  E0.0
UN E 0.1
O
U  E 0.2
UN E0.3
= #FRG
```
 
Geht das?

Danke, pinolino


----------



## Ralle (28 Mai 2010)

#FRG verwende ich so, daß vor jedem Ventilbaustein eine nur für diesen Zylinder geltende Freigabe definiert wird. Man kann das auch im NW1 des FC machen, dann muß man aber #FRG_01, #FRG_02 ... bilden, halt für jeden Zylinder bzw. Motor.

@Anne
Für jede Betriebsart einen FC mache ich ohnehin nicht. Es werden Merker/Datenbits gebildet, die die Bewegung in Hand oder Automatik auslösen.  Diese Merker/Datenbits kommen ebenfalls als Input an den Ventilbaustein, dazu noch die Merker für die Betriebsart Hand und Automatik. Aber das ist eine Sache der Philosophie, das kann jeder so halten, wie er es will oder auch vom Chef vorgeschrieben bekommt.


----------



## anne (28 Mai 2010)

Ralle schrieb:


> #FRG verwende ich so, daß vor jedem Ventilbaustein eine nur für diesen Zylinder geltende Freigabe definiert wird.


 
Danke Ralle!

Ich nehme an, mit Ventilbaustein meinst du eine *FUP-Box*. Dann kommt also in NW1 die Freigabe #FRG und in NW2 die zugehörige FUP-Box des ersten Zylinders. Entsprechend dann in NW3 die nächste Freigabe #FRG und in NW4 die zugehörige FUP-Box des zweiten Zylinders, usw. 

Habe ich das so richtig verstanden?

Falls ja, beeinflussen sich dann die einzelnen #FRG's nicht im Programm - sie stehen dann ja alle in der selben FC? 

Sorry, könntest du zur Verdeutlichung evtl. mal für zwei Zylinder beispielshaft so einen Code mit Ventilbaustein posten - natürlich nur, wenn es nicht zu aufwendig für dich ist. Ich kann mir das im Moment noch nicht ganz vorstellen... 

Lieben Dank für deine Beantwortung meiner dummen Fragen - aber ich habe so etwas echt noch nie gemacht!


----------



## Marco77 (28 Mai 2010)

Hallo,

ich denke er meint einen Baustein (FB) den er für mehrere Zylinder verwendet. 

Dieser hat dann Eingänge wie z. B.:

Endlage GS
Endlage AS
Freigabe
Start Bewegung AS
Start Bewegung GS
Zeitwert für Überwachung
...

und Ausgänge z.B.

Bewegung nach AS
Bewegung nach GS
Fehlerausgänge (Endlagenfehler, Paarüberwachung..)

IN diesem Baustein ist dann die Logik zur Steuerung und Überwachung des Zylinders. Der Baustein wird dann mit den Eingängen Ausgängen und Merkern für einen Zylinder beschaltet.

Gruß Marco


----------



## anne (30 Mai 2010)

Marco77 schrieb:


> Hallo,
> 
> ich denke er meint einen Baustein (FB) den er für mehrere Zylinder verwendet.
> 
> Gruß Marco


 
Hallo Marco,

aber dann müsste dieser Baustein (FB) ja für *jeden* einzelnen Zylinder im OB1 mit einem extra Instanzdatenbaustein aufgerufen werden, oder?

Das wäre in meinem Fall bei sechs Zylindern ja gerade noch überschaubar, aber bei mehr Zylindern...

Oder habe ich das Ganze falsch interpretiert?


----------



## bike (30 Mai 2010)

anne schrieb:


> Hallo Marco,
> 
> aber dann müsste dieser Baustein (FB) ja für *jeden* einzelnen Zylinder im OB1 mit einem extra Instanzdatenbaustein aufgerufen werden, oder?
> 
> ...



Ja, hast du denke ich. 
Du kannst einen FB mit DB als Multiinstanz verwenden, diesen im OB1 aufrufen und in diesem dann deine einzelnen Zylinderbausteine aufrufen.
Hat jedoch den Nachteil, wenn bei laufender Anlage der FB und DB geändert werden und du beide übertragen musst, dass nach dem Übertragen der Inhalt des DB nicht mehr gültig ist, bis er wieder mit Aktualwerten überschrieben wird.

Wird es jetzt klarer?

bike


----------



## anne (30 Mai 2010)

bike schrieb:


> Wird es jetzt klarer?
> bike


 
Naja vielleicht!

Wenn ich dich richtig verstanden habe, dann kann ich mir sechs FB's (Zylinderbausteine) mit den entsprechenden Bedingungen basteln. Diese sechs FB's werden dann in *einem* Multiinstanz-FB aufgerufen.

Der Multiinstanz-FB selbst wird im OB1 aufgerufen.

Stimmt's so?

Lieben Dank!


----------



## bike (30 Mai 2010)

anne schrieb:


> Naja vielleicht!
> 
> Wenn ich dich richtig verstanden habe, dann kann ich mir sechs FB's (Zylinderbausteine) mit den entsprechenden Bedingungen basteln. Diese sechs FB's werden dann in *einem* Multiinstanz-FB aufgerufen.
> 
> ...



Absolut richtig.

Wir fassen Anlagensegmente zusammen, also z.B Umlenkung 1 besteht aus Stopper 1, Vereinzelner 1 und 2 und Dreheinheit. Dies in einen FB, die nächsten Stationen bekommen jede ihren eigenen FB


bike


----------



## anne (30 Mai 2010)

Ok, danke bike!


Eine Frage noch dazu:

Der FB-Zylinderbaustein ist im Grunde ja immer *ein und derselbe* Baustein; ginge es dann auch, wenn ich nur *einen* FB-Zylinderbaustein erstelle und diesen bei sechs Zylindern im Multiinstanz-FB sechs mal aufrufe?

Oder ist der in Thread #61 beschriebene Weg der bessere?


Puh, schwere Geburt hier das Ganze; ich weiß schon, sorry...


----------



## bike (30 Mai 2010)

Also eigentlich ganz einfach.
Du erstellst einen parametrierbaren FB, der die Funktionen dir zur Verfügung stellen. 
Dann machst du einen FB mit MultiinstanzDB für die einzelnen Stationen in dem du den FB für die Funktionen so oft aufrufst, wie notwendig.

Was besser ist? Hm, da scheiden sich die Geister.
Wenn du es dir hilft, die Vorgehensweise zu verstehen, kann ich später ein Beispiel mal bauen.


bike


----------



## anne (30 Mai 2010)

Hallo bike,

meine Vorstellung war wie gesagt *einen* parametrierbaren FB_Zylinderbaustein zu basteln, der alle Bedingungen enthält. Eben auch die von "Ralle" angesprochene zusätzliche Freigabe #FRG!

Diesen würde ich dann, in meinem Fall, sechs mal im Multiinstanz-FB aufrufen.

Wäre echt super lieb von dir, wenn du mir mal so ein Beispiel posten könntest.


----------

