LabVIEWForum.de
Slot und Signal Konzept in labview - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Slot und Signal Konzept in labview (/Thread-Slot-und-Signal-Konzept-in-labview)



Slot und Signal Konzept in labview - galilio - 11.05.2016 09:55

Hallo Zusammen,


kann man in Labview das Konzept von Signal und Slot nachbilden?

Für die jenigen, die das nicht kennen hier eine kurze Beschreibung:
https://de.wikipedia.org/wiki/Signal-Slot-Konzept

Warum ich das brauche?
In eine Application mit C++ und Qt habe ich dieses Konzept gebraucht. Vorteil daran, dass es ständig abgefragt wird, ob die Beziehung zwischen Slot und Signal true "Stichwort connect(......)" ist.
Das heisst man muss nicht ständig abfragen, ob der Stand True oder nicht.

Hier geht eigentlich um eine USB Connection, die ich gerne mit Labview in eine Konzept von Signal und Slot nachbilden möchte.
Ist die USB verbindung erfolgreich, dann ist der Hauptbutton Enabled und der User kann mit seiner Application loslegen.
Ist es nicht der Fall, ist dann der Hauptbutton desabled.

Man kann dieses Konzept so ansehen als Pollingsverfahren:
Standig abfragen: Bist du True --> dann weiter machen
Bist du False --> abbrechen...


Wie kann so was in Labview nachbilden?
Gibt es was ähnlich Labview?


Danke


RE: Slot und Signal Konzept in labview - IchSelbst - 11.05.2016 20:14

(11.05.2016 09:55 )galilio schrieb:  kann man in Labview das Konzept von Signal und Slot nachbilden?
Nachbilden geht fast alles.

Zitat:Ist die USB verbindung erfolgreich, dann ist der Hauptbutton Enabled und der User kann mit seiner Application loslegen.
Ist es nicht der Fall, ist dann der Hauptbutton desabled.

Eigentlich willst du ja nichts weiter machen, als event-gesteuert einen Button enablen oder disablen. Dort, wo du feststellst, dass der USB nicht mehr connected ist, verschickst du einen Benutzer-Event, den du in dem VI, das den Button enthält, in einem Event-Case abfragst.


RE: Slot und Signal Konzept in labview - galilio - 12.05.2016 06:18

(11.05.2016 20:14 )IchSelbst schrieb:  Eigentlich willst du ja nichts weiter machen, als event-gesteuert einen Button enablen oder disablen. Dort, wo du feststellst, dass der USB nicht mehr connected ist, verschickst du einen Benutzer-Event, den du in dem VI, das den Button enthält, in einem Event-Case abfragst.


Jaein
Das ganze muss automatisch laufen können, sobald z.B die USB verbindung nicht connected ist muss der Button auf desabled gesetzt werden. Wird die USB Verbindung wieder erfolgreich, dann ist der Power Button wieder Enabled.
Dieses Verhalten muss beim jeden State gewährleistet werden.

Im Anhang sind zwei Screenshots, die veranschaulichen das Verhalten der User-Interface bei eine USB Verbindung.


RE: Slot und Signal Konzept in labview - IchSelbst - 12.05.2016 07:54

(12.05.2016 06:18 )galilio schrieb:  Das ganze muss automatisch laufen
Wolltest du es nicht nachgebildet haben? Automatisch heißt integriert in LabVIEW.

Und ob die LV-Entwickler das integriert haben, glaube ich ich. Die wollten ja eine Datenfluß-Steuerung machen, keine Event-Steuerung. Das mit den Events ist in LV leider noch nicht so sehr gut integriert.


RE: Slot und Signal Konzept in labview - galilio - 12.05.2016 08:12

(12.05.2016 07:54 )IchSelbst schrieb:  
(12.05.2016 06:18 )galilio schrieb:  Das ganze muss automatisch laufen
Wolltest du es nicht nachgebildet haben? Automatisch heißt integriert in LabVIEW.

Und ob die LV-Entwickler das integriert haben, glaube ich ich. Die wollten ja eine Datenfluß-Steuerung machen, keine Event-Steuerung. Das mit den Events ist in LV leider noch nicht so sehr gut integriert.

