Zeichenketten

  • Hallo,


    Nach einer längeren Pause… darf ich mich wieder mit Kukas beschäftigen :). Wir haben gerade ein "Schulprojekt" in dem der Roboter Silhouetten und Buchstaben malen soll.


    Wir wollen die Informationen über die serielle Schnittstelle senden. Das sieht dann ungefähr so aus:


    "* J 50.0 150.0 * L 50.0 50.0 * L 100.0 50.0 * L 100.0 150.0"
    "* J 50.0 100.0 * L 100.0 100.0 * J 125.0 150.0 * L 125.0 50.0"
    "* L 150.0 50.0 * C 175.0 75.0 150.0 100.0"


    Nun zu den Fragen, die ich dabei habe:


    1) DECL char Buf[8]="abc"
    Ich habe festgestellt, daß ich Buf[4] nicht lesen kann (normal, noch nicht initialisiert). Nur, wie kann ich dann eine Funktion strcpy schreiben (gibt es noch nicht in Version 4.1)? Mir fehlt die Information über die Länge der Zeichenkette! Oder sollte ich jede Zeichenkette mit einem speziellen Charakter beenden (wie die 0 in C oder C++). Wie macht Ihr das?


    2) Gibt es so etwas wie \n oder \xxx in KRL?


    3) Dann gibt es da die berüchtigte Zahl 470. Trifft diese Begrenzung eigentlich auf alle Funktionen die mit Zeichenketten arbeiten zu? Ich habe die Begrenzung bei SREAD festgestellt.


    4) In der Datenliste wollte ich eine sehr lange Zeichenkette abspeichern (470 Zeichen). Habe etwas geschrieben in der Form:


    Cmd[2,]="xxx ...ziemlich lang... xxx"


    Das klappt bei der Version 5.x, nicht jedoch bei 4.x. Durch Verkürzen der Zeichenkette habe ich das Problem "gelöst". Meine Frage: kennt jeder die genaue Begrenzung für Zeichen pro Zeile in einer Datenliste?


    Vielen Dank im voraus,
    Tilman/Frankreich

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Stethi,


    Danke für Deine Antwort. Die serielle Schnittstelle hatten wir bereits konfiguriert. Unser Problem ist eher die Programmierung mit Zeichenketten. In der Version 5.x existieren da ja einige Funktionen. Aber wir haben im Augenblick noch 4.x auf dem Roboter. Da wäre z.B. eine Funktion wie strlen sehr nützlich... Deshalb alle meine Fragen.


    Viele Grüße,
    Tilman/Frankreich

  • Hallo,
    Dann noch gleich eine Frage hinterher, diesmal zu der seriellen Schnittstelle. Mit MAX_RX_BUFFER kann man die Anzahl der Buffer festlegen. Wie muß der Sender (bei uns der Computer) die Daten senden, damit der Roboter einen neuen Buffer nimmt? Ist das Abwarten einer Zeitspanne größer als CHAR_TIMEOUT die einzige Möglichkeit, oder gibt es auch ein Steuerungszeichen wie EOF?
    Mit freundlichen Grüßen,
    Tilman/Jochems

  • Vielen Dank, Stethi. Das hilft mir weiter!


    Bleibt das Problem mit der Länge der Zeichenketten unter 4.x. Ich habe das inzwischen so gelöst, daß der Computer immer gleich lange Zeichenkletten schickt (mit Leerzeichen aufgefüllt). Funktioniert bestens, aber falls es eine Möglichkeit gäbe, strlen zu implementieren, würde mir das noch besser gefallen!


    Mit freundlichen Grüßen, Tilman

  • StrLen wäre mit einer Dummy-Sread/Swrite-Anweisung ersetzbar:


    int x
    decl state_t st
    char sDmy[470]


    x=0
    swrite(sDmy[],st,x,"%s",sEmpfang[])


    in x bzw. st.length steht die anzahl der gelesenen Zeichen = StrLen(sEmpfang[])

  • Vielen Dank, Drudge, für Deine Antwort.


    Wir haben inzwischen unser "Projekt" abgeschlossen, anbei ein kleines Video. Die Aufgabenstellung repräsentiert zwar nicht wirklich eine industrielle Notwendigkeit... hat aber viel Spaß gemacht.


    http://www.youtube.com/watch?v=mMDK_8C_dTc


    Ich danke Euch allen, ich habe unheimlich oft in diesem Forum als Vorbereitung gelesen und wieder viel gelernt.


    Schöne Grüße,
    Tilman/Frankreich

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