Posts by Thilbi

    Hallo R47,


    sicher kann man mit dem Fanuc viele Aufgaben so erledigen wie mit den anderen Systemen. Die Frage ist immer wie effektiv man zu dem Ziel gelangt. Karel ist bei Fanuc eine Möglichkeit fehlende Funktionen in den TP-Programmen nachzuprogrammieren. Nur, warumm benötigt man eine zweite Programmiersprache auf dem gleichen System um das zu realisieren ? Dazu auch noch eine kostenpflichtige Software (RoboGuide) um dann den Karelcode zu compilieren und keine Möglichkeit das Karel-Programm bei Fehlern zu debuggen.

    Bei uns ist auch schon vorgekommen dass Kunden es nicht zulassen Karel-Programme zu benutzen, da sie eben nur mit TP auskennen und sich nicht noch mit Karel beschäftigen wollen/können.


    Zu meinem Beispielprogramm.

    Im Prinzip hast du recht. Man arbeitet hier mit Strings und setzt diese zu einen neuen String zusammen. Der Inhalt von dem String ist dann der Programmname von dem Programm welches man aufrufen möchte. Durch die %-Zeichen definiert man das Late-Binding und kann damit jedes beliebige Programm aufrufen. Denn da ist dann nicht mehr der Variblenname, sondern nur deren Inhalt, entscheidend. Bei Fanuc kann man bei dem CALL-Befehl nur ein Programm aufrufen. Sprich wenn man z. B. verschiedene Typen mit mehreren Stationen auf einer Anlage hat macht man das bei ABB mit einer Zeile

    %"Entlade"+stStation+"_Typ"+stTypnr %;

    selbst wenn die Stations- und Typnummer nur als Interger vorliegen reicht eine Zeile, da man den Variablentyp noch direkt darin wandeln kann

    %"Entlade"+NumToStr(nStation,0)+"_Typ"+NumToStr(nTypnr,0) %;


    Bei Fanuc, und auch KUKA, kenn ich bis jetzt nur die Möglichkeit das über verschachtelte Switch-Case zu realisieren. Bin aber für jede Anregung wie man das einfacher gestalten kann offen.

    Ok,


    ein kleines Beispiel. Wir definiferen i. d. R. für jede Station eine Vorposition haben dann die entsprechenden Bewegungsprogramme um zwischen den Vorpositionen beliebig hin- und herfahren zu können.

    Um die Bewegungsprogramm aufzurufen gibt es eine Routine die als Übergabeparameter die Zielposition enthält. Durch das bei ABB mögliche "late-binding" sieht die Routine (vereinfacht, ohne Fehlerbehandlung) so aus.


    PROC MoveTo(

    string stTarget)


    VAR num nFKey;


    stTarget:=StrMap(stTarget,STR_LOWER,STR_UPPER);

    WHILE stTarget="" DO

    Message emNoTarget;

    ENDWHILE

    IF stTarget=stAktPos RETURN ;

    %"mv"+stAktPos+"_"+stTarget %;

    stAktPos:=stTarget;

    ENDPROC


    Bei Fanuc, beispielhaft für vier Vorpositionen und nur der Anfang des Programms:


    JMP LBL[1] ;

    !******************************** ;


    ! ; ;

    !Program: ;

    !M_ROUTER ;

    ! ;

    !Move Robot from ;

    !PrePos to PrePos ;

    !******************************** ;

    LBL[1:Init] ;

    R[112:Dest PrePos]=AR[1] ;

    ;

    !Set User and Tool frame ;

    !UTOOL [1]: Gripper ;

    !UFRAME [1]: World ;

    UFRAME_NUM=1 ;

    UTOOL_NUM=1 ;

    ;

    IF R[113:Curr PrePos]=0,JMP LBL[2] ;

    IF R[113:Curr PrePos]=R[112:Dest PrePos],JMP LBL[99] ;

    ;

    !Check if robot was in manual ;

    IF (F[3:bRobInManual]=OFF),JMP LBL[4] ;

    ;

    !******************************** ;

    LBL[2:get PrePos] ;

    CALL M_GET_PREPOS ;

    IF R[113:Curr PrePos]<>0,JMP LBL[4] ;

    CALL M_MOVE_PREPOS ;

    JMP LBL[2] ;

    ;

    !******************************** ;

    LBL[4] ;

    IF R[112:Dest PrePos]>R[110:Nbr. PrePos],JMP LBL[1410] ;

    IF R[113:Curr PrePos]>R[110:Nbr. PrePos],JMP LBL[1420] ;

    ;

    SELECT R[113:Curr PrePos]=1,JMP LBL[100] ;

    =2,JMP LBL[200] ;

    =3,JMP LBL[300] ;

    =4,JMP LBL[400] ;ELSE,JMP LBL[1410] ;

    ;

    !******************************** ;

    LBL[100: from Home] ;

    R[113:Curr PrePos]=0 ;

    SELECT R[112:Dest PrePos]=1,JMP LBL[99] ;

    =2,JMP CALL Move_1VP_2VP ;

    =3,JMP CALL Move_1VP_3VP ;

    =4,JMP CALL Move_1VP_4VP ;

    ELSE,JMP LBL[1420] ;

    ;

    JMP LBL[99] ;

    ;

    !******************************** ;

    LBL[200: from Maint] ;

    R[113:Curr PrePos]=0 ;

    SELECT R[112:Dest PrePos]=1,Move_2VP_1VP ;

    =2,JMP LBL[99] ;

    =3,Move_2VP_3VP ;

    =4,Move_2VP_4VP ;

    ELSE,JMP LBL[1420] ;

    ;

    JMP LBL[99] ;

    ...

    Hallo,


    da ich alle drei großen Hersteller kenne, frage ich mich wie man auf Fanuc wechseln will.

    Das normale Pick and Place kann der bestimmt so gut wie KUKA. Aber sobald man etwas komplexere Aufgaben zu programmieren hat kommt man relativ schnell an die Grenzen der normalen Programmiersprache.

    Wenn ihr euch nach Alternativen umschauen wollt, würde ich auf ABB wechseln.


    Grüße

    Thilbi

    Privet,


    geht bei Fanuc nach meiner Meinung nur mit dem Umweg über Karel. Dort gibt es den Befehl "CNV_JPOS_REAL". Geht dort auch umgekehrt mittel "CNV_REAL_JPOS".

    Ist etwas aufwendiger, zumal man Karel nicht wirklich debuggen kann.



    Grüße

    Thilbi

    Privet Privet,


    bei Fanuc gibt es drei Möglichkeiten die vergleichbar mit den Trigger-Befehlen von KUKA sind.

    TB = Time before, also die Zeit bevor ein Punkt erreicht wird

    TA= Time after, entspricht der Zeit nachdem ein Punkt verlassen wurde

    DB = Distance before, also der Abstand bevor ein Punkt erreicht wird



    Grüße

    Thilbi

    Hallo Kollegen,


    ich habe in Roboguide ( V9) ein komplettes System konfiguriert, kommentiert und programmiert. Nun möchte ich das komplett auf die reelle Steuerung bringen (R-30iB Plus, V9.4) kopieren. Dazu habe ich mich mit dem Robot Neighorhood mit der Steuerung verbunden. Programme, Register und Pos-Register gehen so ohne Probleme zu übertragen.


    Wie bekomme ich aber nun z. B. die ganzen UTOOL, UFRAME, User-Alarme, E/A-Kommentare auch so übertragen?

    Kennt ihr einen Weg?



    Danke für die Hilfe

    Thilbi

    Nein, leider nicht. Ich hatte mal vor längerer Zeit mich auch an der Erstellung von Kinematiken versucht. Musste es dann aber, da andere Projekte wieder wichtiger wurden, aufgeben und habe es nicht weiter verfolgt.

    Ja, bei zwei Drive-Modulen muss die Option MulitMove mit aktiviert werden. Müsstest dann noch entscheidenn welche der beiden Varianten du benötigst.

    Ansonsten könnte man es auch evtl. so lösen dass du das Portal als zusammenhängende Kinimatik definierst, was dann dem Manipulator entspricht.

    Die drei Achsen des Positioniers werden dann als externe Achsen, welches das Drive-Modul ansteuern kann, definiert.

    So hättest du nur ein Drive-Modul und benötigst kein zweites. Allerdings wäre dann wohl der Positionierer keine zusammenhängede Kinematik mehr.

    Hallo,


    man kann auch einfach den eigentlich digitalen Gruppeneingang als analogen Eingang definieren und dann im Programm direkt auf den Wert zugreifen.

    EIO.CFG

    -Name "aiOffset_X" -SignalType "AI" -Device "PN_Internal_Anybus"\

    -DeviceMap "128-143" -MaxLog 3276.7 -MaxBitVal 32767 -MinLog -3276.7\

    -MinBitVal -32767


    Rapid:

    !Lesen der Verschiebedaten vom Bus

    !X-Wert

    nOffsetX:=aiOffset_X;

    ...


    MoveL RelTool(pGreifpos,nOffsetX,nOffsetY,nOffsetZ),...;



    Grüße

    Thilbi

    Hallo Daniel,


    OrangeEdit oder WorkVisual sind die beiden Programme mit denen man am Besten arbeiten kann.

    Natürlich kann man auch UltraEdit mit der Syntaxhervorhebung nutzen. Wird nur komplizierter wenn man die InLine-Formulare von der KRL nutzt. Hierfür ist dann auf jeden Fall OrangeEdit besser geeignet.



    Grüße

    Thilbi

    Der Gruppenausgang wird doch sicher mit dem Wert einer Variablen beschrieben. Wenn du diese Variable als PERS deklarierst, hast du den Wert des Gruppenausgangs in der Variablen stehen.

    Mit der Variablen kann man dann nach erneutem Start weiterarbeiten.

    Hallo erstmal,


    es gibt sicher diverse Möglichkeiten.

    Eine die mir auf die Schnelle einfällt das ganze in einem Submit-Interpreter zu lösen. Hier kann man die aktuelle Roboterposition einlesen und vergleichen ob diese sich, im Vergleich zu der Position die den letzten Messwert geliefert hat, weit genug geändert hat um einen neuen Wert einzulesen. Hier kann man ja auf mm und Grad vergleichen. Wenn der Roboter sich nun soweit bewegt hat um einen neuen Messwert zu ermitteln, den Wert einlesen und abspeichern. Anschließend diese Position als neue Vergleichsposition übernehmen.



    Grüße

    Thilbi

    Hallo zusammen,


    bei der KRC2 gab es die Variablen $CYC_DEF1...32[], in welcher die vergebenen Namen bzw. Bedingungen der zyklischen Flag gestanden haben. Gibt es vergleichbare Variablen auch bei der KRC4 (KSS8.3) bzw. kennt jemand eine Möglichkeit den Namen auszulesen?



    Danke

    Thilbi

    Hallo R2D2,


    mir ist keine ABB-Karte mit 4 analogen Ausgängen bekannt. Es gibt eine DSQC 651, mit je 8 dig. Ein- und Ausgängen aber nur 2 analogen Ausgängen. Diese ist, wenn man nicht so viel Erfahrung hat sicher leichter einzubinden, aber erfüllt nicht deine Anforderungen.
    Von daher, ja, nimm einen WAGO-Feldbuskoppler mit der entsprechenden Anzahl von Ein-und Ausgangsbaugruppen die du benötigst. Das System lässt sich dann auch recht einfach erweitern.



    Grüße
    Thilbi

    Oh ja, :angry:


    aktuelle Vorschriften in Mettingen sind LH15. Und man ist gut beraten sich daran zu halten, bzw. jede Abweichung sich schriftlich bestätigen zu lassen.
    Am besten das Lastenheft beim Planer anfordern und auch gleich ein Beispielbackup mit dazu.



    Grüße
    Thilbi