Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
das entleeren des Empfangspufers ist eine Innovation. Hab ich noch nie verwendet und auch nicht gekannt.
Jetzt habe ich noch eine Variante programmiert, die auf ein $-Zeichen wartet und dann erst los legt. Falls Du den String vom Roboter ein $ Zeichen voranschalten kannst, müßte es funktionieren.
Vielleicht ist die Zahl der einzulesenden Bytes von 40 auf 44 zu erhöhen?
jetzt habe ich den String vom Roboter nachgezählt.
Ist eigentlich sicher gestellt, dass der String immer die Länge von 40
Zeichen hat? Sonst gibts beim Einlesen mit dieser Technik Probeme.
Hallo
also die Länge ändert sich ständig kommt auf die Sensor Werte (0-255) an.
aber soweit funktioniert es. Habe das $ Zeichen noch mit in den String eingefügt. Er hat noch etwas geruckelt habe dann mein Rob-Prog. noch geändert hate bei jedem Schleifenende die beiden Motoren auf Speed=0 gesetzt das habe ich gelöscht und die 50ms Verzögerung habe ich wieder mit eingefügt. Was komischt ist der Robby fährt weiter wenn ich das VI beende was Programmtechnisch eigentlich nicht geht weil er ja auf ein Zeichen wartet und wenn keins kommt dort stehen bleibt. Aber sonst 1A Spitzenklasse würde ich sagen. Nun muß dann nur noch die Lenkung mit Programmiert werden und dann sollte alles perfekt sein hoffe ich mal
Um was für Probleme handelt es sich wenn die Stringlänge nicht konstant ist?
mit Stop wird zuerst das LabVIEW-Programm beendet. Damit der Robi dann auch stehen bleibt, mußt Du Ihm noch den Befehl hinunterschicken.
(siehe Even Händler)
Das Empfangsprogramm ist jetzt so geschrieben, dass es auf ein $ Zeichen wartet und dann bist zum # Zeichen den String mit variabler Länge sammelt. Falls ein # Zeichen kommt, wird die While-Schleife abgebrochen und derString der Auswerte-Einheit übergeben.
Ob das alles funktioniert, da bin ich mir nicht schicher, da das Programm eine Komplexität hat, bei der man es testen sollte. (Was mir leider ohne Roboter nicht möglich ist).
soweit geht es konnte keine Fehler feststellen. allerdings wenn ich die Stoptaste betätige Stopt der Ro. oft nicht. Den Fehler habe ich gefunden die Whileschleife zum senden muß beendet werden bevor das Stopzeichen (5) an den Ro. geschickt wird siehe VI. Hab aber keine passende Lösung gefunden nur einen Ansatz .
IIch war mal auf deiner Homepege is ja nicht schlecht was ihr da in der vierten Klasse macht was man alles mit LabVIEW machen kann. Die bewgte Schalter (Autos bei der Ampelsteuerung) fand ich Klasse was es nicht alles gibt
Dein letztes Programm das liest ja jetzt immer nur einen kompletten String ein? Mein erstes funktioniert ja auch selbst wenn nur ein halber String emfangen wird wertet er ja nur den Teilstring aus durch "Muster vergleichen" wenn ich das richtig verstanden habe? Deine Lösung mit Start- und Endzeichen ist aber die bessere Lösung :-)
die While-Schleife wird jetzt über eine Lokale Variable (Gleichwertig einer gobalen Variable in C) beendet. Es wurde im Event-Händler mehr als 50 ms gewartet, bis dann das Ende -Zeichen abgeschickt wird (200ms).
Diese Synchronisation ist recht einfach und wird wahrscheinlich einwandfrei funktionieren. Es gibt aber sicherlich schönere Lösungen.
Das Problem beim Empfangen des Strings mit 40 Zeichen ist folgenden:
Falls z.B. der String mit ...L987 endet und genau bei L9 die 40 Zeichen zu Ende sind, wird ein falscher Wert für L berechnet. Das kommt zwar sehr selten vor, aber es wird doch auftreten.
So klappt wunderbar. Mit der lokalen Variable hatte ich auch dort schon mal versucht nur is mir erst jetzt aufgefallen das man da zwischen lesen und schreiben umstellen kann . Eine ganz kleine Frage hätte ich noch zum Schluß das ist dann auch die letzte Kannst du mir noch mal sagen für was die Box ist (siehe Bild großer Pfeil)??
zuerst noch eine kleine Verbesserung: In der WhileSchleife zu Senden kann man auch den Stop-Schalter direkt anschließen. Er wurde ja noch nie verwendet.
Die mit dem Pfeil in deinem Bild angezeigte Struktur ist ein Cluster. In diesem Datenformat wird ein Fehler abgespeichert.
**********************
Aus der Hilfe kopiert:
Status ist TRUE (rotes X), wenn vor der Ausführung der Funktion oder des VIs ein Fehler aufgetreten ist oder FALSE (grüner Haken), um anzuzeigen, dass eine Warnung vorliegt oder dass vor der Ausführung des VIs oder der Funktion keine Fehler aufgetreten sind. Die Voreinstellung lautet FALSE.
Code ist der Fehler- oder Warnungscode. Die Voreinstellung lautet 0. Wenn Status TRUE ist, dann ist Code ein Fehlercode ungleich Null. Ist der Status FALSE, dann ist der Code gleich Null oder ein Warnungscode.
Quelle ist in den meisten Fällen der Name des VIs oder der Funktion, die den Fehler verursacht hat. Die Voreinstellung ist ein leerer String.
************************
Die C-Programmierer würde zu diesem Cluster einfach "Struktur" sagen.
Man erhält dieses, indem man zum Eingang geht und mit der rechten Maustaste eine Konstante erzeugt.
Eine Besonderheit dieser Fehlerbeandlung ist folgende. Man fädelt die Fehlermeldung von z.B. Visa-öffnen zu Visa-schreiben zu Visa-schließen.
Falls die Schnittstelle nicht geöffnet werden kann, wird die nachfolgende Operation nicht mehr ausgeführt.
jo hab das mal noch gemacht mit dem Stop Schalter. Ja wunderbar dann hoffe ich das ich denn Rest auch noch hinbekomme mit Rechts- und Linksfahrt aber denke schon.
Gut dann möchte ich mich ganz herzlich bei dir bedanken für die nette Unterstützung und die aufgebrachte Zeit von Dir.
Ja dann noch viel Spaß noch am Rest des Sonntags und vielleicht hab ich ja wieder mal ne Frage