Gedenksekunde bei der seriellen Datenübertragung vermeiden?

  • Hallo Allerseits,


    mein damaliger Hiwi und ich haben mit viel Unterstützung von euch ein Robotersystem zur automatischen Entleerung von Sorterendstellen entwickelt und hatten damals vor allem viele Fragen zur seriellen Schnittstelle z.B unter


    http://www.roboterforum.de/rob…t_kuka_krc_1-t1485.0.html


    Inzwischen läuft das System seit geraumer Zeit recht gut, nur man ist ja nie zufrieden. ;) Um die Zykluszeiten weiter zu reduzieren bleibt inzwischen nur noch eine Reduzierung der Kommunikationszeiten über. Bei unserem System (KR 6/2 gesteuert mit einer KRC 1 (Software 4.1.5) ) legt nämoich der Robi bei jeder Kommunikation eine Gedenksekunde von etwa 0,5 s ein.


    Nun die Preisfrage: Gibt es prinzipielle Möglichkeiten um die serielle Kommunikation zu beschleunigen? (Baudrate erhöhen (derzeit 9600) o.ä? Da ohnehin nur max etwa 20 Zeichen übertragen werden, habe ich bis jetzt den Flaschenhals nicht in der Baudrate gesehen)


    Derzeit sieht das so aus:


    108 ;Sprungmarke für die Abfrageroutine
    109 EINLESEN:
    110
    111 ;Öffnen des seriellen Ports 2
    112 COPEN(:SER_2,HANDLE)
    113 IF HANDLE==0 THEN
    114 HALT
    115 ENDIF
    116
    117 ;Definition der Parameter für den CREAD Befehl
    118 TIMEOUT=0.0
    119 MODUS=#ABS
    120 OFFSET=0
    121
    122 ;Warteschleife für den CREAD Befehl
    123 WAIT FOR $DATA_SER2>0
    124
    125 ;Leseanweisung und Zuordnung der gelesenen Werte zu Variablen
    126 CREAD(HANDLE,STATUS,MODUS,TIMEOUT,OFFSET,"%d%d%d%d%d%d%d%d%d%d",BASE,XPOS,YPOS,ZPOS,DEGA,APOS,BPOS,CPOS,DEGB,UGA)
    127
    128 ;Berechnung der Prüfsumme
    129 CHECK=BASE+XPOS+YPOS+ZPOS+DEGA+APOS+BPOS+CPOS+DEGB
    130
    131 ;Schleife zur Wertekontrolle
    132 IF CHECK==UGA THEN
    133
    134 ;Definition der Parameter für den CWRITE Befehl
    135 MODUS=#SYNC
    136
    137 ;Senden der Prüfsumme
    138 CWRITE(HANDLE,STATUS,MODUS, "%s",OK[])


    Hat irgendwer einen netten Vorschlag oder muss man mit der Gedenksekunde einfach leben?


    Vielen Dank und viel Grüße


    Andreas

  • Schritt für Schritt zum Roboterprofi!
  • Hi!


    Hermann


    nein, die Schnittstelle wird nur an dieser Programmstelle einmal geöffnet und erst am Programmende bei Zeile 1020 wieder geschlossen, bleibt also während des gesamten Durchlaufs offen.
    Ich habe schon überlegt, ob vielleicht eher meine Programmlänge das Problem ist, der durchläuft natürlich jedesmal alle inzwischen 1400 Zeilen Code. Ich komme auf diese Länge weil ich mit vielen IF ElSE Schleifen arbeite um unterschiedlichste Zwischenpunkte und Anfahrschleifen zu realisieren. Ohne diese Schleifen müsste ich die immer als Fahrauftrag von außen übergeben womit ich wieder beim Problem der Datenübergabe bin...


    Alternative wäre, mit der GOTO Funktion im Programm hin und her zu springen, bringt mir das was?


    Und was meinst du mit SPS.SUB? Eine komplette Subroutine die sich um die Kommunikation kümmert? Müsste mich da offen gesagt wohl noch etwas einarbeiten...


    @Dingi
    Nein, explizite Meldungen gebe ich nicht aus, es wird im KCP allerdings immer die aktuelle Programmzeile angezeigt, hatte auch schon überlegt, das abzustellen weil die Darstellung sicherlich einiges an Systemressourcen frisst. Nur wie stelle ich das ab?


    Danke und Gruß
    Andreas

  • Hallo Andreas,


    wo "fehlen" Dir die 0.5 sec ? Wo hast Du da gemessen ?
    Welches serielles Protokoll benutzt Du ?


    - COPEN nur einmal im Hauptprogramm öffnen, CCLOSE auskommentieren
    - bein CWRITE mit Modus #ASYNC arbeiten

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hi Paul,


    die Zeit "fehlt" mir in dem Sinne, dass der Roboter nachdem er ein Paket gegriffen und wieder abgelegt hat, erstmal etwa 0,5 sec still steht, bis er sich wieder in Bewegung setzt. Und dass obwohl die Daten für den nächsten Zugriff schon im Steuerungsrechner (auf dem eine in Delphi geschriebene Middleware läuft) bereit sind. Die 0,5 sec sind geschätzt, nicht wirklich genau gemessen, das wäre möglich müsste dafür aber meine Messtechnik deutlich umstricken.


    Ich nutze das Xon/Xoff mit den 0-0 Einstellungen, also die "pure serial communication"


    Das CClose werde ich morgen mal auskommentieren, danke, bin leider gerade nicht am Roboter.
    Was genau sind die Unterschiede zwischen dem Sync und Async modus? So richtig schlau geworden bin ich an der Stelle aus der Cread/Cwrite doku nicht.


    Danke und Gruß
    Andreas

  • Guten Morgen Andreas,


    #SYNC : der Interpreter kehrt aus der Funktion CWRITE erst wieder zurück wenn
    das Telegramm komplett gesendet wurde
    #ASYNC: der Interpreter kehrt aus der Funktion CWRITE sofort wieder zurück
    und das Telegramm wird im Hintergrund gesendet (Zeitersparnis)


    a+

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hi LindePaul,


    So, habe das mal auf #ASYNC umgestellt und das CCLOSE auskommentiert, es wird zumindest nicht schlechter... ;)


    Nur wird nun nicht der Comport immer wieder geöffnet, ohne das er geschlossen wird? Gibt das nicht auch mal Probleme? Hatte mal die


    108 ;Sprungmarke für die Abfrageroutine
    109 EINLESEN:


    hinter das öffnen des seriellen Ports geschoben, damit der Comport halt nur einmal geöffnet wird und er die Leseschleife dahinter ausführt. Da meckert er aber, nur warum?!? :huh:


    Viele Grüße


    Andreas

  • Guten Morgen Andreas,


    mehrere COPEN ohne CCLOSE macht überhaupt nichts. COPEN merkt sofort das der COM bereits offen ist und macht nichts.
    Deine Aussage "Da meckert er aber, nur warum?!?" kann ich nur so beantworten "die KUKA-Steuerung ist eine Frau". Also, liebevoll behandeln.


    Wenn eine ernsthafte Antwort haben willst - bitte Meldungsnummer oder -text angeben.


    Die 0,5 sec scheinen nun nicht bei der ser.Übertragung verbraten zu werden.
    Vielleicht kann man im Fahrprogramm noch was optimieren - da kann ich Dir aber nicht helfen (bräuchte da das Programm!)
    a+

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hi LindePaul


    Danke, das mit der Frau habe ich doch schon immer gewusst.... ;)


    Ich schmeisse das gute Stück nachher nochmal an und versuch die Meldung zu reproduzieren.


    Das Programm kann ich dir zukommen lassen... ;)


    Viele Grüße
    Andreas

  • Hallo Allerseits!
    Mal ein Update zu meiner Suche nach der Zeit: Bin nun schon mal schlauer geworden: wir haben uns hier mal ein Delphisheet gebastelt, was die Kommunikation mit dem Roboter übernimmt, die Responsezeiten misst und den Verkehr logt. Und siehe da, es läuft auf gute 240-260 ms hinaus. Das Interessante dabei war aber die Logdatei. Der Kuka schickt seine Antwort „33333333“ (nicht wundern, haben wir damals so festgelegt) nicht als einen String von 8 Zeichen, sondern als 8 einzelne mini-Strings von je einem Zeichen. Reduziert man das auf ein Zeichen erhält man prompt auch Zeiten von nur 30 ms. Und 8 mal 30 ms geben dann 240 ms….


    Frage: ist das bei der Cread/Cwrite Kommunikation prinzipiell so oder sind meine Einstellungen falsch, aber wenn ja, wo? :huh:


    Vielen Dank und viele Grüße


    Andreas

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