verlorene Bytes über RS232

  • Hallo,


    ich habe ein kleines Problem mit einem Kuka KR C 2. Für meine Diplomarbeit muss ich Daten über die serielle Schnittstelle zu einem PC übertragen. Es werden immer 24 Bytes gesendet bzw. empfangen.


    Die Befehle lauten wie folgt:
    CWRITE(HANDLE, SW_T, MW_T, "%r%r%r%r%r%r", xpos, ypos, zpos, aori, bori, cori)
    CREAD(HANDLE, SR_T, MR_T, TIMEOUT, OFFSET, "%r%r%r%r%r%r", xpos, ypos, zpos, aori, bori, cori)


    mit den Daten
    MR_T=#abs
    MW_T=#sync
    Offset=0
    Timeout=10


    als Protokoll habe ich XON/XOFF gewählt.


    Das Problem ist, das in unregelmäßigen Abständen immer das erste Byte nicht ankommt. Das heißt, tritt der Fehler beim Senden am Roboter auf, wird das erste Byte weder über Telnet am Robi noch bei einem Portmonitor am PC angezeigt. Tritt der Fehler umgekehrt auf, ist das erste Byte über den Portmonitor zu sehen, über telnet jedoch nicht.


    Was mir hierbei komisch vorkommt, ist die Tatsache, dass der Fehler immer nur beim ersten Byte auftritt. Der Fehler tritt zufällig auf, teilweise bei jeder zweiten Übertragung, teilweise aber auch erst nach hundert Übertragungen.


    Es wäre nett, wenn mir jemand diesbezüglich weiterhelfen könnte.


    Vielen Dank im voraus


    Frank

  • Schritt für Schritt zum Roboterprofi!
  • Welchen COM-Port benutzt du?


    denn


    Also NUR COM3 verwenden!

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.

    Einmal editiert, zuletzt von notime ()

  • Hallo Frank,


    setze bitte die Werte XON_VAL und XOFF_VAL in der serial.ini auf 0.
    Anschliessend Kaltstart!
    Da Du die Werte binär verschickts kann auch das erste Byte mal den Wert 17 oder 19 annehmen.
    Das XON/XOFF-Protokoll erkennt das dann als Steuerzeichen.
    Ich hoffe es klappt dann
    Paul

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Ich verwende COM3. Der war auch von Haus aus aktiviert.


    Nach dem ich XON/XOFF auf 0 gesetzt habe, habe ich dieses Problem nicht mehr. Vielen Dank für den Tipp, hätte man eigentlich auch selber drauf kommen können.


    Aber dafür habe ich ein anderes Problem, welches sehr selten vorkommt. Nachfolgend ist ein Teil der Kommunikation, aufgezeichnet über das Programm "telnet95 192.0.1.1":



    SER[3]-TX: K<0xA>aDt<0xA8><0x8C><0xBE>l<0x9D><0xA6>D<0xC1><0xE6>3Ct<0xA4><0x12><
    0xBC>|<0xFF>3C
    SER[3]-RX: K<0xA>aDt<0xA8><0x8C><0xBE>h<0xAD><0xA6>D<0xC2><0xE6>3Cs<0xA4><0x12><
    0xBC>}<0xFF>3C
    SER[3]-TX: S<0xA>aDw<0xA8><0x8C><0xBE>c<0xAD><0xA6>D<0xB0><0xE6>3Ct<0x96><0x13><
    0xBC>|<0xFF>3C
    SER[3]-RX: S<0xA>aDx<0xA8><0x8C><0xBE>`<0xBD><0xA6>D


    An dieser Stelle erfolgt der Abbruch. Das heißt, der Roboter empfängt nicht alle Daten vom PC. Auf dem Portmonitor werden allerdings alle 24 Byte als gesendet angezeigt. Kann das daran liegen, das vielleicht noch nicht alle Daten zum Zeitpunkt der Abfrage da waren? Es kann ja sein, das zu dem Zeitpunkt erst die 12 Bytes übertragen waren und er deswegen eine Fehlermeldung ausgibt.


    Der Roboter gibt in der CREAD-Zeile die Fehlermeldung "Keine Daten / Variablen mehr vorhanden" aus. Falls jemand Erfahrung mit dieser Fehlermeldung hat, wäre ich dankbar.


    noch mal Vielen Dank


    Gruß


    Frank

    Einmal editiert, zuletzt von frank_w ()

  • Hallo Frank,


    zur Info, die Kommunikationsdaten die du im Telnet siehst ist der Telegramminhalt die das CREAD liest - nicht die Daten die wirklich übertragen werden.
    Das kann bei XON/XOFF passieren wenn zu frühzeitig das Telegrammende erkannt wird.
    In der serial.ini gibt es die Variable CHAR_TIMEOUT
    [XONXOFF]
    CHAR_TIMEOUT=50 ; msec Timeout after last received character
    ; to recognize the end of telegram
    Wenn jetzt der Sender im Telegramm eine Pause grösser 50 msec macht wird da ein Telegrammende erkannt. Der Rest des Telegramms müsste eigendlich im nachfolgenden Empfangsbuffer liegen ($DATA_SER3 ist noch 1).
    Wenn Du eine KUKA-Softwareversion ab V5.3 hast gibt es dort auch einen "Portmapper".
    Gruss Paul

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo Paul,


    das genau war mein zweiter Fehler. Jetzt scheint alles zu funktionieren.


    Jetzt ist mir auch die Anzeige unter Telnet klargeworden.


    Noch mals vielen Dank


    Gruß
    Frank

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