LabVIEWForum.de
Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW RealTime (/Forum-LabVIEW-RealTime)
+---- Thema: Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI (/Thread-Richtige-umgang-mit-Ultraschalsensor-und-mehreren-While-Schleifen-in-eine-VI)



Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI - berlinfatih - 18.09.2016 16:38

Wie schon auf dem Titel, wollte ich fragen wie ich mit mehreren while Schleifen am besten umgehen kann.

Weil ich glaube, mehrere while Schleifen verursachen mein aktuelles Problem. Diese wäre:
Bei meine Projekt verwende ich eine Ultraschalsensor HC-SR04. Dazu habe ich eine VI (siehe Anhang Ultrasound in cm), womit der Funktion vorhanden ist (+/- 1,5cm).

Nun wenn ich VI Inhalt (Ultrasound in cm) in meine Haupt VI (Main Labviewforum 16.09.18)reinpacke (wo die anderen Programmausschnitte sich befinden), dann sind die Messwerte des US sehr ungenau (+/- 10-12cm).

Diese liegt meiner Meinung nach daran, dass die Zeit, die benötigt wird bis die ausgestrahlte Signal des Ultraschalsensor wieder empfangen wird, Unkontrolliert ist, weil die anderen im Main Programm befindenden while Schleifen durch ihre Signal-Schritte es verlangsamen oder zu falschen Zeitpunkt empfangen wird.

Ich habe auch versucht, einige While Schleifen zusammen zufügen, ohne Erfolg. Gibt es vielleicht eine Funktion im Labview wo man das Priorität der Echtzeit auf den Ultraschalsensor vergeben könnte.

Ich hoffe ich habe mich verständlich ausgedrückt und danke im Voraus auf eure Hilfe.


RE: Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI - GerdW - 18.09.2016 17:10

Hallo fatih,

was nur auf einem FPGA gut geht: Schleifen, die ungebremst vor sich hin iterieren! Alle anderen Targets brauchen Wartezeiten in Schleifen, da sonst die CPU gekocht wird!

Laufen deine VIs auf einem FPGA-Target?


RE: Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI - berlinfatih - 18.09.2016 17:29

Hallo Gerd,

mir ist nicht ganz bekannt was du mit FPGA Targets meinst? Da unter FPGA mit eine CPU zur vergleichen ist, gehe ich davon aus du meinst mit FPGA Targets die Project Explorer wo unter den geöffneten Projekt die einzelnen VI´s laufen.
Bei mir sind zurzeit nur die Main Programm und die Ultrasound VI. (siehe Anhang)

Soll ich etwa bei den while Schleifen die nicht hohe Priorität für Reaktionszeit haben, Wartezeiten einbauen??


RE: Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI - GerdW - 19.09.2016 07:13

Hallo fatih,

Zitat:mir ist nicht ganz bekannt was du mit FPGA Targets meinst?
Ein deutliches Indiz dafür, dass du eben nicht einen FPGA programmierst!

Zitat:Soll ich etwa bei den while Schleifen die nicht hohe Priorität für Reaktionszeit haben, Wartezeiten einbauen??
ALLE Schleifen sollten Wartezeiten haben - entweder über eine explizite Wait-Funktion oder über einen blockierenden Funktionsaufruf (wie DAQmxRead, VISARead, QueueRead, etc.)!


RE: Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI - jg - 19.09.2016 17:28

(18.09.2016 16:38 )berlinfatih schrieb:  Ich habe auch versucht, einige While Schleifen zusammen zufügen, ohne Erfolg. Gibt es vielleicht eine Funktion im Labview wo man das Priorität der Echtzeit auf den Ultraschalsensor vergeben könnte.
Mit Timed Loops kannst du CPU Prios festlegen.

---

Sonstige Kritik: Wieso muss man dauernd einen DI-Task initialiseren, 1x auslesen, dann Task schließen, und das in einer While Loop? 1x Init und Close außerhalb der Loop ist wesentlich resourcenschonender. Da du diese Inputs sowieso nur alle 100 ms in der Parallel-Loop verarbeitest, könntest du sie auch direkt dort auslesen.

Was soll die State-Machine-Loop bezwecken? Ab dem zweiten Durchlauf ruft sie nur den Case "Initialize Left US" auf.

