Verriegelung zweier Roboter

  • Hallo Forum,


    habe mal wieder ein Problem, bei dem ich Hilfe gebrauchen könnte. :hilfe:


    Weiß nicht, ob es am Robi (z.B. Vorlaufzeiger), der SPS oder dem Profibus (Latenz) liegt.


    Zwei Robis sollen in den selben Bereich einfahren. Der eine legt Teile auf eine Zwischenablage/einen Puffer (hier vier Teilenester), der andere entnimmt sie von dort. Prinzip soll sein: [glow=red,2,300]Wer zuerst kommt malt zuerst...[/glow] Der entnehmende Roboter hat eine etwas schnellere Taktzeit und baut somit den Teilepuffer ab.


    Momentanes Problem ist, beide denken manchmal sie kämen zuerst, nämlich dann, wenn sie scheinbar gleichzeitig die Einfahrfreigabe einholen (kann schon mal zufällig trotz ungleicher Taktzeit geschehen). Die Nester liegen so dicht neben einander, dass im ungünstigsten Fall eine Berührung der Roboter möglich ist!!!


    Roboter-Programm für Robi1 (in der Struktur identisch für beide Roboter)


    Code
    WAIT FOR Rob1_Freigabe_Bereich_1 CONT
    OUT Rob1_Aus_Bereich_1 State=FALSE CONT
      ...weiterer Programmablauf im Bereich...
    SYN OUT Rob1_Aus_Bereich_1 TRUE at END Delay=0
    PTP Aus_Bereich_1 CONT



    SPS-Programm für Robi 1 (ebenfalls für beide identisch)

    Code
    UND Rob2_Aus_Bereich_1
    = Rob1_Freigabe_Bereich_1


    Das Problem ist wie gesagt die Gleichzeitigkeit. Wenn der eine etwas später als der andere den Bereich anfordert, geht alles sicher von statten.


    Seht Ihr ein Problem in meiner Programmierung? Habt Ihr Hinweise für mich?
    Vielen Dank!

    Es grüßt<br /><br />der Nils

  • Schritt für Schritt zum Roboterprofi!
  • Servus,


    der Fehler tritt immer wieder auf => Zykluszeit der SPS.


    würde auf alle Fälle mal die Gegenseitigen Signale in einem Interrupt überwachen, und die Roboter damit stoppen.
    So ist auch ein Eingriff eines Bedieners abgesichert.


    Mir ists am liebsten wenn die SPS ein Einfahrsignal für jeden Roboter sendet, das kann der SPS-Programmierer dann gegenseitig verriegeln.


    Oder du schickst zwischen den Roboter ein Signal welche Ablage der jeweilige Roboter bedient und riegelst nur den gefährlichen Bereich ab.



    mfg


    Martl

  • Zeitraum 1 =
    Von dem Zeitpunkt an dem Roboter1 die Zeile "WAIT FOR Rob1_Freigabe_Bereich_1 CONT" verarbeitet,
    über die Zeit bis Rob1_Aus_Bereich_1=false bei der SPS ist,
    bis zu dem Zeitpunkt wo Rob2_Freigabe_Bereich_1 = false beim Roboter2 angekommen ist.


    Zeitraum 2 =
    Von dem Zeitpunkt an dem Roboter2 die Zeile "WAIT FOR Rob2_Freigabe_Bereich_1 CONT" verarbeitet,
    über die Zeit bis Rob2_Aus_Bereich_1=false bei der SPS ist,
    bis zu dem Zeitpunkt wo Rob1_Freigabe_Bereich_1 = false beim Roboter1 angekommen ist.


    Wenn sich Zeitraum1 und Zeitraum2 minimal überlappen fahren beide. Das passiert mit hoher Wahrscheinlichkeit irgendwann mal, also genügt das nicht als Verriegelung.

  • Danke erstmal für Deine Antwort!



    der Fehler tritt immer wieder auf => Zykluszeit der SPS.


    Das hätte ich jetzt ehrlich gesagt am wenigsten erwartet. Ich sehe den Einfluss selbst einer sehr hohen Zykluszeit hier nicht als Ursache an. Kannst Du mir das bitte erklären. Ich würde das sehr gern verstehen.


    Zitat

    würde auf alle Fälle mal die Gegenseitigen Signale in einem Interrupt überwachen, und die Roboter damit stoppen.
    So ist auch ein Eingriff eines Bedieners abgesichert.


    Sollten beide Roboter gleichzeitig im Bereich sein entzieht die SPS die Fahrfreigabe. Es hat ja auch noch nicht geknallt. Nur das kann nicht die Endlösung sein, weil der Prozess gestoppt wird.


    Zitat

    Mir ists am liebsten wenn die SPS ein Einfahrsignal für jeden Roboter sendet, das kann der SPS-Programmierer dann gegenseitig verriegeln.


    Das ist der Status-Quo. Jeder Roboter hat natürlich seine eigene Einfahrfreigabe von der SPS...


    Zitat

    Oder du schickst zwischen den Roboter ein Signal welche Ablage der jeweilige Roboter bedient und riegelst nur den gefährlichen Bereich ab.


    Ein Bereich zwei Roboter. Das ist nunmal das Problem... Da ist nicht genug Platz für beide.

    Es grüßt<br /><br />der Nils

  • Ich glaub so könnts klappen: (hab neue Variablennamen gewählt, mit Deinen bin ich immer durcheinander gekommen :mrgreen: )


    Roboter1: (Roboter2 ersetze "1" durch "2" und "2" durch "1")


    [pfad im unkritischen bereich]
    lock_rob2=true
    [pfad im unkritischen bereich]
    wait for rob1_can_move
    [pfad im kritischen bereich]
    lock_rob2=false
    [pfad im unkritischen bereich]


    SPS: (pseudocode)


    rob1_can_move = lock_rob2 AND NOT rob2_can_move
    rob2_can_move = lock_rob1 AND NOT rob1_can_move



    Ich kenn mich bei der SPS nicht besonders gut aus, deswegen eine Anmerkung: Bei dem Code ist es wichtig, dass der wert von robX_can_move der gerade zugewiesen wurde schon in der nächsten Zeile verwendet wird.


    Bsp:
    lock_rob1=true und lock_rob2=true kommen gleichzeitig an.
    nach der zeile
    rob1_can_move = lock_rob2 AND NOT rob2_can_move
    ist rob1_can_move = true
    so muss es auch in der nächsten zeile eingesetzt werden, sonst können erst wieder beide gleichzeitig fahren.

    Einmal editiert, zuletzt von atw12az5 ()


  • Auch Dir vielen Dank!
    Das hat mir einiges verdeutlicht. Ich erkenne jetzt auch den negativen Einfluss einer hohen SPS-Zykluszeit bei der Thematik. :waffen100:


    Bleibt für mich die Frage: Wie kann ich es sicher machen? Die Anwsenheit des jeweils anderen Roboters im Bereich ist nunmal das einzige Kriterium die Freigabe zu entziehen. :denk:
    Das Problem hatte ich überhaupt nicht auf dem Schirm. :huh:


    EDIT: Dein Vorschlag werde ich mir morgen früh mal genauer anschauen. Danke für deine Mühe! :beerchug:

    Es grüßt<br /><br />der Nils

  • Hallo atw12az5,


    Super Lösung :applaus: :applaus: :applaus: ! Wirklich ganz toll!!!


    Ich hatte gestern auch an dem Problem gearbeitet, meine Lösung ist aber einfach schlechter als Deine (und deswegen stelle ich sie auch gar nicht erst hier hinein).


    Was ich interessant finde: Dein Vorschlag wird so ähnlich auch in der Informatik benutzt, allerdings ohne übergeordneten Prozeß. Nennt sich da Perterson-Algorithmus.


    Viele Grüße,
    Tilman/Frankreich

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden