INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Timing von DAQ mit Dynamischer Event-Struktur



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!

24.07.2021, 09:25
Beitrag #1

lempy Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Jul 2021

2021
2019
DE



Timing von DAQ mit Dynamischer Event-Struktur
Hallo zusammen,

an meinem Versuchsstand will ich Messdaten aufnehmen. Dazu werde ich ein DAQ benutzen. In dieser Frage soll es darum gehen, wie ich die Aufnahme der Messdaten zeitlich steuern kann. Um das zu erreichen, habe ich mich mit der Elapsed-Time-VI und dem Umgang mit dynamischen Event-Strukturen auseinander gesetzt. Folgendes soll die VI am Ende können:

User stellt eine Zeit ein, wie lange er Messdaten aufnehmen will --> User drückt auf Schalter, um Aufnahme von Messdaten zu starten --> Messdaten werden für die von ihm definierte Zeit aufgenommen --> Wenn die Zeit abgelaufen ist, wird die Aufnahme von Messdaten gestoppt und der Timer zurückgesetzt.

In dieser Frage soll es sich zunächst nur um den Umgang mit der Zeitsteuerung drehen. Im Anhang findet ihr ein Bild des BD sowie des VI als Datei. Folgende Fehler bestehen mit dem aktuellen Programm:

- Wenn die 10s abgelaufen sind, wird ein Fehler für das "Generate User Event" -Element angezeigt. Das macht für mich auch Sinn, der immer noch gedrückte Button [True] fordert ein Starten der Event-Struktur. Das steht jedoch im Widerspruch mit der Tatsache, dass die abgelaufene Zeit ein Stoppen der unteren While-Schleife fordert.

Die Lösung wäre hier, dass man im Zusammenhang mit dem ablaufen der Zeit den Timer zurücksetzt. Eine erste Idee, wie ich die widersprüchlichen Signale umgehen kann, wäre den Timer mit einer Case-Struktur und nicht mit dem Stopp der unteren Schleife zu verbinden. Was haltet ihr von dieser Idee? Dann wäre aber noch nicht das Problem mit dem zurücksetzen des Timers gelöst.

- Folgendes Scenario: Ich drücke den Button [True] --> Zeit startet, läuft für 5s --> Ich drücke Button wieder [False] --> Indikator zeigt stoppen der Zeit an --> Drücke Button wieder [True] --> Indikator springt zur Zeit seit dem ersten [True].

Auf jeden Fall hängen das erste und das zweite Problem zusammen. Offensichtlich bewirkt ein ausschalten Knopfes nicht, dass die Event-Struktur gestoppt wird. Warum ist das so?

Ich freue mich auf eure Antworten und vielen Dank für die Hilfe im Voraus!


Angehängte Datei(en) Thumbnail(s)
   

19.0 .vi  Handling_DataAqw_dynamicevent.vi (Größe: 4,78 KB / Downloads: 66)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.07.2021, 11:40
Beitrag #2

Martin.Henz Offline
LVF-Team
LVF-Team

Beiträge: 357
Registriert seit: Jan 2005

2.5.1 bis 20
1992
kA

74363
Deutschland
RE: Timing von DAQ mit Dynamischer Event-Struktur
Hallo lempy,

das wäre jetzt wieder was für den GerdW Dodgy

Du verwendest ja immer noch dieses Express-VI. Hast du denn verstanden, wie das funktioniert?

Ich habe eher Fragen über Fragen ...
Bin ich der einzige, der bei deinem VI nur ein leeres Diagramm sieht?
Wieso so kompliziert mit zwei Schleifen?
Wieso machst du nicht einfach bei dem Thread weiter?
Wieso die Event Struktur beim Consumer und nicht bei dem Teil mit dem User-Interface? Wenn du schon zwei Schleifen verwendest, dann wäre es doch vielleicht sinnvoll mit dem drücken des Trigger-Schalters die Datenerfassung in einer zweiten Schleife zu starten.

Zitat:- Wenn die 10s abgelaufen sind, wird ein Fehler für das "Generate User Event" -Element angezeigt. Das macht für mich auch Sinn, der immer noch gedrückte Button [True] fordert ein Starten der Event-Struktur. Das steht jedoch im Widerspruch mit der Tatsache, dass die abgelaufene Zeit ein Stoppen der unteren While-Schleife fordert.
Schön, dass du erkannt hast, dass das keine gute Idee ist.