Wieso muss man Berechnung geteilt durch 2 mal 343 mal 100 geteilt durch 1000000 in jedem Durchlauf machen, fass das zu 1 Operation zusammen.

---

Du könntest auch die Auswertung des Ultraschall Sensor im FPGA programmieren, dort kannst du den DIO wesentlich schneller auslesen und die Auswertung braucht auch keine CPU-Zeit.
http://www.ni.com/product-documentation/14620/de/

Gruß, Jens


RE: Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI - berlinfatih - 20.09.2016 15:19

Hallo Jens,

(19.09.2016 17:28 )jg schrieb:  Was soll die State-Machine-Loop bezwecken? Ab dem zweiten Durchlauf ruft sie nur den Case "Initialize Left US" auf.
Ich hatte das Programm auf das wesentliche abgespeckt. Deswegen ist es so ungünstig dargestellt. Normalerweise sind 3 Ultraschalsensoren im Programm drinne. Diese geben dann alle eine dbl Wert an die "State-Machine-Loop" weiter, wo diese bei jede Lesevorgang mit eine Wert (Abstandswert) verglichen werden. Mir ist aber auch aufgefallen, das ich bei "Initialize Left US" hängen bleibe. Hätte nicht gedacht, das du mein ganzen Programm dir anschaust Big GrinBig Grin

Habe es aber geändert, damit ich an "Initialize Right US" weiter komme Habe auch zusätzlich auf Empfehlung von GerdW Wait-Time eingebaut.

(19.09.2016 17:28 )jg schrieb:  Wieso muss man Berechnung geteilt durch 2 mal 343 mal 100 geteilt durch 1000000 in jedem Durchlauf machen, fass das zu 1 Operation zusammen.
Werde Zusammenfassen. Danke
---
(19.09.2016 17:28 )jg schrieb:  Du könntest auch die Auswertung des Ultraschall Sensor im FPGA programmieren, dort kannst du den DIO wesentlich schneller auslesen und die Auswertung braucht auch keine CPU-Zeit.
http://www.ni.com/product-documentation/14620/de/
Nachdem ich in den anderen While-Loop Funktionen Wait-Time eingebaut habe, werden die Zahlen der Ultraschalsensoren flüssiger angezeigt. Ich habe bei der While-Loop Funktion der Ultraschalsensoren elapsed time Funktion eingebaut, damit nur eine Ultraschalsensor zu einer Zeitpunkt läuft und nicht mehrere gleichzeitig. Weil diese war meine Meinung nach auch das Problem, wozu ich ungenau Werte bekomme wenn ich mehrere Ultraschalsensoren gleichzeitig betreibe.
Theoretisch funktioniert es. Praktisch müsste ich es zu Hause ausprobieren. Werde mich dann nochmal melden. Danke erstmal für die Unterstützung.

Gruß Fatih






Hallo Gerd,

(19.09.2016 07:13 )GerdW schrieb:  ALLE Schleifen sollten Wartezeiten haben - entweder über eine explizite Wait-Funktion oder über einen blockierenden Funktionsaufruf (wie DAQmxRead, VISARead, QueueRead, etc.)!

Hatte vergessen zu schreiben. Die Zahlen sind, wenn man mehrere Ultraschalsensoren gleichzeitig betreibt, ungenau und verhaken öfter.
Nun nachdem ich in den anderen While-Loop Funktionen Wait-Time eingebaut habe, werden die Zahlen der Ultraschalsensoren flüssiger und etwas genauer angezeigt.

Um die Genauigkeit zu bessern betreibe ich die 3 While-Loop Funktion der Ultraschalsensoren über eine StateMaschine und jede Ultraschalsensore ist über "elapsed time" Funktion nur begrenzt an. Theoretisch funktioniert es. Praktisch müsste ich es zu Hause ausprobieren. Werde mich dann nochmal melden. Danke erstmal für die Unterstützung.

Gruß
Fatih


RE: Richtige umgang mit Ultraschalsensor und mehreren While-Schleifen in eine VI - berlinfatih - 25.09.2016 17:48

Hallo Jens und Gerd,

mit der Benutzung von Elapsed Time laufen die Ultraschalsensoren stabiler als vorher. Es ist aber ausbaufähig. Leider muss ich mich mit der anderen Komponenten beschäftigen, so das ich diese Thema vorerst nach hinten verschiebe.

Ich danke euch erstmal für eure Unterstützung.