# Kontrolle der Verfahrbereiches 2er Achsen auf einer Bahn



## dborn (19 August 2008)

Hallo zusammen,

bin ganz neu hier im Forum und habe auch gleich mal eine Frage...

Die Aufgabe: 
2 Achsen teilen sich eine Schiene. Der Verfahrbereich ist für beide gleich von 0-10000mm. Beide Achsen bekommen unabhängig von einander Befehle zu verfahren immer von A nach B (wobei a und B irgendein Wert innerhalb des Verfahrbereiches ist). Ziel ist es nun in einem SPS Baustein / Programm die einzelnen Verfahraufträge aufzunehmen, überprüfen, ob eine Überschneidung stattfindet und ihn dann ausführt. Findet eine Überschneidung statt, soll die eine Achse erst einmal in die Nähe der zweiten gefahren werden....usw usw
Verschiedene Möglichkeiten kommen noch hinzu.

Bis jetzt kenne ich das nur mit NC-Achsen und dieses mal werden die Achsen von der SPS angesteuert (das funktioniert auch  )

Die Frage:
Hat sich zufällig hier schon mal jemand mit einer Überprüfung des Verfahrweges zweier Antriebe beschäftigt???
und könnte mal ein paar Tipps geben was die beste Strategie ist, oder evtl. gibt es schon Lösungsvorschläge einiger Hersteller??

Vielen Dank schon mal im Voraus..


PS: es handelt sich um eine Boschsteuerung L40 und Boschantriebe (IntraDrive). Programmiert wird in CodeSys/IndraLogic


----------



## kiestumpe (19 August 2008)

Wenn du nen fertigen Baustein willst, würde ich so vorgehen:


```
VAR_IN
   Start1, Ziel1 : real;
   Start2, Ziel2 : real;
   Abstand : real;
END_VAR

VAR_OUT
   ZielX1 : REAL; // Geprüft und geg. modifziert;
   ZielX2 : REAL; // Geprüft und geg. modifziert;
END_VAR

Temp
   v1, v2 : BOOL; // positiv/negative Geschwind.
END_VAR;

   v1 := (Ziel1 > Start1);
   v2 := (Ziel2 > Start2);
  IF v1 THEN
      IF v2 THEN
          ....
```

So in diese Richtung mal alle Fälle durchspielen


----------



## dborn (19 August 2008)

Hallo kiestumpe,
vielen Dank für deine Antwort, aber ich denke ganz so einfach wird es leider nicht gehen.
Die 2 Achsen fahren unabhängig von einander und vor allem immer zur gleichen Zeit. D.h.: auch, ich muss während der jeweiligen Aktion auch die aktuelle Position der Gegenachse prüfen.


----------



## kiestumpe (19 August 2008)

ja, fertig ist der Baustein nicht, aber mit den Start und Zielpositionen der beiden Antrieb müsst das doch herauszufinden sein, oder?


----------



## gravieren (19 August 2008)

Hi

Wie verfährt du die Achsen ?

Punktsteuerung ?
Wie werden die Verfahrbefehle ausgegeben und von "wem" (1 CPU, 2CPUs)

611 mit Profibus ?
611 mit 840D + Positionier-FC ?
Selbst verfahren (Eigener Positionierbaustein)? 


>Ziel ist es nun in einem SPS Baustein 
>Programm die einzelnen Verfahraufträge aufzunehmen, überprüfen, ob >eine Überschneidung stattfindet und ihn dann ausführt. 
Wieviel CPUs / Steuerungen ?

Welche Anwendung ?
Möglicherweise 2 CNC-Maschinen mit Palettenwechsler ?


>Findet eine Überschneidung statt, soll die eine Achse erst einmal in die >Nähe der zweiten gefahren werden....usw usw
In der nähe der 2.Achse gefahren.
Was ist wenn die 1.Achse weiter fahren will. Steht dann alles ?


Ist es sinnvoll, jeder Achse eine Parkposition zu geben.

Die 1.Achse vergewissert sich, das die 2.Achse nicht in den Kollisionsbebreich fahren will. 2.Achse gibt Bestätigung darüber ab.
Nach der Bestätigung der 2.Achse fährt die 1.Achse los.


Will jetzt die 1.Achse fahren, frägt diese die Position der 2.Achse nach einer Freigabebestätigung ab.

u.s.w.

Will die 2. Achse in den Kollisionsbereich der 1.Achse fahren -->
1.Achse fährt z.b. auf Parkposition und gibt der 2.Achse eine Fahrfreigabe.


----------



## trinitaucher (19 August 2008)

Ich würde es so machen:

Die Achsen werden jeweils über einen FB gesteuert, der für beide Achsen identisch ist. Beide FBs "kennen" sich nicht, verfahren die Achsen völlig autark, hören nur auch ihre Fahraufträge.

Die gesamte möglich Verfahrstrecke würde ich absolut einteilen, z.B. von Anfang bis Ende => 0 ... 10000mm.
Jede Achse bekommt ihre Verfahrbefehle als Absolutwerte (z.B. fahre von 4500 nach 1000).
Das übergelagerte Programm vergibt die Fahraufträge.
Vor der Übergabe des Fahrauftrags muss kontrolliert werden, ob die Istposition der stehenden Achse sich innerhalb des angeforderten Verfahrwegs der anderen Achse befindet.