Zitat:Die Lösung wäre hier, dass man im Zusammenhang mit dem ablaufen der Zeit den Timer zurücksetzt.
Aber auch das ist keine gute Idee. Der Timer Reset muss dann erfolgen, wenn die Zeit starten soll.

Zitat:- Folgendes Scenario: Ich drücke den Button [True] --> Zeit startet, läuft für 5s --> Ich drücke Button wieder [False] --> Indikator zeigt stoppen der Zeit an --> Drücke Button wieder [True] --> Indikator springt zur Zeit seit dem ersten [True].
Das ist nicht klar genug beschrieben. Kannst du das bitte so präzisieren, dass es eindeutig und verständlich ist und klar wird, was das bezwecken soll?

Zitat:Offensichtlich bewirkt ein ausschalten Knopfes nicht, dass die Event-Struktur gestoppt wird. Warum ist das so?
Weil du das nicht so programmiert hast? Oder anders formuliert:
Welcher Knopf und was hat ein Knopf damit zu tun? (Zitat aus Wikipedia: "Ein Knopf ist ein kleiner, fester, meist runder Gegenstand an Kleidungsstücken.")

Martin Henz
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.07.2021, 14:09
Beitrag #3

lempy Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Jul 2021

2021
2019
DE



RE: Timing von DAQ mit Dynamischer Event-Struktur
Hallo Martin.Henz,

zunächst vielen Dank für deine Antwort! Ich werde mich einer deiner Rückfragen nach dem anderen Widmen.

[Du verwendest ja immer noch dieses Express-VI. Hast du denn verstanden, wie das funktioniert?]
Anscheinend habe ich es wohl nicht richtig verstanden. Nach meinem bisherigen Wissen ist der return dieser Express-VI ein Boolean-Value. Ist die zuvor vom Nutzer spezifizierte Zeit abgelaufen, wird ein [True] zurück gegeben. An meiner Verwendung der Express-VI ist zu erkennen, dass ich anscheinend nicht verstanden habe, wie man diesen Wert wieder auf False setzt. Wenn du mir vielleicht einen Hinweis geben könntest, wie ich das hinbekomme, wäre ich dir sehr dankbar.

[Bin ich der einzige, der bei deinem VI nur ein leeres Diagramm sieht?]
Ich habe die Datei noch einmal angehängt und werde nach dem Post dieser Antwort selber nochmal prüfen, ob die Datei diesmal vollständig ist. Keine Ahnung, was da beim letzten mal passiert ist.

[Wieso so kompliziert mit zwei Schleifen?
Wieso die Event Struktur beim Consumer und nicht bei dem Teil mit dem User-Interface? Wenn du schon zwei Schleifen verwendest, dann wäre es doch vielleicht sinnvoll mit dem drücken des Trigger-Schalters die Datenerfassung in einer zweiten Schleife zu starten.]
Dieses Vorgehen habe ich in zwei Quellen unterschiedlicher Autoren gefunden und mich deshalb daran orientiert. Folgender Link führt dich zu einem YT-Video, ein weiters Beispiel befindet sich als event.vi im Anhang. Wenn du mir vielleicht ein Beispiel senden könntest, dass mir deine Herangehensweise verständlich macht, wäre das super!

[Aber auch das ist keine gute Idee. Der Timer Reset muss dann erfolgen, wenn die Zeit starten soll.]
Ich habe dazu gefunden, dass man mit einer Feedback Node das True-Signal nach Ablauf der Zeit direkt an den Reset schicken kann, um damit einen Reset der Zeit zu erreichen. Vielleicht weißt du ja aber noch eine bessere Lösung Smile

[Weil du das nicht so programmiert hast? Oder anders formuliert:
Welcher Knopf und was hat ein Knopf damit zu tun? (Zitat aus Wikipedia: "Ein Knopf ist ein kleiner, fester, meist runder Gegenstand an Kleidungsstücken.")]
[Das ist nicht klar genug beschrieben. Kannst du das bitte so präzisieren, dass es eindeutig und verständlich ist und klar wird, was das bezwecken soll?]
Ich meinte damit den Schalter in der oberen Schleife, bitte entschuldige Smile Ich wollte testen, was passiert, wenn ich folgendes mache: Ich setze die Zeit für die Express-VI auf 10s. Ich drücke auf den Schalter um die Zeit starten. Nach z.B. 5s drücke ich den Schalter nochmal, sodass er ein False ausdrückt. Meine Theorie war: Wenn ich jetzt wieder auf den Schalter drücke, wird die Express-VI zurückgesetzt und startet wieder von 0. Was tatsächlich passiert ist: die Express-VI hat im Hintergrund weitergezählt. Wenn ich also zwischen dem "Ausschalten" des Schalters und dem "Wiedereinschalten" z.B. 10s warte, zeigt der Indikator 15s an (Was natürlich durch den Logikfehler sofort zu einem Abbruch der VI führt).[/quote]


