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!
Hallo,
Ich habe ein etwas merkwürdiges Problem:
Ich lese NMEA-Daten aus einer Seriellen Schnittstelle aus. Diese werden nach der Vorgabe mit CR+LF abgeschlossen.
Wenn ich nun die Daten per Schieberegister nacheinander verknüpfe, wird alles korrekt angezeigt. (Bild 1, live LOG in Bild 3)
Die Daten werden gleichzeitig in eine Datei mitgeloggt, und da fängt der Ärger dann an: Wie in Bild 2 zu sehen ist, fehlen da Teile. Vom Sender wird immer abwechselnd VTG und GGA gesendet. Komischerweise tritt der Fehler nur bei der Meldung für VTG auf.
In Bild 3 ist dann der Funktionsteil zu sehen. Ich habe TerminalChar gesetzt, und der Puffer ist auch mehr als großzügig ausgelegt. Eine NMEA-Meldung ist pro Satz auf 77 Bytes begrenzt, soweit ich weiß.
Die Frage ist also: Warum wird im Register alles korrekt gespeichert, aber nicht in der Datei?
Außerdem werden die Meldungen auch noch weiterverarbeitet, auch da kommen für VTG unvollständige Datensätze an, allerdings fehlt da nicht, wie in der LOG Datei der Anfang von VTG, sondern die Kette bricht vor dem Abschlusszeichen ab.
Hat jemand eine Idee dazu?
' schrieb:Die Frage ist also: Warum wird im Register alles korrekt gespeichert, aber nicht in der Datei?
Außerdem werden die Meldungen auch noch weiterverarbeitet, auch da kommen für VTG unvollständige Datensätze an, allerdings fehlt da nicht, wie in der LOG Datei der Anfang von VTG, sondern die Kette bricht vor dem Abschlusszeichen ab.
Wenn im Schieberegister (also in der Anzeige am FP) alles richtig drinnen steht, tippe ich auf ein Timingproblem.
Dem Schieberegister, respektive der Operation "Array erstellen" ist es egal, in welchem zeitlichen Abstand einzelne Datenpakete kommen. Auch ist es hier egal, ob ein Datenpaket eigentlich unvollständig ist. Das, was zur Vollständigkeit fehlt, wird halt als nächstes Datenpaket gelesen.
Möglicherweise bringt das VISA-Read-Element einen Fehler. Daher wird die Schreiboperation, die mit diesem Fehler sequenziert wird, nicht durchgeführt.
Ein "halbes" Datenpaket wird auch von der nachfolgenden Berechnung "falsch" interpretiert.
Du müsstest also mal verifizieren, ob der lange (!) String nicht in zwei Teilen eingelesen wird.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Wunderbar. Ich hab wohl zu voreilig den Fehlercluster außen vor gelassen. Das hat man davon.
Tatsächlich stellte sich heraus, dass ich mit 100ms Timeout bei der VISA Konfiguration die Übertragungsdauer des langen Strings unterschritten hatte. Nun klappt alles, danke!
ich nutze das "Advanced Serial Write and Read" zum auslesen einer RS232 Schnittstelle.
Der Sender beendet einen Datensatz mit CRLF. Die Daten sehe ich dann im Textfeld. Soweit so gut.
Sendet der Sender :huh:zwei Datensätze, schickt er schnell "Datensatz1 CRLF" und "Datensatz2 CRLF" hintereinander (siehe Bild "Terminal", dann 40 Sekunden Pause bis zum nächsten senden).
Bei diesem schnellen hintereinander Übertragen scheint der Fehler zu liegen, weil auf dem Bildschirm nichts ankommt und Fehlermeldungen kommen.
Wie programmiere ich LabVIEW, dass ich beide Datensätze sehe?
Zitat:Wie programmiere ich LabVIEW, dass ich beide Datensätze sehe?
Naja, musst du halt mal das Programmieren anfangen.
Mach ein Schieberegister, das alle empfangenen Daten enthält. Neue Daten addierst du immer zu denen im Schieberegister. Den Wert im Schieberegister gibt du dann auf das Anzeigeelement.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
mein VI liest Werte über das VISA aus und trennt sie nach A und B "Search/Split String".
Am Anfang sendet das Messgerät aber einen Kopf mit Einstellungen, den ich auch haben will.
Ich habe ein Array erstellt, dass aus dem Schieberegister alles bekommt was nicht A und B ist. (Der Kopf hat knapp 30 Daten, die später im Frontpanel stehen sollen bleiben).
Das Problem ist, die 30 Daten (jetzt noch 5) werden aus dem Array wieder rausgeschoben, durch nachfolgende Daten.
Wie bekommt man das hin, dass quasi von "Device" bis "DATA" alles ausgegeben wird und nicht wieder verdrängt wird?
Mit einer For Schleife um das Array hats nicht funktioniert. Außerdem find ichs blöd 30 mal "Match Regular Expression " zu schreiben.
Danke und Grüße
LV 8.2
05.03.2010, 17:26 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2010 17:27 von GerdW.)
ich würd's so machen:
- alles, was bis DATA kommt, in einen Stringindicator schieben
- alles, was danach kommt, zeilenweise auftrennen (z.B. mit SpreadsheetStringToArray und LF als Trennzeichen). Dann kannst du ganz einfach das erste Zeichen der Zeile auswerten und die Daten dann zuordnen.
Momentan überschreibst du halt immer wieder dein Array. Vielleicht wäre dir schon damit geholfen, wenn du ein weiteres Shiftregister nimmst, um die aktuellen Werte an die vorhandenen anhängen zu können?