Hat eine Achse ihren Verfahrauftrag erhalten, wird ein entsprechendes Flag gesetzt (z.B. "Achse hat Fahrauftrag). Nach Beendigung des Fahrauftrags wieder gelöscht.
Sobald dieses Flag bei einer der Achsen gesetzt ist, wird vor Erteilung des Fahrauftrags an die nicht-fahrende Achse geprüft, ob folgende Bedingung erfüllt ist:

Wenn...
Startposition A < Zielposition A (A fährt positiv), muss Zielposition B > Zielposition A sein.
Wenn...
Startposition A > Zielposition A (A fährt negativ), muss Zielposition B < Zielposition A sein
(natürlich mit entsprechenden Sicherheitsabständen)

Als nächstes kann die aktuelle Position einer Achse herangezogen werden. Falls beide Achsen gleich schnell fahren, genügt u.U. die Kontrolle der Zielpositionen, da ein "Auffahren" nicht möglich ist. Falls nicht, muss die übergeordnete Instanz die Istpositionen fortlaufend vergleichen und bei unterschreiten eines Sicherheitsabstands die nacheilende Achse stoppen.

Grundlegendes Prinzip ist die absolute Fahrwegeinteilung und die Kontrolle der Fahraufträge durch eine überlagerte Instanz. Die Achsen an sich verfahren selbstständig und müssen sich nicht einmal "kennen".
Dann benötigst du auch keine spezielle NC-Hardware.


----------



## kiestumpe (20 August 2008)

trinitaucher schrieb:


> Ich würde es so machen:
> 
> 
> Grundlegendes Prinzip ist die absolute Fahrwegeinteilung und die Kontrolle der Fahraufträge durch eine überlagerte Instanz. Die Achsen an sich verfahren selbstständig und müssen sich nicht einmal "kennen".
> Dann benötigst du auch keine spezielle NC-Hardware.



So dacht ich auch, im wesentlichen bleiben die obigen Schnittstellen des "Verwaltungs-FBs", evt kann man sie noch mit den beiden Istwerden der Position füttern.
Viel Erfolg beim ausprogrammieren!


----------



## dborn (24 August 2008)

Hallo zusammen, 
erstmal vielen Dank für Eure Anregungen. 

Als erstes zu GRAVIEREN: 
>Wie verfährt du die Achsen ?
ein FB (aus dem erstellt in Zusammenarbeit mit Bosch) aufgerufen in 2 Instanzen.
>Wie werden die Verfahrbefehle ausgegeben und von "wem" (1 CPU, 2CPUs)
- 1 CPU mit absoluter Zielvorgabe.

>611 mit Profibus ?
>611 mit 840D + Positionier-FC ?
>Selbst verfahren (Eigener Positionierbaustein)? 
ein FB (aus dem erstellt in Zusammenarbeit mit Bosch) aufgerufen in 2 Instanzen. Kommunikation über Profibus.

>Wieviel CPUs / Steuerungen ?
- 1 CPU (L40.2)

>Welche Anwendung ?
>Möglicherweise 2 CNC-Maschinen mit Palettenwechsler ?
- keine CNC Maschine, dann hätte ich auch eine NC-Achse.
Es handelt sich um Transportshuttles auf einer Schienenbahn mit überschneidetem Arbeitsbereich.

>In der nähe der 2.Achse gefahren.
>Was ist wenn die 1.Achse weiter fahren will. Steht dann alles ?
- Nein. Es werden anhand beider möglichen Positionen ermittelt (ein Auftrag hat 2 mögliche Achspositionen / Start- und Zielposition), welche die am nächsten liegende ist. An diese wird heranpositioniert.

>Ist es sinnvoll, jeder Achse eine Parkposition zu geben?
- Ja. Jede Achse hat eine sogn. Parkposition am jeweiles gegenüberliegende Ende der Schiene.

>Die 1.Achse vergewissert sich, das die 2.Achse nicht in den >Kollisionsbebreich fahren will. 2.Achse gibt Bestätigung darüber ab.
>Nach der Bestätigung der 2.Achse fährt die 1.Achse los.
Genau das sind meine Grundgedanken...


----------



## dborn (24 August 2008)

zu trinitaucher:

fast genauso habe ich meine Gedanken aufgebaut.
Mein Baustein sieht nun soweit aus:
Jeder Auftrag einer Achse hat 2 Verfahr-Positionen (Start- und Ziel).
Bei jedem ! Verfahrauftrag (entweder fahre zum Start ODER fahre zum Ziel), wird die Gegenüberachse geprüft, ob diese einen Auftrag hat. Wenn nicht, dann wird geschaut, ob sich diese im Weg befindet. Nein-> alles OK, Ja -> Gegenüberachse kurz blockieren und auf Parkposition fahren.
Hat der Partner einen Auftrag, wird ermittelt welche der beiden möglichen Positionen die am nächsten zur eigenen Position ist. Dann wird dort in die Nähe positioniert (mit Sicherheitsabstand) und gewartet bis die Gegenachse aus dem Bereich wieder raus ist. 
Dies ganze ist einem FB (aufgerufen in 2 Instanzen) als Kontrolle übergelagert.
Die ersten Test sind momentan im Gange und sehen soweit erstmal gut aus......;-)
Was allerdings nun geschieht, wenn sich der Verfahrbereich permanent überschneidet, muss ich dann noch mal schauen.


----------



## argv_user (24 August 2008)

dborn schrieb:


> ...
> Was allerdings nun geschieht, wenn sich der Verfahrbereich permanent überschneidet, muss ich dann noch mal schauen.



Wie wäre es mit einem Prioritätsbit?
Wer priorisiert ist, darf im Überschneidungsfall fahren. Danach wechselt die Priorität.


----------