Angehängte Datei(en)
19.0 .vi  Handling_DataAqw_dynamicevent.vi (Größe: 29,37 KB / Downloads: 72)

8.5 .vi  events.vi (Größe: 23,76 KB / Downloads: 68)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2021, 07:37 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2021 07:39 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.254
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Timing von DAQ mit Dynamischer Event-Struktur
Hallo lempy,

Zitat:Ich meinte damit den Schalter in der oberen Schleife, bitte entschuldige Smile Ich wollte testen, was passiert, wenn ich folgendes mache: Ich setze die Zeit für die Express-VI auf 10s. Ich drücke auf den Schalter um die Zeit starten. Nach z.B. 5s drücke ich den Schalter nochmal, sodass er ein False ausdrückt. Meine Theorie war: Wenn ich jetzt wieder auf den Schalter drücke, wird die Express-VI zurückgesetzt und startet wieder von 0. Was tatsächlich passiert ist: die Express-VI hat im Hintergrund weitergezählt. Wenn ich also zwischen dem "Ausschalten" des Schalters und dem "Wiedereinschalten" z.B. 10s warte, zeigt der Indikator 15s an (Was natürlich durch den Logikfehler sofort zu einem Abbruch der VI führt).
Grundproblem: das ExpressVI ist in einem Event-Case versteckt…
Das ElapsedTime ist dafür gemacht, dass es regelmäßig/oft abgefragt wird - und nicht dafür, es nur irgendwann mal, wenn ein User einen Button betätigt. Ja, es "zählt im Hintergrund weiter"…
Wieso überhaupt eine Eventstruktur und dynamisch registrierte Events???
Warum nicht erst einmal die grundlegende Logik implementieren, gern auch mit Polling und einer kleinen Wartezeit in der Schleife?

Wieso gibt es einen Button mit dem boolschen Text "Push", der aber kein Label mehr besitzt? Würdest du in textbasierter Programmierung etwa
Code:
"":=""+""
schreiben oder doch vielleicht eher
Code:
a:=b+c
???
Auch in LabVIEW sollten FP-Elemente IMMER ein Label haben!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2021, 11:34
Beitrag #5

Martin.Henz Offline
LVF-Team
LVF-Team

Beiträge: 357
Registriert seit: Jan 2005

2.5.1 bis 20
1992
kA

74363
Deutschland
RE: Timing von DAQ mit Dynamischer Event-Struktur
Hallo lempy,

ich kann mich dem GerdW nur anschließen:
Zitat:Warum nicht erst einmal die grundlegende Logik implementieren, gern auch mit Polling und einer kleinen Wartezeit in der Schleife?

Fange doch erst einmal bei so etwas an:
   

Martin Henz
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.07.2021, 09:18
Beitrag #6

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.850
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Timing von DAQ mit Dynamischer Event-Struktur
Crosspost:
https://forums.ni.com/t5/LabVIEW/Timing-...-p/4167368

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Timing Fehler von USB 6001 bachatero18 2 1.743 25.08.2020 19:39
Letzter Beitrag: bachatero18
  Unterschiedliche timing-anforderungen vereinigen serge_franke 16 6.538 26.03.2018 12:49
Letzter Beitrag: serge_franke
  Timing Problem ... ich gehe im Kreis gottfried 2 2.274 21.02.2018 14:23
Letzter Beitrag: gottfried
  Digital out timing des DAQmx USB-6003 ALuehmann 5 4.184 02.12.2016 15:50
Letzter Beitrag: GerdW
  PWM Timing Problem bei Wechsel von DAQmx 9.6.1 auf 9.8 dali4u 2 3.364 17.07.2014 13:43
Letzter Beitrag: dali4u
  Sample Anzahl lesen / Timing samuel 13 10.770 20.02.2014 10:18
Letzter Beitrag: samuel

Gehe zu: