Mehrere "Instanzen" von $SEN_PREA_C[] bei ConveyorTech???

  • Moin Forum,


    ich kenne das von Kawasaki Robotern, wo man den Wert eines Conveyors in mehreren Instanzen abfragen, sich mit ihm synchronisieren und auch zurücksetzen kann -> z.B. so:


    CVRESET 7=INT_Instanz ;den Wert der Instanz "INT_Instanz" des ersten Bandes (7. Achse) zurücksetzen
    INT_Temp=CVPOS2(INT_Instanz,7) ;den Wert der Instanz "INT_Instanz" des ersten Bandes (7. Achse) abfragen/speichern
    CVCOOPJT 7 ;mit dem ersten Band synchronisieren (7.Achse) -> gilt für alle Instanzen des Conveyors...
    CVLMOVE #Teachpunkt, ,INT_Instanz ;den Teachpunkt synchronisiert mit Band 1 anfahren -> Istwert von Instanz "INT_Instanz" als Basis verwenden


    Bei KUKA scheint es laut Doku nur eine Instanz eines Conveyors zu geben -> $SEN_PREA_C[]???


    Ich möchte den Bandlauf gerne in mehreren Prozessen unabhängig voneienander verwenden können.


    Ist sowas möglich? :meld:

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

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,
    so weit ich weiß, werden von kuka max. 3 Conveyor unterstützt: (Conv)Base11,12,13.
    Abhängig von der Conveyortechversion kann auch zwischen diesen Basen hin- und hergeschalten
    werden. Z.B.: von einem Conveyor entladen und den anderen beladen.
    Sichworte dazu sind einsynchronisieren im Hintergrund und fliegendes Aufsynchronisieren.


    Grüße


    Berrad

  • Ja, aber dabei handelt es sich um drei verschiedene Bänder.


    Wie muss ich mir das vorstellen, wenn mehrere Objekte gleichzeitig auf einem Band transportiert werden (was ja der Normalfall ist...)? Da muss ja ein Puffer gebildet werden und jedem Teil in diesem Puffer wird der entsprechende Wert des Conveyors zugeteilt (ich nenne es mal wieder Instanz)... Bei der Bewegung des Bandes verändert sich dieser Wert für jedes Teil im Puffer entsprechend. Bei Kuka gibt es aber nur die BASE 11 (beispielhaft) für alle Teile auf diesem Band.


    Ich kann mir nur vorstellen, dass man die Conveyorposition zum Triggerzeitpunkt dem Teil "mit in den Puffer speichert" (mit $SEN_PREA_C[]) und beim späteren Anfahren des Punktes in BASE 11 mit in die Punktberechnung einbezieht. Das könnte ich nachvollziehen...


    Wann setzt man aber dann den Conveyor zurück? Etwa niemals? Kann es dann zum Überlauf kommen? Ich weiß es nicht? :wallbash:


    Kann mir jemand erklären, wie man ein Teilepuffer mit ConveyorTech auf einem Band realisiert? In der Doku, die ich habe, ist das nicht beschrieben...


    Danke

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

    Einmal editiert, zuletzt von ROBOter_Nils ()

  • So ganz klar ist mir Deine Applikation noch nicht. Aber mal so viel:
    Am Conveyor ist ein Synchronisierungschalter angebracht. Wird dieser ausgelöst, zb. Vorderkante eines Pakets, wird $sen_prea_c[] auf 0 gesetzt. Von nun an wird die Base verschoben. In etwa so:
    $base_c=base_data[11]:{x $sen_prea_c[1],y 0,z 0,a 0,b 0,c 0}. Deine bez. der base11 geteachten Punkte werden also mitverschoben. Der Roboter holt erst das Teil ab, nach dem das Band eine bestimmte Wegstrecke überschritten hat (Wait for $sen_prea_c[]>Bandfahrweg ; mm),
    und stapelt es auf einer Palette.
    Der Roboter fährt zum Band zurück und wartet auf erneutes Synchronisierung (nächstes Teil
    unterbricht die Lichtschranke).


    Soll der Roboter nur tätig werden, wenn eine bestimmte Anzahl von Teilen zum gleichzeitigen
    greifen bereit liegen sollen, gibt es verschiedene Ansätze:


    - Die Lichtschranke an einen elektronischen externen Zähler anschliessen, dessen Ausgang mit
    $meas_pulse[] verbunden ist.


    - Am Conveyorband werden in den gewünschten Abständen Markierungen angebracht.


    - Nur KRL
    Ich habe es noch nie getestet, aber ich glaube, das die Synchronsierung nur dann erfolgt, wenn
    dies auch wirklich gewünscht wird: Inlineform "Warte auf Synchronisierung" (1. Teil kommt)


    - anschliessend "wait for $sen_prea_c[]>=2000;mm". Roboter fährt zum Band, greift alle Teile
    gleichzeitig und fährt wieder zurück zu Warteposition. Gestapelt wird erst mal nix, sondern
    wieder "Warte auf Synchronisierung". Ist diese erneute Synchronisierung erfolgt, kann gestapelt
    werden. Das Band rollt dabei weiter. Der Roboter fährt zurück und wartet jetzt nur noch bis
    $sen_prea_c[]>=2000 -> greifen-> "Warte auf Synchronisierung" -> stapeln -> "wait for
    $sen_prea_c[]>=2000" usw.
    Fehler - z.B. der Roboter ist zu langsam - könnten wie folgt abgefangen werden:


    DEF bsp()
    IF teil_im_greifer THEN
    stapeln() ; (Base=<10)
    ENDIF
    warte auf synchronisierung ; $sen_prea_c[]=0, (Base=<10)
    LOOP
    wait for $sen_prea_c[]>=2000 ; genügend Teile im Greifbereich, (Base=<10)
    IF $sen_prea_c[]>=3999 Then ; letztes stapeln dauerte zu lang - Verzögerung nicht abfangbar
    ; Fehlerstategie: Teile einfach weiter laufen lassen, evtl. Fehlermeldung an sps
    warte auf synchronisierung ; $sen_prea_c[]=0, (Base=<10)
    ELSE ; normaler Zyklus, der Roboter war für die Bandgeschwindigkeit schnell genug
    greifen() ; Warteposition->Teil auf Band greifen->Warteposition ; (Base>=11)
    warte auf synchronisierung ; $sen_prea_c[]=0, (Base=<10)
    stapeln() ; (Base=<10)
    ENDIF
    ENDLOOP
    END


    Das ist natürlich nur eine grobe Struktur ! Das ganze müsste noch auf Basis der ConveyorTech-
    Programmstruktur umgesetzt werden.


    Würde mich interessieren, wie Du es letztendlich gemacht hast.


    Grüße


    Berrad

  • Hallo,


    indizierbare Puffer braucht man nur, wenn der Roboter so schnell ist, das er auch mehrere Teile, die bereits hinter dem SynckSchalter sind, noch wegräumen kann, bevor diese außerhalb Reichweite fahren oder wenn eine Mustererkennung vorhanden ist, die Teile entsprechend der Erkennung einindizieren muss! (z.B. Flexpicker mit Pickmaster von ABB) Da beim KUKA eher der Roboter als das Band das begrenzende Element ist, nützt Dir ein Puffer nichts!


    Das Prinzip beim KUKA ist so, wie es in der Doku zu KUKA-Conveyortech V3 steht:


    1. Einschalten und Initialisieren des Conveyors mit CONV_INI und CONV_ON
    2. Warten auf Synck-Signal mit CONV_FOLLOW
    3. Syncronisation in CONV_MOV auf geteachten Punkt im BASE[11] (berechnete Punkte kann man nur mit Tricks anfahren)
    4. Wenn Punkt erreicht wird CONV_MOVE verlassen
    5. CONVEYOR ausschalten mit CONV_QUIT


    Wenn ein weiteres Teil den Synckschalter passiert, bevor du wieder CONV_ON gemacht hast und auf erneut auf FOLLOW stehst (Schleife musst Du programmieren!), geht das Teil einfach unerkannt durch!


    Damit ergeben sich zwei Szenarien:


    1. Roboter ist bereits wieder in FOLLOW wenn das zweite Teil am Synckschalter ist, dann alles super und das zweite Teil wird verfolgt
    2. Roboter ist noch irgendwo anders unterwegs und zweites Teil kommt schon am Synckschalter an!?


    Tja dann hängt es davon ab, ob zwingend alle Teile von diesen Roboter gehandelt werden müssen, wenn ja, dann muss Bandgeschwindigkeit und Objektabstand so optimiert werden, dass es der Robi immer schafft oder man stoppt das Band und wartet auf dem Roboter(ist meist die bessere Lösung) oder halt mehrere Roboter:



    Wenn Du weitere Hilfe brauchst PM an mich!


    Grüße dust2

    Einmal editiert, zuletzt von dust2 ()

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