Datenübermittlung in Echtzeit - Fehler in der Datenübertragung
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!
08.01.2018, 16:59 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2018 17:09 von LabView-2018.)
Datenübermittlung in Echtzeit - Fehler in der Datenübertragung
Hallo und einen schönen Nachmittag zusammen,
folgender Stand - kompakt zusammengefasst -bzw. vereinfachter Zusammenhang:
Ein Pulsgenerator liefert ein 40Hz Signal. (Simulation eines gepulsten Lasers)
Eine Kamera wird auf dieses Signal getriggert und schafft es von Seiten der Software (aktueller Stand) aus, bei jedem 10ten Bild auszulösen.
Ich benötige die Leistungswerte der Pulse, bei welchem ein Bild aufgezeichnet wird, um später eine Leistungs-Normierung in den aufgenommen Bilder durchführen zu können.
Dies wird gelöst, indem neben dem Pulssignal das Fire-Signal aufgezeichnet wird, somit können die Pulse dem Bild zugeordnet werden. Vorausgesetzt es werden alle Daten erfasst.
Jetzt zum folgendem Problem, die Datenübertragung zeigt eine lückenhafte Informationsfluss auf. Siehe Bild im Anhang. Zuvor wurde das Kamerasignal mit Pulssignal auf einem Oszi geprüft, bei welchem keine Lücken auffallen - daher liegt das Problem im Ablauf der Software.
Folgendermaßen funktioniert das Programm:
1. Der User bestätigt dem Programm das bereit machen einer Datenaufzeichnung. (Start Aqu.) so lange dieser Button aktiv ist läuft die äußerste While-Schleife. Diese Schleife wird in 10ms abgefragt.
2. Hat der User alle Voreinstellungen Samples, Rate etc. vorgenommen wird der Button Start Image gedrückt. Dieser bleibt entsprechend der Anzahl gewünschter aufzunehmender Bilder - true.
Dieser Schritt wird in einer untergeordneten While-Schleife durchgeführt. Diese läuft auch so lange bis die äußere false wird.
3. Siehe Anhang Code-Teil. Diese ist wie im Punkt zwei auch eine untergeordnete While-Schleife der 1. hier wird die Datenerfassung durchgeführt. Solange bis Start-Image true ist, sollen Sampel-Packete
aneinander gehangen werden. Hier passiert ein Fehler in der Übertragung welche im zweiten angehangenem Bild zu sehen ist. Es fehlen Pulse, bzw. diese sind abgeschnitten.
Leider komme ich nicht darauf woran es liegen könnte. Sample, rate, Timer... Variationen wurden getestet, waren aber ergebens. Ich hoffe es ist klar zur Geltung gekommen, woran es scheitert. Über einen Rat würde ich mich sehr freuen,
Gruß LabView-2018
P.S. das Vi ist nur abgespeckt dargestellt um den Informationsgehalt klein zu halten und zu fokussieren. Die angezeigten Fehler sind nicht in der Hauptdatei vorhanden, sondern nur wegen des Löschens unwichtiger Details entstanden.
RE: Datenübermittlung in Echtzeit - Fehler in der Datenübertragung
Hallo LV2018,
Zitat:3. Siehe Anhang Code-Teil. Diese ist wie im Punkt zwei auch eine untergeordnete While-Schleife der 1. hier wird die Datenerfassung durchgeführt. Solange bis Start-Image true ist, sollen Sampel-Packete aneinander gehangen werden. Hier passiert ein Fehler in der Übertragung welche im zweiten angehangenem Bild zu sehen ist. Es fehlen Pulse, bzw. diese sind abgeschnitten.
Na ja…
Wie wäre es für den Anfang, einfach mal ein Autocleanup durchlaufen zu lassen? Dann würde man wenigstens sehen, wo die Drähte langgehen, die bei dir mehrfach "irgendwo" und "unkoordiniert" verlaufen. Wie soll LabVIEW da die Daten fließen lassen?
Außerdem sind da 2 Fehler im Bild markiert, wie soll das VI da überhaupt laufen?
Warum hängst du die Datenpakete nicht wirklich an, sondern baust 2D-Arrays, die du dann erst wieder in 1D-Arrays umformst? (Rechtsklick auf BuildArray und den Concat-Mode wählen!)
Ist sichergestellt, dass "Start image" immer TRUE bleibt, solange die Datenerfassung läuft?
Kommt es evtl. zu Fehlern bei der Datenerfassung? Immerhin machst du keine Fehlerbehandlung in der Schleife…
RE: Datenübermittlung in Echtzeit - Fehler in der Datenübertragung
Hallo LV2018,
Zitat:2. Hat der User alle Voreinstellungen Samples, Rate etc. vorgenommen wird der Button Start Image gedrückt. Dieser bleibt entsprechend der Anzahl gewünschter aufzunehmender Bilder - true.
Dieser Schritt wird in einer untergeordneten While-Schleife durchgeführt. Diese läuft auch so lange bis die äußere false wird.
Eine äußere While schleife kann erst enden, wenn die innere beendet ist. Da ich hier keine äußerer Schleife sehe, stimmt die Aussage nicht wirklich. Die innere Schleife wird durch Start Aqu gestoppt.
Zitat: Siehe Anhang Code-Teil. Diese ist wie im Punkt zwei auch eine untergeordnete While-Schleife der 1. hier wird die Datenerfassung durchgeführt. Solange bis Start-Image true ist, sollen Sampel-Packete
aneinander gehangen werden. Hier passiert ein Fehler in der Übertragung welche im zweiten angehangenem Bild zu sehen ist. Es fehlen Pulse, bzw. diese sind abgeschnitten.
Wenn die eigentliche Aufnahme im False - Teil liegt, solltest Du auch diesen darstellen.
RE: Datenübermittlung in Echtzeit - Fehler in der Datenübertragung
Und dann wäre es auch noch sehr gut, wenn du den Error-Ausgang des Sample-VIs auswerten würdest. Da steht möglicherweise "Daten verpasst" drin. Wegen und für die Überprüfung des Errorclusters ist es ratsam, den Errorcluster-Tunnel auf der While-Schleife durch ein Schieberegister zu ersetzen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
09.01.2018, 10:32 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2018 10:47 von LabView-2018.)
RE: Datenübermittlung in Echtzeit - Fehler in der Datenübertragung
Hallo GerdW,
(08.01.2018 20:18 )GerdW schrieb: [quote] Warum hängst du die Datenpakete nicht wirklich an, sondern baust 2D-Arrays, die du dann erst wieder in 1D-Arrays umformst? (Rechtsklick auf BuildArray und den Concat-Mode wählen!)
Ist sichergestellt, dass "Start image" immer TRUE bleibt, solange die Datenerfassung läuft?
vielen Dank für deine Denkanstöße. Als erstes habe ich sichergestellt und dies per Probe überprüft, das Start Image wirklich immer true ist. Ist der Fall.
Allerdings war der Tipp mit dem Array der richtige Ansatz. Anscheinend lag ein Fehler beim zusammensetzten der Arrays vor. Gelöst habe ich das Problem über die Funktion Feedback Node.
Jetzt werden die Werte ohne Fehler aufgezeichnet.
Betreff des Problems einer Fehlerbehandlung: im inneren Case, in welchem die Messwerte aufgezeichnet werden, habe ich momentan noch keine Fehlerbehandlung.
Vielen Dank,
Gruß LV2018
Hallo Freddy,
(09.01.2018 08:10 )Freddy schrieb: [quote]
Eine äußere While schleife kann erst enden, wenn die innere beendet ist. Da ich hier keine äußerer Schleife sehe, stimmt die Aussage nicht wirklich. Die innere Schleife wird durch Start Aqu gestoppt.
Das ist korrekt, auf dem Bild war diese nicht vorhanden, die äußerste while wird false, wenn der User einen Stop Button drückt. Das Programm ist so groß und mit weiteren unter VI-Verknüpft und hätte den Rahmen gesprengt. Verzeihung wegen dem gekürzten und unsortiertem VI-Screenshoot.
Gruß,
LV2018
(09.01.2018 08:41 )IchSelbst schrieb: Und dann wäre es auch noch sehr gut, wenn du den Error-Ausgang des Sample-VIs auswerten würdest. Da steht möglicherweise "Daten verpasst" drin. Wegen und für die Überprüfung des Errorclusters ist es ratsam, den Errorcluster-Tunnel auf der While-Schleife durch ein Schieberegister zu ersetzen.
Hallo IchSelbst,
Vielen Dank- für den Tipp.
Da ihr alle die Fehlerbehandlung angesprochen habt, möchte ich diese nun angehen.
Zum einem habe ich mir überlegt, man sollte in die innere Case-Anweisung - False einfügen, dass der Array Inhalt geleert wird, wenn Start Image - false wird (heißt wenn die Aufnahmen beendet sind, sollen die Array bereit sein für eine neue Aufnahme und nicht die alten Werte überschreiben, denn das könnte eine Fehlerquelle werden). Dafür habe ich allerdings noch keinen Ansatz. Ich bin mir nicht sicher, ob es ausreicht eine Konstante auf Null zu setzten?
Des weiteren wäre ein Aufruf- Daten verpasst eine sehr gute Idee, doch wann weiß ich das wirklich Daten verpasst werden?
Viele Grüße,
LV2018
09.01.2018, 17:40 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2018 17:46 von LabView-2018.)
Zitat: Warum hängst du die Datenpakete nicht wirklich an, sondern baust 2D-Arrays, die du dann erst wieder in 1D-Arrays umformst? (Rechtsklick auf BuildArray und den Concat-Mode wählen!)
Ist sichergestellt, dass "Start image" immer TRUE bleibt, solange die Datenerfassung läuft?
vielen Dank für deine Denkanstöße. Als erstes habe ich sichergestellt und dies per Probe überprüft, das Start Image wirklich immer true ist. Ist der Fall.
Allerdings war der Tipp mit dem Array der richtige Ansatz. Anscheinend lag ein Fehler beim zusammensetzten der Arrays vor. Gelöst habe ich das Problem über die Funktion Feedback Node.
Jetzt werden die Werte ohne Fehler aufgezeichnet.
und ..... Das zurücksetzten der Arrays auf Null wurde über eine Case-Anweisung und einem Register-Shift gelöst, indem gefragt wird bin ich bereits bei einem neuen Start der Messung durch die Feedback Node, falls nicht setzte alles auf Null - falls schon, dann laufe mit den bereits aufgenommen Werte weiter durch die Loop.