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!
ich arbeite neuerdings mit LabView und konnte bis jetzt, dank des Forums, alle meine Fragen lösen.
Jetzt stehe ich gerade vor einem Problem, welches ich nicht lösen bzw. verstehen kann.
Ich sende mit meinem Controller 2 float-Zahlen über RS232 an den PC. Diese lasse ich mir dann in einem Graphen darstellen. Mein Problem ist jetzt, dass sich nach einer festen Zeit die Byte Reihenfolge ändert und ich dann falsche Werte kriege. Wenn ich jetzt mein .VI kurz stoppe und neustarte (bis ich wieder die richtige Byte-Reihenfolge erwischt habe), läuft alles bis wieder die Byte-Reihenfolge spinnt. Das bedeutet mein Controller sendet immer noch das richtige. Das Verhalten sieht man in den beiden Bildern, die ich mit hinzugefügt habe. Die Zeit ist abhängig von der Byte Anzahl. Das ist das einzige, was ich festellen konnte.
Ich hoffe, ich konnte mein Problem gut genug beschreiben und bin für jede Hilfe dankbar !
@Jens: Das TermChar ist deaktiviert - und das ist hier das Problem…
Hallo MKVH,
dein µC sendet also fortlaufend Werte, jeweils 7 Byte (1Byte Kennung, 6 Byte Payload). Da es keine Termminierung mittels TermChar gibt, kann es bei Problemen mit der Schnittstelle zu "Aussetzern" kommen - es fehlt einfach die Möglichkeit, sich auf die Botschaft zu synchronisieren! (Wieso zeigt dein "unsigned byte array" 9 Elemente an, wenn du nur 7 Array-Elemente auswertest?)
Wie sieht denn deine Payload genau aus? Du dekodierst sie mittels TabstringToArray und dem Komma als Trennzeichen. Wieviele Zahlen packst du denn da in diese 6 Bytes hinein? (Wie kann man aus nur 6 Bytes inkl. Trennzeichen ein 2D-Array generieren?)
Wie wäre denn folgendes Format im String deines µC: 1 Byte Kennung (ASCII 0-9), 6 Byte Payload (ASCII wie bisher), 1 Byte TermChar (LF)?
Alternativ kann man seine Daten auch alle mit gelöschtem MSB senden und die Kennung durch ein gesetztes MSB markieren. Dann kann man auch wieder den Botschaftsempfang synchronisieren…
(25.03.2015 15:16 )GerdW schrieb: (Wieso zeigt dein "unsigned byte array" 9 Elemente an, wenn du nur 7 Array-Elemente auswertest?)
Das war nur zum testen, dachte mein Controller, würde einfach mehr Bytes senden ...
(25.03.2015 15:16 )GerdW schrieb: Wie sieht denn deine Payload genau aus?
Was ich sende: xxx.xx (3 Vorkommazahlen, Komma, 2 Nachkommazahlen)
(25.03.2015 15:16 )GerdW schrieb: Wie wäre denn folgendes Format im String deines µC: 1 Byte Kennung (ASCII 0-9), 6 Byte Payload (ASCII wie bisher), 1 Byte TermChar (LF)?
Alternativ kann man seine Daten auch alle mit gelöschtem MSB senden und die Kennung durch ein gesetztes MSB markieren. Dann kann man auch wieder den Botschaftsempfang synchronisieren…
Ich werde das einmal ausprobieren und melde mich dann wieder !
Zitat:Was ich sende: xxx.xx (3 Vorkommazahlen, Komma, 2 Nachkommazahlen)
Sendest du nun ein Komma oder einen Punkt?
Dein VI spricht für die Variante "Punkt"…
Wieso verwendest du dann nicht einfach ScanFromString, um deinen einzelnen Wert von String nach DBL umzuwandeln? Warum dieser Umweg über SpreadsheetStringToArray und ein 2D-Array?
Zitat:Was ich sende: xxx.xx (3 Vorkommazahlen, Komma, 2 Nachkommazahlen)
Sendest du nun ein Komma oder einen Punkt?
Dein VI spricht für die Variante "Punkt"…
Mein Fehler ! Meinte natürlich 'Punkt'.
(25.03.2015 16:03 )GerdW schrieb: Wieso verwendest du dann nicht einfach ScanFromString, um deinen einzelnen Wert von String nach DBL umzuwandeln? Warum dieser Umweg über SpreadsheetStringToArray und ein 2D-Array?
Weil ich den Block noch nicht kannte, habe ihn jetzt eingesetzt, noch habe ich einen Fehler drinne (das Format am Eingang ist falsch), sobald ich den behoben habe, lade ich es hoch.
Das mit dem 'Termination Char' hat den Fehler nicht behoben, aber nun muss ich nicht nach der richtigen ByteReihenfolge suchen, danke für diesen Tipp ! Irgendwie sagt mir mein Gefühl, dass in LabView ein Speicher überläuft oder ähnliches, falls das Sinn macht.
Gruß MKVH28
26.03.2015, 17:39 (Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2015 09:10 von Lucki.)
(25.03.2015 18:23 )MKVH28 schrieb: Irgendwie sagt mir mein Gefühl, dass in LabView ein Speicher überläuft oder ähnliches, falls das Sinn macht.
Dein Gefühl wird Dich da nicht täuschen. Es hängt aber davon ab, welchen Wert Du der Wait-Funktion zugewiesen hast. Anfänger wissen oft nicht, wann eine Wait-Funktion in einer Schleife sein sollte und wann nicht. Hier jedenfalls nicht! Die Lesefunktion wartet selbst mit Lesen, bis eine geforderte Bedingung eingetroffen ist uund synchronisiert damit den Lesvorgang.
Mit aktivierter Zeileenderkennung würde Dein aufgeblähtes Vi in quasi Nichts zusammenschrumpfen, es sähe dann etwa so aus:
Edit: Das funktioniert aber nur, wenn man zuerst das Programm aufruft, und dann das Gerät einschaltet. Für den umgekehrt Fall wäre noch eine Fehlerbehandlung erforderlich, denn dann ist zu erwarten, dass man bei Start mitten in einem Datensatz oder sogar mitten in einem gerade gesendetem Byte mit dem Empfang beginnt.