Beiträge von Thilbi

    Hallo,


    ich kenne es so, dass es für alle lizenzierten Optionen in der Steuerung die entsprechenden Aufkleber mit einem Barcode und der Bezeichnung der Optionen gibt. Wenn Optionen nachbestellt werden liefert Kuka die Installationsdateien, KOP-File und den Aufkleber. Der muss dann im Schrank angebracht werden.



    Grüße

    Thilbi

    Wenn ich mir das Bild so anschaue verwendet ABB bei dem Beispiel nur temporäre Weltzonen und definiert diese auch direkt in dem Pfad.


    Könnte mir vorstellen dass du das auch so machen machen musst. Also erst in Rapid eine Bewegungsroutine mit den temporären Weltzonen anlegen und dann Rapid mit Station synchronisieren. Hast du das auch so probiert?


    Leider habe ich zur Zeit keine Vollversion von RS zur Hand um es selbst testen zu können.

    Hallo easywork,


    ich habe das System auch schon des Öfteren verbaut und bei Kunden eingerichtet. Da die Greiferwechsel bei den Anwendungen nie zeitkritisch waren habe ich mich auch nicht um den zeitlichen Aspekt gekümmert.
    Dass du die Zeit runter bekommst kann ich mir aber nicht vorstellen, da das nach meiner Meinung nicht am Schalter liegt, sondern an der von Walther verbauten Elektronik, die die eigentliche Ent- und Verriegelung durchführt.

    Wenn du einen anderen Sicherheitsschalter inkl. Betätiger findet, der einen größeren Schaltabstand als der eingesetzte Schmersal-Schalter bietet, kann du evlt. die Störanfälligkeit verbessern.


    Bis dahin musst du das System ideal zueinander ausrichten (du hast die Schablone von Walther?) und die Greifpositionen und die Bewegung beim Koppelvorgang optimal teachen.



    Grüße

    Thilbi

    Vermutlich wird der Wert, der in Temppos.trans.x steht größer sein als die angegebenen -5200.

    Du musst schone einen sehr großen Roboter haben der sich auf diese negative Position bewegen kann.


    Wenn der Wert z. b. -100 ist, dann ist die IF-Bedingung ja erfüllt. Denn, -100 ist größer als -5200.

    Alles sollte ein Programmierer nicht machen können. Die Grundsicherheit der Anlage muss gegeben sein. Sprich, bei geöffneter Schutztür müssen elektrische Antriebe, hydraulische bzw. pneumatische Antriebe prinzipiell abgeschaltet sein.

    Aber ein entsprechend unterwiesenes Fachpersonal, zu dem auch die Programmierer und ggf. Instandhalter gehören, müssen in die Lage gesetzt werden spezielle Antriebe bzw. Bewegungen wieder zuzuschalten. Beispielsweise wird die Druckluft und Aktorenspannung an einem Robotergreifer durch drücken der Zustimmstaste wieder zugeschaltet. Für die Druckluft kann in dem Fall auch ein separates Einschaltventil, das nur diesen einen Roboter versorgt, eingesetzt werden.

    Als zusätzliche Sicherheit, wie in einem vorherigen Post schon erwähnt, kann man Schlüssel verwenden. Wir hatten das auch in England mal gehabt. Im Automatikmodus mit geschlossener Türe muss ein EKS-Chip außen an der Zelle gesteckt sein. Wird die Zelle betreten und man möchte mit dem Roboter in der Zelle etwas fahren bzw. steuern muss genau dieser Chip in der Zelle gesteckt sein. Wenn mehrere Roboter in einem Schutzbereich sind gab es für jeden Roboter eine separate EKS-Leseeinheit. So war sichergestellt dass nur an einem Roboter eine Bewegung stattfand.

    Bei einem schwäbischen Automobilhersteller wird das mit den EKS noch weiter verfeinert. Hier gibt es für die verschiedenen Gruppen (Bediener, Instandhalter, Fremdfirmen usw.) verschiedenste Kodierungen auf den Chips. Somit wird sichergestellt dass nur derjenige der auch unterwiesen ist die entsprechende Funktion ausführen darf, denn nur wenn der richtige Chip gesteckt ist wird auch die Funktionsgruppe aktiviert.

    Hallo,


    ein theoretischer Ansatz wie man es lösen könnte.


    - Die Datei mittels "Open" lesend und schreibend öffnen.

    - In einer While-Schleife bis zum Dateiende "EOF" die Zeilen nacheinander auslesen und gleich wieder schreiben. In der Schleife ein Zähler mitlaufen lassen mit dem zu die einzelnen Zeilen nacheinander auslesen kannst, \Line:=nZeilenzaehler

    - Wenn die Zeile #3 erreicht ist deinen String mit den entsprechenden Daten zusammensetzen und in die Datei schreiben. Mit CDate kannst du das Datum auslesen, Mit CTime die Uhrzeit

    - Nach der While-Schleife dann die Datei wieder schließen und erst dann das Modul mittels "load" wirklich laden.



    Grüße

    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 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