KRC 32 Serielle Schnittstelle

  • Hi,
    ich habe es jetzt geschafft den Roboter vollständig seriell vom pc aus ansteuern zu können und suche jetzt noch Optimierungsmöglichkeiten das das Roboterprogramm schneller arbeitet.


    z.Z. sieht das prog so aus:


    kann man von den programmzeilen evtl einige in die .dat auslagern um das prog zu beschleunigen???
    und wozu ist diese .dat überhaut.
    also wenn es optimierungsvorschläge gibt immer her damit.

  • Hallo,


    Ich nehme mal schwer an, das die Kommunikation selber das Programm ausbremst.
    Zunächst einmal gehören COPEN und CCLOSE ausserhalb von LOOP ENDLOOP hin, Du musst den Port ja nicht ständig öffnen und schliessen. Das sollte schon was bringen.
    Dann kanst Du mal mit einem TIMER messen wie lange Du auf

    Code
    1. WAIT FOR $DATA_SER1>0
    2. CREAD(HANDLE, SR_T, MR_T, TIMEOUT, OFFSET,“%F %F %F %F %F %F“, XPOS, YPOS, ZPOS, APOS, BPOS, CPOS)


    wartest. Um das an der Stelle schneller zu bekommen kannst Du mehr Punkte auf einmal übertragen. Oder eben auf dem anderen PC das Programm optimieren.
    Wichtig ist noch, das Du irgend eine Art von Sicherheit überträgst, wenn Du jetzt nen übertragungsfehler hast, dann fährt der Rob einfach munter los. Zum Beispiel einfach zum Schluss noch mal die Summe aller Koodrinaten übertragen, auf dem Rob überprüfen ob die stimmt und halt nicht fahren wenns schief ging.
    Ich bin mir nicht sicher, aber schickst Du mir 10.4F nicht immer 10 Zeichen für jede Koordinate? Da reichen doch deutlich weniger. Es bringt auch recht viel die Nachrichtenlänge möglichst kurz zu halten (vor allem, wenn Du niedrige Baudraten verwenden musst). Dafür kannst Du beispielsweise die Daten binär übertragen. Hol Dir einfach mal Literaur über digitale Kommunikation, da gibt es immens viel.
    Mehr fällt mir grad spontan nicht ein.
    Viel Glück beim optimieren,


    Kai

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

  • Kai hat schon recht
    - LOOP vor dem CWRITE und nach dem COPEN
    - Offset=0 vor dem CREAD
    - CCLOSE (wenn überhaupt nötig) nach dem ENDLOOP
    - das Format +xxxx.xxxx ist schon ok, kannst ja die Baudrate verdoppeln
    - da Du XOFFXON als Protokoll hast, bitte noch eine Checksumme übertragen


    was willst Du ins .DAT auslagern ?

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • keine ahnung, ich weis nur wenn ich dem robi was teache das er dann sone datei erstellt und dort die koordinaten glaube liegen.
    wozu is die .dat denn sonst da???

  • also ich habe das Programm jetzt folgendermaßen abgeändert:



    wenn ich das so mache geht alles im ersten durchgang gut. aber im zweiten sagt er mir:
    H1550 /R1/PCKCRTE:Keine Daten/Variablen
    oder
    Q1447 /R1/PCKCRTE:Unerreichb. Pkt.Soft


    aber ich habe nichts an dem Pcprog verändert. ich sende die selben Werte und wenn ich das andere Prog nehme(s.h.oben) dann geht es auch einwandfrei

  • Du solltest aber wirklich noch ne Prüfsumme einfügen. So sensationell stör-unempfindlich ist rs232 nicht, erst recht, wenn man es in der nähe der hohen Motorströme betreibt.
    Mach das auf jeden Fall, bevor Du die Baudrate hochsetzt...

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

  • ich hb jetzt grad noch ein gaaaanz anderes Problem mitbekommen. Die KRC scheint das RTS/CTS protokoll nicht richtig zu machen, denn mein PC wartet und wartet auf den Handshake aber da kommt keiner.
    und der microcontroller (C-control 2),den ich dran hängen will, kann kein Xon/Xoff. Oder hat jemand ne C programmieranlitung für das Protokoll

  • Keine Ahnung. Ich habe mir da so ein Terminalprogramm heruntergeladen und das zeigt an das es auf nen Handshake wartet.
    die daten von KRC zu PC senden geht ja, aber wenn ich jetzt Daten von dem PC an die KRC sende wartet die RC und Wartet...und nix passiert.

  • hmmm, die Frage ist nun sendet der PC wirklich ?


    Wenn das CTS-Signal am PC (das RTS vom der KRC) LOW ist sendet Dein PC nicht


    Daher ist es gut zu wissen wie der Pegel der RTS-Signale sind

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • doch die beiden nutzen ja den handshake.der pc wartet und wartet ja auf den handschake von der krc.
    und wenn ich die daten vom pc sende tut die krc so als würde sie nix empfangen.aber andersherum geht es ja.d.h. ich kann die daten von der krc auf dem pc empfangen

  • ich verzweifle langsam mit der kiste!!! :icon_rofl: ich schafe es einfach nicht daten vom pc auf der krc zu empfangen. Andersherum ist kein problem.
    der bleibt immer nachdem ich im probramm gesensdet habe an der stelle:
    wait for $Data_ser1>0
    stehen und wartet sich tot obwohl ich die daten vom pc gesendet habe. und mein pc macht dann auch nicht weiter weil der auf einen Handshakewartet der nie kommt.
    is da in meinem programm noch ein fehler??? ich weis echt nicht weiter :bawling:
    oder ist der adapter den ich zu meinem nullmodemkabel gebaut habe falsch
    9polig 25polig
    DIN8 female
    5 7 ---GND----- (Signalmasse)
    2 3 ---RxD----. (Recieve Data - Empfangsdaten
    | von Gegenstelle über DCE zum DTE)
    3 2 ---TxD----' (Transmit Data - Sendedaten vom DTE
    über DCE zur Gegenstelle)
    7 4 ---RTS----. (Reqest To Send - Empfangsbereitschaft
    | des DTE)
    8 5 ---CTS----o (Clear To Send - Sendebereitschaft
    | des DCE)
    9 22 ---RING---' (DCE hat Ruf erkannt)
    4 20 ---DTR----. (Data Terminal Ready - DTE ist prinzipiell
    | bereit, d.h. Port aktiviert)
    6 6 ---DSR----o (Data Set Ready - DCE ist prinzipiell
    | bereit, d.h. eingeschaltet)
    1 8 ---DCD----' (Data Carrier Detect, man ist verbunden)

  • Dein Adapter stimmt schon. Das Kabel gesamt sollte so aussehen:


    25 pol KRC32 8 pol PC


    RTS 4 ------------- 8 CTS
    CTS 5 ------------- 7 RTS
    TX 2 ------------- 2 RX
    RX 3 ------------- 3 TX
    GND 7 ------------ 5 GND


    Ich weiss nicht was Du meinst mit "mein PC wartet auf einen Handshake" ?


    RTS geht nur auf LOW wenn Device nicht empfangsbereit (Ausgeschaltet, Empfangsbufferüberlauf,...)


    Warum hast Du nocht nicht nachgemessen wie die Pegel der RTS-Signale sind ?


    Alle seriellen Parameter (Prozedur RTS/CTS, ....) richtig eingestellt ?

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • bei dem pc programm (docklite) was ich habe zeigt es mir an ob ein Handshake erfolgt ist oder nicht und es erfolgt eben keiner.
    ich weis nicht wie ich den pegel messen soll :lol:
    und es it de selbe baudrate, start und stopbits und parity und protokoll glech eingestellt.


    was mich am meisten wundert ist ja das die übertragung von pc zu pc funktioniert. über dieses rts/cts protokoll.darum schiebe ich ja den fehler der krc zu :D

  • du kannst bei Deinem Docklite auf "Manual RTS/DTR Control" schalten.
    Dann werden Dir die RTS/CTS Signale angezeigt und du brauchst nicht messen.
    Das CTS muss blau sein (RTS von KRC32) !!

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein