05.10.2022, 23:32
(Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2022 00:00 von wallice.)
Beitrag #1
|
wallice
LVF-Neueinsteiger
Beiträge: 1
Registriert seit: Oct 2019
Labview 2018
2018
DE
|
USB-6001: Eingangssignal (digital) als Event in State Machine auswerten
Hallo Freunde,
Ich möchte gerne ein Reed- Relais an entweder einen digitalen oder analogen Eingang der USB-6001 anschließen und wenn dieses schaltet, dann soll in der state machine dasselbe passieren, als wenn, wie jetzt noch - ein Button gedrückt wird.
Ich brauche also ein Event vom DAQAssistant.
Wenn ich in in der case- Struktur ein Event-Case hinzufügen möchte, so taucht dort aber nichts vom DAQ- Assistant auf.
Ich habe deshalb den DAQ-Assistant in eine eigene while Schleife gepackt und er liest auf einem Digital Kanal immer 1 mal mit 1 Sample.
Dann greife ich auf den Data Ausgang vom DAQ-Assistant zu, schicke den ersten Wert aus dem 1D-Array zu einer Boolean-Anzeige. Diese taucht dann auch in der Case Struktur als auswertbares Element auf.
Frage: Ist diese Vorgehensweise, dieser "Workaround" von mir einigermaßen "korrekt", oder sollte man das lieber nicht machen?
Ich hatte vorher bereits anhand eines Beispiel VI's aus einem anderen Forums Thread ein User created Event studiert. Dort war die Erzeugung, Registrierung, Anwendung, Deregistrierung zusammen mit einer Event Case Struktur programmiert.
Ich habe diese dann in die Projekt- Vorlage "simple - state -Machine" von Labview eingebaut.
Aber obwohl ich den Event dann auswählen konnte, es hat nicht funktioniert, deshalb bin ich dann auf diesen Workaround zurückgegangen.
An sich funktioniert das Ganze so bereits für mich. Problem ist jedoch, dass der DAQmx regelmäßig nur mit Pollen beschäftigt ist und man keine Eingaben machen kann.
Es ist ja möglich, sogenannte Tasks zu erstellen, in der Hilfe steht, dass man diese dann auch im "MAX" speichern kann. Im Measurement Automation Explorer wird der Task dann "so angezeigt", dass ich davon ausgehe, dass der Task auf der Hardware selbst, also dem Device USB-6001 gespeichert wird, nicht auf dem Computer / im Projektverzeichnis.
Ist meine Vermutung richtig?
Ist so ein Task dann eine Lösung dafür, um ein ständiges Pollen auf die Hardware abzuwälzen, sodass man im Programm dann bequem ein Event Empfangen kann?
EDIT:
Ich habe gerade nochmal die Hilfe studiert, und kann mir vorstellen, dass ein Trigger wahrscheinlich besser geeignet wäre. Dieser taucht jedoch auch nicht als Event auf, bzw. habe ich dort ein Task-out und task in.
Wäre dann die richtige Vorgehensweise einen Task zu setzen, dann den Trigger daran, an dessen Ausgang dann wiederum ein Task und dann daran ein DAQmx Event registrieren, der Event Struktur zuzuführen, verwenden, deregistrieren, destroy.. .?
Vielen Dank schonmal,
wallice
|
|
|
06.10.2022, 06:29
(Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2022 06:33 von GerdW.)
Beitrag #2
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: USB-6001: Eingangssignal (digital) als Event in State Machine auswerten
Hallo wallice,
herzlich willkommen im Forum!
Zitat:Ich brauche also ein Event vom DAQAssistant.
Wenn ich in in der case- Struktur ein Event-Case hinzufügen möchte, so taucht dort aber nichts vom DAQ- Assistant auf.
Ich habe deshalb den DAQ-Assistant in eine eigene while Schleife gepackt und er liest auf einem Digital Kanal immer 1 mal mit 1 Sample.
Dann greife ich auf den Data Ausgang vom DAQ-Assistant zu, schicke den ersten Wert aus dem 1D-Array zu einer Boolean-Anzeige. Diese taucht dann auch in der Case Struktur als auswertbares Element auf.
Frage: Ist diese Vorgehensweise, dieser "Workaround" von mir einigermaßen "korrekt", oder sollte man das lieber nicht machen?
Unter "einigermaßen korrekt" stelle ich mir etwas anderes vor
In der Beschreibung stören mich zwei Dinge: die Verwendung des DAQAssistenten und die Nutzung eines Indicators, um damit ein Event triggern zu wollen…
Zitat:Problem ist jedoch, dass der DAQmx regelmäßig nur mit Pollen beschäftigt ist und man keine Eingaben machen kann.
Es ist ja möglich, sogenannte Tasks zu erstellen, in der Hilfe steht, dass man diese dann auch im "MAX" speichern kann. Im Measurement Automation Explorer wird der Task dann "so angezeigt", dass ich davon ausgehe, dass der Task auf der Hardware selbst, also dem Device USB-6001 gespeichert wird, nicht auf dem Computer / im Projektverzeichnis.
Ist meine Vermutung richtig?
Ist so ein Task dann eine Lösung dafür, um ein ständiges Pollen auf die Hardware abzuwälzen, sodass man im Programm dann bequem ein Event Empfangen kann?
Ist schon blöd, wenn dein DAQAssistent dein VI lahm legt…
"Sogenannte" DAQmx-Task sind genau der Weg, den du gehen solltest. Sind sehr einfach, siehe Links in meiner Signatur!
Diese Tasks werden NICHT in der Hardware gespeichert, sondern entweder im MAX (finde ich suboptimal), in deinem Projekt (habe ich noch nicht gemacht) oder direkt in deinem VI erzeugt (finde ich am sinnvollsten)!
Das mit den "Events" kann man durchaus schon mal auf "DAQmx abwälzen" - braucht aber auch passende DAQ-Hardware dafür. Ich bezweifle, das deine Billig-USB6001 dies direkt unterstützt…
Zitat:Wäre dann die richtige Vorgehensweise einen Task zu setzen, dann den Trigger daran, an dessen Ausgang dann wiederum ein Task und dann daran ein DAQmx Event registrieren, der Event Struktur zuzuführen, verwenden, deregistrieren, destroy.. .?
So, wie du das hier schreibst, ist es garantiert NICHT richtig…
Ein DAQmx-Trigger kann genutzt werden, um weitere DAQmx-Fähigkeiten anzustoßen: siehe auch deren Namen wie "Start-", "Sampletrigger" etc.!
|
|
|
| |