KRC1 und RS232

  • Hallo Leute,


    bin neu hier und hab gleich mal ein paar ganz doofe Fragen :hilfe:. Ich würde gern einen KUKA mittels COM 2 Schnittstelle ansprechen. Das Kabel (Nullmoden mit belegten PINs für Transmit (TxD), Receive (RxD) und Signal Ground) ist bereits angeschlossen, und konfiguriert (COM2=ENABLE (HW_INF.INI und BAUD, CHAR_LENS, STOP_BIT, PARITY). Eine Verbindung mittels Telnet läst sich herstellen, leider lassen sich aber dann keine Daten an den PC senden. Ein Versuch den PC (Windows XP) mittel Telnet (Telnet 192.0.1.2) zu verbinden schlug fehl. Hyperterminal funktioniert, es lassen sich jedoch keine Eingaben machen.


    Hier nun meine Fragen:
    Welches Verbindungsprotokol ist sinnvoll und möglich?
    Wie läst sich eine erfolgreiche Verbindung überprüfen (telnet, Hyperterminal)?
    Welches Format sollten vom PC gesendete Daten haben?
    Lassen sich empfangene Daten ohne weiteres in die Robotersteuerung (online) einbinden?


    :danke:
    Ralf

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Ralle!


    Auf Telnet (telnet 192.0.1.2) siehst Du nur den Traffic von VxWorks zur seriellen Schnittstelle. Alles was Du dort eingibst, landet in der Robotersteuerung und nicht am anderen Ende der seriellen Schnittstelle.


    Das meiner Ansicht nach sinnvollste Protokoll ist das 3964 (Siemens). Jetzt wäre allerdings die Frage offen, wie Du die Daten aus dem PC rausbringen willst. Die .dll dafür kostet samt Doku stramme 500 Euro. Sag doch mal, welche Daten Du wie übertragen willst und für welchen Anwendungsfall Du das alles brauchst.


    Grüße Robodoc :beerchug:

  • Hallo,


    erst mal danke für die Antwort. Wollte Längen, Breiten und Höhenangaben, welche mittels Lichtschranken aufgenommen wurden und von einem Programm errechntete Ablageplätze an den Roboter übergeben, damit dieser Pakete aufnehmen und an berechneten Platz ablegen kann. Die Komunikation von Rechner und Steuerschrank (Windows 95) funktioniert schon mal über Hypereterminal und das Nullmodemkabel. Bleibt also nur noch die Komunikation zwischen VXWorks und Rechner.
    Ich hoffe diese Informationen helfen weiter.


    Grüße
    Ralf

  • Um die Kommunikation zwischen VxWorks und Rechner (Roboterschrank) aufzubauen, mußt Du das einfach in der HW_INF.ini entsprechend konfigurieren. Du kannst ENTWEDER die serielle Schnittstelle Win95 zuteilen ODER VxWorks.


    In der serial.ini stellst Du das Protokoll ein. Welches Du nimmst ist eigentlich völlig wurscht solange Du über CREAD und CWRITE die Daten auf die richtige Art und Weise abholst bzw. versendest. Ich hab hier irgendwo eine Doku von CREAD und CWRITE abgelegt. Weiß aber nicht mehr wo. Ma kucken ob ich die noch finde.


    Gruß Robodoc


    So, hab sie gefunden. Jetzt nochmal eine Frage: Soll das ein Endlosprogramm werden? Wie willst Du den Roboter betreiben? Ich frage, weil Du beim seriellen Empfang ja auch ein Timeout angeben mußt. Am Ende diesen Timeouts muß der Roboter entsprechend reagieren. Wichtig ist, daß Du auch feststellst, ob ein Timeout vorliegt weil Du ja danach Daten benutzen willst, die gar nicht beschrieben wurden.


    Die Gefahr einer "Endlosschleife" sehe ich hier als recht groß an.


    Sach doch ma Bescheid :meld:

  • Dauerte zwar etwas länger, aber hat sich viel getan, die Verbindungen stehen, nun geht es um die Programierung:
    Also, die KRC soll von einer Beckhoffsteuerung via RS232 Daten (Koordinaten:X,Y,Z eines Greifpunktes) bekommen. Die Daten werden in einem Sorter mittels Lichtschranken aufgenommen und aufbereitet. Die KRC soll diese Werte dann als Anfahrtskoordinaten für einen Sauggreifer verwenden. Das gleiche wird dann noch ein zweites mal gemacht, für die Koordinaten des Ablageplatzes. Insgesammt sind also 6 Werte zu übertragen. Wie sollte man die Abfrage der Werte am besten gestallten um sicherzugehen das:
    a: der Roboter erst bewegt wird, wenn er die Daten bekommen hat,
    b: ohne das eine Endlosschleife entsteht?


    Mfg
    Ralle

  • Innerhalb des CRead Befehls wird das Format der Nachricht abgelegt. Der Robbie wartet dann so lange, bis eine vollständige Nachricht dieses Formats angekommen ist. Wenn Du zusätzlich ne Prüfsumme mit überträgst, kann eigentlich nicht viel schief gehen. Ein timeout von 0 sollte laut Doku "warte ewig" bedeuten, bei mir wartet er aber gar nicht. CREAD hat aber nen Rückgabewert, in dem drin steht ob ne vollständige Nachricht empfangen wurde. Also habe ich nen LOOP, mit dem CREAD drin, dann nen
    IF nachricht_OK THEN
    Das berechnen/vergleichen der Prüfsumme
    Auslesen der Koordinaten/Daten
    Fahren
    ENDLOOP

    If you and DEAD people can read Hex, how many people can read Hex?

  • Hallo,


    hab mir erst mal die Doku zur KRL besorgen müssen. Hab dann mal versucht, ein kleines Testprogramm zur Kontrolle der RS232 Verbindung zu schreiben.
    Die KRC soll den Robie nach empfang eines String mal kurz mit dem Greifer wackeln lassen. Nur leider bekomme ich beim schrittweisen durchgehen, durch das Programm immer wieder die Fehlermeldung: TEST Wert ungültig.


    Hier nun das Programm, ich hoffe :hilfe: :nocheck: ihr könnt mir weiterhelfen.


    DEF Test( )


    REAL TIMEOUT
    INT HANDLE
    INT TEST
    INT OFFSET
    DECL STATE_T STATR, STAT
    DECL MODUS_T MODR


    INI


    MODR=#ABS
    OFFSET=0
    TIMEOUT=0


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


    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 TIME= 1 sec
    PTP {AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 90}
    WAIT TIME= 1 sec
    PTP {AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}
    ENDIF


    CCLOSE(HANDLE,STAT)


    END


    :danke:

  • Hallo Ralle!


    Ich würd's mal mit einem Timeout von 60 oder so versuchen. Timeout 0 heißt ja, daß der Roboter nach 0 Sekunden weitermacht wenn nix kommt. Soll ja laut Doku ein "Wait forever" sein aber leider ist dem nicht so.

  • Hallo,
    Die Fehlermeldung "Wert ungültig" bekomme ich immer wenn ich eine Variable zwar deklariere, aber keinen Wert zuweise.
    Soweit ich weiß möchte der KUKA zu einer Deklaration, dann im INI Teil, auch einen Wert initialisiert haben.


    Gruß SyncMa :kopfkratz:

    Ob orange oder blau, die können nerven wie die Sau.

  • Das mit dem Wert angeben ist so ne Sache, ich will ja eigentlich nur testen, ob die Komunikation zwischen Rechner (Hyperterminal) und VX Works funktioniert. Die Komunikation zwischen Hyperterminal und Windows 95 klappt schon. Bin mir nur nicht sicher wegen der Übertragungsprotokolle. Benutzte mit Windows 95 XON/XOFF. Das selbe versuche ich grad mit VX WORKS; bekomm blos nichts ans laufen. So langsam verzweifel ich hier. :bawling::nocheck:

  • Hallo Ralle nicht verzweifeln :liebe029:


    wenn du ein Hyperterminal mit der KRC seriell verbunden hast kannst nur XON/XOFF benutzen.
    Also Protokoll 4 in der serial.ini einstellen (implementiert ab KRC V4.0) und Kaltstart durchführen.
    Anbei ein einfaches Testprogramm für Integer:


    DEF CR_CW ( )


    INT HANDLE,OFFSET,I
    REAL TIMEOUT
    DECL STATE_T STATUS
    DECL MODUS_T MODUS
    INT ERG,MAC


    FOR I=1 TO 6
    ;ACHSGESCHWINDIGKEIT
    $VEL_AXIS[I]=100 ;0-100 [%]
    ;ACHSBESCHLEUNIGUNG
    $ACC_AXIS[I]=90 ;1-100 [%]
    ENDFOR
    $TOOL=$NULLFRAME
    $BASE=$NULLFRAME
    PTP {A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0.0}


    MAC=1
    TIMEOUT=1.0


    COPEN(:SER_2,HANDLE)
    IF HANDLE==0 THEN
    HALT
    ENDIF


    LOOP


    MODUS=#SYNC
    CWRITE(HANDLE,STATUS,MODUS,"%d",MAC)


    WAIT FOR $DATA_SER2>0 ;hier auf Telegramm warten da timeout 0.0 nicht wartet


    MODUS=#ABS
    OFFSET=0


    CREAD(HANDLE,STATUS,MODUS,TIMEOUT,OFFSET,"%d",ERG)
    IF (STATUS.RET1<>#CMD_OK) THEN
    HALT
    ENDIF


    HALT ; kontrolle ERG


    MAC=MAC+1


    ENDLOOP
    END


    Viel Erfolg

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo Leute,


    wollte nur noch mal ne Rückmeldung geben.
    Also Programm läuft, allerdings hab ich noch nen Wait Befehl eingebaut. Das mit dem Timeout funktioniert bei mir hinten und vorn nicht.


    Danke nochmals für eure Hilfe. :grinser043:
    :danke:

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