Beiträge von tealmasta

    Hallo,


    mach dir einfach ein jointtarget nur für die WZ. Beschreibe diese mit den Achswerten der Achsen welche du überwachen willst.

    z.B. Achse 1 - Achse 6 die Werte von deiner Homepos. Die 7. Achse möchtest du nicht überwachen, dann trage da 9E9 ein.

    In der Deltapos dann auch dort 9E9 eintragen....


    So sieht das bei mir aus:

    CONST jointtarget HomePos:=[[0,-20,0,0,30,0],[9E9,9E+09,9E+09,9E+09,9E+09,9E+09]];

    CONST jointtarget delta_pos:=[[5,10,10,5,60,150],[9E9,9E9,9E9,9E9,9E9,9E9]];


    Dieses System hat eine 7. Achse. Achte darauf dass du 9E9 und nicht 9E+09 einträgst...


    Gruß Timo

    Hi,


    ich habe das Problem, dass bei der Inbetriebnahme die Base um 180° verdreht wurde.X(

    Dann wurden die Programme geteacht. Jetzt soll ich die Base richtig drehen.

    Wenn ich die Konfig aber dahingehend ändere, muss ich die ganzen Programme wieder neu schreiben, da es keine Offline-Programmierung gibt.;(;(;(


    gibt es da eine elegantere Lösung dafür?


    Gruß Teal

    Hallo Bjelzin,

    Zitat

    Ich fahre von Nietenaufnahme (Punkt 900) zur ersten Niete (Punkt 10)
    Der Roboter meckert aber diese Fahrt an Fehler 119902 Falsche Zwischenposition
    Start : 900 , Ziel : ???
    Position : 9001001


    Wenn Start = 900 und Ziel = 10 dann Zwischenpos = 900 + 010 + 01 ---> 90001001
    Wenn Start = 10 und Ziel = 900 dann Zwischenpos = 10 + 900 + 01 ---> 1090001
    Wenn Start = 10 und Ziel = 20 dann Zwischenpos = 10 + 20 + 01 ---> 102001


    Gruß Teal

    Hallo Robotiker,


    ich habe leider gerade kein KUKA zur Hand, aber vielleicht geht das so:


    In der DAT:
    CHAR XXX[24]
    XXX[]="PROG_1"


    Im Programm:
    IF $PRO_NAME1[]==XXX[] THEN


    TUE WAS


    ENDIF


    Gruß Tealmasta

    Ich habe an einer Anlage folgendes Programm mit Fehlerroutine geschrieben:


    PROC Transfer_Onhe_Ätzen()


    Greifer1_öffnen;


    Greifer2_öffnen;


    MoveJ pHome, vmax, z50, tool1;


    MoveJ Offs(pTransfer,50,0,0), vmax, z5, tool1\WObj:=wobj_Transfer;


    FNR:=1;


    WaitDI DI_Area_Free_Transfer,1\MaxTime:=2;


    Reset_FNR;


    Reset DO_Area_Free_Transfer;


    FNR:=8;


    WaitDI DI_Teilekontrolle_Transfer,1\MaxTime:=2;


    Reset_FNR;


    MoveL pTransfer, v100, fine, tool1\WObj:=wobj_Transfer;


    Greifer1_schliessen;


    Transfer_Greifer_öffnen;


    MoveL Offs(pTransfer,50,0,0), v80, z0, tool1\WObj:=wobj_Transfer;


    FNR:=7;


    WaitDI DI_Teilekontrolle_Transfer,0\MaxTime:=2;


    Reset_FNR;


    MoveJ [[-424.01,560.43,434.80],[0.146654,0.554191,-0.818425,-0.0393111],[1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], vmax, z0, tool1;


    Set DO_Area_Free_Transfer;


    ERROR


    TPErase;


    TEST FNR


    CASE 1:


    Fehlertext:="AREA FREE fehlt";


    CASE 2:


    Fehlertext:="Greifer 1 geöffnet fehlt";


    CASE 3:


    Fehlertext:="Greifer 1 geschlossen fehlt";


    CASE 4:


    Fehlertext:="Greifer 2 geöffnet fehlt";


    CASE 5:


    Fehlertext:="Greifer 2 geschlossen fehlt";


    CASE 6:


    Fehlertext:="Teilekontrolle ein fehlt";


    CASE 7:


    Fehlertext:="Teilekontrolle aus fehlt";


    CASE 8:


    Fehlertext:="Kein Teil in der Übergabe";


    CASE 9:


    Fehlertext:="Vorrichtung AS1 unten geöffnet fehlt";


    CASE 10:


    Fehlertext:="Vorrichtung AS1 unten gespannt fehlt";


    CASE 11:


    Fehlertext:="Vorrichtung AS1 oben geöffnet fehlt";


    CASE 12:


    Fehlertext:="Vorrichtung AS1 oben gespannt fehlt";


    CASE 13:


    Fehlertext:="Übergabe Greifer geöffnet fehlt";


    CASE 14:


    Fehlertext:="Transfer Greifer geöffnet fehlt";


    CASE 15:


    Fehlertext:="Transfer Greifer geschlossen fehlt";


    DEFAULT:


    Fehlertext:="Unbekannter Fehler";


    ENDTEST


    SetGO DOG_12, FNR;


    TPWrite Fehlertext;


    WaitTime 2;


    RETRY;


    ENDPROC



    PROC Reset_FNR()


    TPErase;


    FNR:=0;


    SetGO DOG_12,0;


    ENDPROC



    Diese Fehlerausgabe an die SPS funktioniert auch. Nun hat der Kunde eine Kollision gefahren und möchte dass auch diese vom System produzierten Fehler auch an der SPS angezeigt werden.


    Ich konnte aber auch nach längerem Suchen keine Lösung finden, wie ich diese Fehler bestimmen oder direkt ausgeben kann.


    Meine Frage an Sie wäre nun, ob es eine Möglichkeit gibt und wenn Ja, welche.


    Vielen Dank schon mal im voraus

    Hi Leute,


    ich habe mir eine routine geschrieben, mit der ich mir immer die richtige Meldung anzeigen kann.


    Siehe hier:


    Im Arbeitsprogramm:
    WHILE IN_AREA_FREE_AS == FALSE
    Check (132, TRUE, 22, 003)
    ENDWHILE


    Im Check:
    DEF Check (EINGANG: IN, STATUS: IN, ZEIT: IN, FEHLER_NR: IN)
    INT EINGANG, ZEIT, FEHLER_NR
    BOOL STATUS
    CHAR TEXT[26] ; max. 26 Zeichen


    ;Beispiel Aufruf:
    ;Check ($in[8], true, 5, 17)


    $TIMER[1] = 0 ; Timer initialisieren
    ZEIT = ZEIT * 1000 ; Zeit von sek nach ms umrechnen
    $TIMER_STOP[1] = FALSE


    WAIT FOR ($TIMER[1] >= ZEIT) OR ($IN[EINGANG] == STATUS)


    IF ($TIMER[1] >= ZEIT) AND ($IN[EINGANG] <> STATUS) THEN
    $TIMER_STOP[1] = TRUE ; timer anhalten

    ;Fehlermeldung auswerten/setzen
    SWITCH FEHLER_NR
    CASE 001
    ;Fehler 1
    TEXT[] = "Kein Werkstueck angewaehlt"
    usermessage (FEHLER_NR, TEXT[])
    DEFAULT
    ;Ungueltige Fehlernummer
    TEXT[] = "Ungueltige Fehlernummer"
    usermessage (FEHLER_NR, TEXT[])
    ENDSWITCH
    ENDIF
    $TIMER_STOP[1] = TRUE ; timer anhalten
    END


    Und im usermessage den Rest...:

    DEF userMessage (FNr:IN, Meldungstext:IN)
    INT FNr ; Fehlernummer aus dem Check() Programm
    CHAR Meldungstext[] ; Text aus dem Check() Programm - max. 26 Zeichen


    DECL KrlMsg_T Error_Msg
    DECL KrlMsgPar_T Par[3]
    DECL KrlMsgOpt_T Opt
    INT nHandle


    ;Fehlernummer an SPS uebertragen
    OUT_FNR_AN_SPS = FNr


    Error_Msg = { Modul[] "userfault", Nr 1, Msg_txt[] "Fehler-Nr. %1: %2" }


    ;%1 = FNr
    Par[1] = {par_type #value, par_int 0}
    Par[1] .par_int = FNr


    ;%2 = Meldungstext
    Par[2] = {par_type #value, par_txt[] " "}
    Par[2] .par_txt[] = Meldungstext[]


    Opt = { VL_Stop TRUE, Clear_P_Reset TRUE, Log_To_DB FALSE }


    nHandle = Set_KrlMsg (#quit, Error_Msg, Par[], Opt)


    ;Halt bei Taktende
    IF IN_HALT_TAKTENDE THEN
    ;FOLD OUT 144 'O_Halt_bei_Taktende' State=TRUE ;%{PE}%R 8.2.24,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:144, 3:O_Halt_bei_Taktende, 5:TRUE, 6:
    $OUT[144]=TRUE
    ;ENDFOLD
    HALT
    ;FOLD OUT 144 'O_Halt_bei_Taktende' State=FALSE ;%{PE}%R 8.2.24,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:144, 3:O_Halt_bei_Taktende, 5:FALSE, 6:
    $OUT[144]=FALSE
    ;ENDFOLD
    ENDIF


    ;Fehler in SPS zuruecksetzen
    OUT_FNR_AN_SPS = 0


    END



    Soweit funktioniert das auch, allerdings kann es vorkommen, dass ich z.B. 20 Meldungen habe und die probleme sich selbst behoben haben, wie Bereichsfreigabe.


    Wie kann ich die Meldung nach beheben des Problems automatisch löschen? Gibt es da ne Möglichkeit?




    Gruß Tealmasta