Mit automatisch meine ich: Ich muss nicht extra darum kümmern.
Sobald die USB Verbindung abgebrochen wird, muss einen Interrupt ausgelöst werden "He USB Verbindung ist nicht mehr True"

Nachbilden möchte ich gerne aber ich weiss es nicht wie soll ich das machen:
Soll ich einen Haupt While Loop einbauen und ich diesem While Loop einen Event Structure die eine VI"die dafür zuständig die USB Verbindung zu überwachen" ständig aufruft?


RE: Slot und Signal Konzept in labview - GerdW - 12.05.2016 08:49

Hallo galilio,

was du haben willst, hört sich wie ein Callback an, der von einem Treiber (oder einer Windows-Funktion) ausgelöst werden soll:
Der USB-Treiber überwacht die USB-Connection und löst einen Callback-Aufruf aus, wenn sich der Status der Connection ändert.

1. Ganz allgemein unterstützt LabVIEW solche Callback-Mechanismen, z.B. bei DotNet-Geschichten…
2. Hast du einen USB-Treiber, der solche Callbacks überhaupt anbietet?

Einfache Lösung: Selbst per Polling den USB-Status abfragen und deinen Button entsprechend setzen…

Zitat:Ich muss nicht extra darum kümmern.
Wenn in deinem Programm irgendetwas passieren soll, dann musst du dich als Programmierer IMMER "extra darum kümmern"!


RE: Slot und Signal Konzept in labview - jg - 12.05.2016 09:13

(12.05.2016 08:49 )GerdW schrieb:  
Zitat:Ich muss nicht extra darum kümmern.
Wenn in deinem Programm irgendetwas passieren soll, dann musst du dich als Programmierer IMMER "extra darum kümmern"!
Und das selber drum kümmern kann doch gerne eine parallele Schleife (gerne auch verpackt in ein SubVI) sein, die den USB-Status überprüft und per Refnum den Button im Main (de-)aktiviert.

Gruß, Jens


RE: Slot und Signal Konzept in labview - galilio - 13.05.2016 07:41

(12.05.2016 08:49 )GerdW schrieb:  Hallo galilio,

was du haben willst, hört sich wie ein Callback an, der von einem Treiber (oder einer Windows-Funktion) ausgelöst werden soll:
Der USB-Treiber überwacht die USB-Connection und löst einen Callback-Aufruf aus, wenn sich der Status der Connection ändert.

1. Ganz allgemein unterstützt LabVIEW solche Callback-Mechanismen, z.B. bei DotNet-Geschichten…
2. Hast du einen USB-Treiber, der solche Callbacks überhaupt anbietet?

Einfache Lösung: Selbst per Polling den USB-Status abfragen und deinen Button entsprechend setzen…

Zitat:Ich muss nicht extra darum kümmern.
Wenn in deinem Programm irgendetwas passieren soll, dann musst du dich als Programmierer IMMER "extra darum kümmern"!

@ 2: Das weiss es nicht, ob die USB-Treiber das unterstützt.
Was ich weiss, dass die USB einen HID Treiber braucht und die eingentlich automatische runtergeladen wird sobald das Board mit PC Verbunden ist.


Im Netz bin ich auf folgende gestossen:"Scan Registry for USB Device"
https://decibel.ni.com/content/docs/DOC-6743

Ich habe es zu meiner Application angepasst.Es funktioniert aber es ist nicht unbedingt was ich brauche.

Meine Frage: Wie kann ich per Polling der USB Status abfragen?
Hase du vielleicht einen Beispiel?

Danke


RE: Slot und Signal Konzept in labview - IchSelbst - 13.05.2016 08:14

(13.05.2016 07:41 )galilio schrieb:  Es funktioniert aber es ist nicht unbedingt was ich brauche.
Du hast doch geschrieben, dass du C++ kannst. Dann schreib eine DLL in C/C++/C#. Die kann nämlich Messages von Windows verarbeiten. Windows verschickt eine "Broadcast-Message", wenn ein USB-Port getrennt wurde (zumindest war das mal früher so). In der DLL kannst du auf diese Message reagieren und einen Callback nach LV machen.

Du könntest natürlich auch mal googeln, ob es nicht irgendwo für LV direkt was gibt, das beliebige Windows-Messages empfangen kann.