Kommunikation mit Kuka KRC 1

  • Schritt für Schritt zum Roboterprofi!
  • nachträglich noch: im telnet (TESTPRINT=1 in serial.ini) werden nur die Daten angezeigt die nach einem Aufruf von CWRITE zum Treiber gesendet und nach Aufruf von CREAD vom Treiber empfangen werden.
    Anbei ein simples Testprogramm um die Kommunikation zu prüfen. Hoffe das EXE funktioniert noch (1998 compiliert)

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Wer kann mir folgendes Programm erklären? Was versteht man unter der Interrupt-Funktion und unter break?


    &ACCESS RVP
    DEF SCHOK ( )
    EXT BAS (BAS_COMMAND :IN,REAL :IN )
    ;************************
    DECL MSG_T EMPTY_MSG ;****
    INT ANSWER ;**************
    ;************************


    BAS (#INITMOV,0 )
    ;Achsgeschwindigkeit
    FOR I=1 TO 6 STEP 1
    $VEL_AXIS[I]=100
    ENDFOR
    ;Achsbeschleunigung
    FOR I=1 TO 6 STEP 1
    $ACC_AXIS[I]=100
    ENDFOR
    $VEL.CP=0.15
    $ACC.CP=0.5
    $APO.CDIS=1
    $APO.CORI=0
    $APO.CVEL=50
    $APO.CDIS=1
    PL_NR=1
    PTP XHOME
    $BASE=BASE_DATA[8]



    $TOOL=TOOL_DATA[10]
    TAFEL=0
    LOOP ;Endlosschleife
    WAIT FOR $IN[202]==TRUE
    TAFEL=TAFEL+1



    IF TAFEL>7 THEN
    EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] " ",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[] " ",ANSWER 0}
    $MSG_T=EMPTY_MSG
    $MSG_T.MODUL[]=" "
    $MSG_T.KEY[]="Leider keine leckere Schokolade mehr da!"


    $MSG_T.PARAM_TYP=#VALUE


    $MSG_T.VALID=TRUE


    WHILE $MSG_T.VALID
    WAIT SEC 0.05
    ENDWHILE
    WAIT SEC 0.2


    WAIT SEC 2


    EXIT


    ENDIF






    PALL_INIT ( )
    ;PALL_TEACH ( )
    BERECHNEN ( )
    PALETTIEREN ( )
    WAIT FOR $IN[203]==TRUE
    NEU_ABLEGEN ( )
    ABLEGEN ( )
    ENDLOOP
    PTP XHOME


    END


    ;***** PALETTIEREN *****
    DEF PALETTIEREN ( )
    ;Aufnehmen
    PTP PAL_POS_2 C_PTP
    LIN PAL_POS_1
    ;Greifer setzen
    GREIFER_ZU ( )
    ;Hochfahren
    PTP PAL_POS_2 C_PTP






    END
    DEF ABLEGEN ( )
    PTP ABLEG_POS
    GREIFER_AUF ( )
    END



    DEF BERECHNEN ( )


    SWITCH TAFEL
    CASE 1
    NV={X 0,Y 0,Z 0,A 0,B 0,C 0}
    CASE 2
    NV={X 0,Y 0,Z -13,A 0,B 0,C 0}
    CASE 3
    NV={X 0,Y 0,Z -26,A 0,B 0,C 0}
    CASE 4
    NV={X 0,Y 0,Z -39,A 0,B 0,C 0}
    CASE 5
    NV={X 0,Y 0,Z -52,A 0,B 0,C 0}
    CASE 6
    NV={X 0,Y 0,Z -65,A 0,B 0,C 0}
    CASE 7
    NV={X 0,Y 0,Z -78,A 0,B 0,C 0}
    ENDSWITCH
    $BASE=BASE_DATA[8]:NV
    END


    ;***** bearbeiten *****
    DEF NEU_ABLEGEN ( )


    SWITCH TAFEL
    CASE 1
    NV={X 0,Y 0,Z 13,A 0,B 0,C 0}
    CASE 2
    NV={X 0,Y 0,Z 26,A 0,B 0,C 0}
    CASE 3
    NV={X 0,Y 0,Z 39,A 0,B 0,C 0}
    CASE 4
    NV={X 0,Y 0,Z 52,A 0,B 0,C 0}
    CASE 5
    NV={X 0,Y 0,Z 65,A 0,B 0,C 0}
    CASE 6
    NV={X 0,Y 0,Z 78,A 0,B 0,C 0}
    CASE 7
    NV={X 0,Y 0,Z 91,A 0,B 0,C 0}
    ENDSWITCH
    $BASE=BASE_DATA[8]:NV
    END





    ;***** PALETTIEREN INITIALISIEREN *****
    DEF PALL_INIT ( )
    $OUT[4]=FALSE
    PAL_POS_1=UR_PAL
    PAL_POS_2=UR_PAL
    PAL_POS_2.Z=PAL_POS_1.Z+120
    $TOOL=TOOL_DATA[10]
    $BASE=BASE_DATA[8]
    END


    ;***** PALETTIEREN TEACHEN *****
    DEF PALL_TEACH ( )
    $BASE=BASE_DATA[8]


    $TOOL=TOOL_DATA[10]
    LIN UR_PAL
    HALT
    LIN ABLEG_POS
    HALT
    END
    ;***** Greifer auf *****
    DEF GREIFER_AUF ( )
    $OUT[4]=FALSE
    WAIT SEC 1.0
    END
    ;***** Greifer zu *****
    DEF GREIFER_ZU ( )
    $OUT[4]=TRUE
    WAIT SEC 1.0
    END
    ;++++++++++++++++++++++++++++++++++++++++++++++++++


  • Wer kann mir folgendes Programm erklären? Was versteht man unter der Interrupt-Funktion und unter break?


    Das hast du zwar nicht in deinem Programmauszug, aber du kannst einen INTERRUPT deklarieren und dann in diesem Programm eine Bewegung unterbrechen, wenn z.B. eine Lichtschranke meldet, das das Bauteil erreichbar ist!


    Beispiel:
    BEARBEITUNGSPROGRAMM ( )
    INTERRUPT DECL 100 WHEN $IN[1] DO LICHTSCHRANKE_TEST ( )


    LIN START_SUCHPOSITION
    POSITION_SUCHEN ( )
    INTERRUPT OFF 100
    $ADVANCE=3
    LIN_REL {Z +100.0}
    END ;BEARBEITUNGSPROGRAMM


    DEF POSITION SUCHEN ( )


    $ADVANCE=0
    INTERRUPT ON 100
    LIN SUCHPOS


    END



    DEF LICHTSCHRANKE_TEST ( )


    INTERRUPT OFF 100
    BRAKE
    RESUME


    END



    Damit kann man sehr gut ein Bauteil suchen wenn eine Bewegungsrichtung als Bezugspunkt auf alle verschiedenen Bauteile passt z.B. verschieden hohe Bauteile immer auf der selben Stelle ablegen! ;)


    Ich hoffe es hilft schon mal weiter! :)

  • Hallo,


    Habe bereits die Kommunikation per Hyperterminal zustandegekriegt, bloss bei dem Befehl mit CWRITE bekomme ich nichts am Hyperterminal angezeigt :nocheck:
    Kann jemand da von euch weiterhelfen??


    Hier ein Auszug:


    DEF Vers ()
    CHAR TEST
    INT HANDLE
    REAl TIMEOUT


    DECL STATE_T, SR_T, SW_T, SC_T
    DECL MODUS_T MT_T, MW_T


    MW_T=#SYNC
    MR_T=#ABS
    TIMEOUT =1.0



    COPEN(:SER_2, HANDLE)
    CREAD(HANDLE, SR_T,MR_T,TIMEOUT,OFFSET,"%s",TEST)
    CWRITE(HANDLE,SW_T, MW_T,"%s",Test)


  • Das Zeichen einlesen mit CREAD funktioniert ?


    Versuch mal nur das CWRITE mit:
    CWRITE(HANDLE,SW_T, MW_T,"Hallo")


    - welches serielle Protokoll verwendest Du ?


    Wieso soll das denn nicht funktionieren?


  • Das Zeichen einlesen mit CREAD funktioniert ?


    Versuch mal nur das CWRITE mit:
    CWRITE(HANDLE,SW_T, MW_T,"Hallo")


    - welches serielle Protokoll verwendest Du ?


    Hmmm
    Bei nur mit CWRITE und Hallo wird auch nichts angezeigt

  • das ist nicht gut :down:


    aber mit dem CREAD kannst Du das Zeichen vom Hyper empfangen ?


    Wenn du eine Software V5.x hast kannst den seriellen Debugger einschalten.
    Der zeigt Dir an ob jetzt das "Hallo" intern an den seriellen Chip gesendet wird.


    Hmmm, denke Du hast eine "alte" V4.x, d.h. in der serial.ini Sektion XONXOFF ist der Eintrag
    [glow=red,2,300]DSR_LINE=0 ; 0 = DSR line not connected, 1 = DSR line must be high[/glow]
    noch nicht enthalten.
    Dann musst Du am seriellen Stecker roboterseitig Pin DSR und PIN DTR brücken.
    DSUB 9: pin 4 und 6
    DSUB25: pin 6 und 20

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein



  • Guten Morgen!!
    Sooooooooooooo...


    1. Wie kann ich denn feststellen, ob ich die Zeichen mit CREAD empfange??


    2. Habe ich ein Programm auf dem Schulroboter gefunden, das damals ein Projekt war, und es das Protokoll XONXOFF verwendet hat. Jedoch haben wir den Roboter (KR 6, Sotware KRC1 V3.2.6) und ich habe hier gelesen , dass ab V4x man mit dem Protokoll XONXOFF arbeiten kann und bis V4x mit der Prozedur 3964R. Deswegen habe ich das mit XOnXOFF probiert. Kann das sein das ich nichts am Hyper sehe da ich das falsche Protokoll verwende?
    Und es stellt sich die Frage, wie die Projektgruppe es mit XONXOFF hingekriegt hat!?


    Ich habe dieses Testprogramm verwendet unter XONXOFF und es scheint zu funktionieren, der Roboter verfährt bei Eingabe



    DEF Prak ()
    REAL TIMEOUT
    INT HANDLE, TEST, OFFSET
    DECL STATE_T STATR, STAT
    DECL MODUS_T MODR


    MODR=#ABS
    OFFSET=0
    TIMEOUT=0


    $VEL_AXIS[1]=20
    $VEL_AXIS[2]=20
    $VEL_AXIS[3]=20
    $VEL_AXIS[4]=20
    $VEL_AXIS[5]=20
    $VEL_AXIS[6]=20
    $ACC_AXIS[1]=20
    $ACC_AXIS[2]=20
    $ACC_AXIS[3]=20
    $ACC_AXIS[4]=20
    $ACC_AXIS[5]=20
    $ACC_AXIS[6]=20


    COPEN(:SER_2,HANDLE)
    CREAD(HANDLE,STATR,MODR,TIMEOUT,OFFSET,"%d%d%d),TEST)


    IF TEST <>123 THEN
    PTP{AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
    WAIT SEC 1.0
    PTP{AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 90}
    WAIT SEC 1.0
    PTP{AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
    ENDIF


    CCLOSE(HANDLE,STAT)
    END

  • Hallo!


    1. man schaut in die Variable (hier TEST) welchen Wert sie hat. Du weisst wie das geht ?
    Ausserdem zeigt die Variable OFFSET an wieviele Zeichen empfangen wurden


    2. Das XONXOFF-Protokoll gibt es ab dem Kernsystem 3.38 (so ab 1.1.2000).
    Also auch in der V3.2.6 die damals parallel zur V4.x gebaut wurde.


    So klappt es bestimmt nicht . Syntaxfehler. 3 Formate und nur eine Variable.
    CREAD(HANDLE,STATR,MODR,TIMEOUT,OFFSET,"%d%d%d),TEST)


    Nochmal:
    Das Senden (CWRITE) funktioniert mit XONXOFF nur wenn die DSR-Leitung HIGH ist !
    Wenn der Eintrag DSR_LINE=0 in der serial.ini fehlt muss Du die Brücke einbauen.

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Guten Morgen...
    aha aha..ok ok
    danke erstmal!

    zu 1. neee, leider nicht. Ich bitte um Aufschluss!


    zu 2. Ok, werde in die serial.ini nachschauen und dann brücken

  • Hallo!!!
    Sooooo....bekomme endlich eine Ausgabe aufn Hyperterminal angezeigt!!!
    Brauchte auch nichts brücken...hab nur ein anderen Adapter(DSUB9-DSUB25) genommen.
    Danke nochmal für eure Hilfe

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