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 

Event Callback Knoten verursacht Probleme mit den Treibern eines Devices



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!

17.07.2009, 10:40 (Dieser Beitrag wurde zuletzt bearbeitet: 17.07.2009 10:41 von wonx.)
Beitrag #1

wonx Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Apr 2009

LV 11
-
kA

89077
Deutschland
Event Callback Knoten verursacht Probleme mit den Treibern eines Devices
Hallo liebe LV-Community,

ich hab mal wieder ein ganz spezielles Problem wo ich eure Hilfe benötige. Es geht um Folgendes:

Allgemein:
Ich habe ein Test-Device über USB verbunden und muss nachdem ein Testmodus im Device aktiviert wurde den ankommenden Datenstrom auswerten.
Da das Ganze eine Zeitmessung ist wurde in die Treiber des Devices ein Eventtrigger eingebaut, der immer dann auslöst wenn eine neue Nachricht über den USB Port hereinkommt.

LabVIEW:
Ein entpsrechendes .NET-Refnum, welches auf das Objekt zeigt das den Eventtrigger enthält, wird mit einem "Register Event Callback"-Block verbunden. Auf diese Art uns Weise wird nun jedes mal wenn der Eventtrigger ausgelöst wird ein Event Callback VI gestartet indem die Daten ausgewertet werden können.

Der Programmablauf:
Anlegen der entsprechenden Windows Objekte durch die Treiber --> Öffnen der Verbindung zum Device--> zwischenspeichern aller nötigen Refnums auf die angelegten Windowsobjekte --> verknüpfen des entsprechenden Refnum mit dem "Register Event Callback"-Knoten --> Starten des internen Testmodus --> Stoppen des internen Testmodus --> Unregistrieren des Event-Blocks per "Unregister for Events" Block --> Schließen der Referenz auf das Callback VI per "Close Reference" Block --> Schließen der Verbindung --> entsorgen der Windows Objekte für die Verbindung (Treiberfunktion, entspricht in etwa der Funktionalität des Close Reference Blocks. Kann mich aber auch irren die ganze Windows/Treiber Sache ist nicht gerade meine Stärke)

Problem:
Wenn ich das ganze Programm in einer Schleife laufen lasse tritt beim zweiten Durchlauf ein Fehler beim anlegen der Windows Objekte und Öffnen der Verbindung auf:
(System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
Inner Exception: System.InvalidOperationException: Could not create and open PhoneControl object. Reason: The invoked member is not supported in a dynamic assembly.
Inner Exception: System.NotSupportedException: The invoked member is not supported in a dynamic assembly.
) in test_phone_connection.vi

Wie sich herausgestellt hat liegt das Problem am Registrieren des Events per "Register Event Callback" Blocks da durch diesen irgend ein angelegtes Windows Objekt (so meine momentane Vermutung) beim Dispose wohl nicht gelöscht wird und beim nächsten Versuchsaufbau den obigen Fehler verurasacht. Denn wenn ich LabVIEW komplett schließe und wieder aufmache kann die Verbindung beim ersten Durchlauf ohne Probleme aufgebaut und auch wieder geschlossen werden (beim Dispose tritt offiziell kein Fehler auf)

Kennt sich Jemand von Euch mit sowas aus und kann mir sagen ob ich irgendwo was Falsch mache, bzw. etwas vergessen habe zu machen?

Gruß, wonx
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
22.07.2009, 07:36
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Event Callback Knoten verursacht Probleme mit den Treibern eines Devices
' schrieb:Wie sich herausgestellt hat liegt das Problem am Registrieren des Events per "Register Event Callback" Blocks da durch diesen irgend ein angelegtes Windows Objekt (so meine momentane Vermutung) beim Dispose wohl nicht gelöscht wird und beim nächsten Versuchsaufbau den obigen Fehler verurasacht. Denn wenn ich LabVIEW komplett schließe und wieder aufmache kann die Verbindung beim ersten Durchlauf ohne Probleme aufgebaut und auch wieder geschlossen werden (beim Dispose tritt offiziell kein Fehler auf)

Kennt sich Jemand von Euch mit sowas aus und kann mir sagen ob ich irgendwo was Falsch mache, bzw. etwas vergessen habe zu machen?

Für Event Callbacks gibt es auch eine Deregistrierungsfunktion. Rufst Du die auf bevor Du im nächsten Durchlauf wieder versuchst den Callback zu registrieren? Besser wäre die Registrierung nur einmal am Anfang der Software zu machen und danach am Ende vor dem Abschliessen die Deregistrierung.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.07.2009, 12:38
Beitrag #3

wonx Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Apr 2009

LV 11
-
kA

89077
Deutschland
Event Callback Knoten verursacht Probleme mit den Treibern eines Devices
Zitat:Für Event Callbacks gibt es auch eine Deregistrierungsfunktion. Rufst Du die auf bevor Du im nächsten Durchlauf wieder versuchst den Callback zu registrieren?

Ja das habe ich versucht, jedoch ohne Erfolg. Nach der Analyse des Problems hat sich letztendlich herausgestellt, dass beim Registrieren des Events LabVIEW die Referenz überschreibt. Zwar lassen sich dann noch die Propertys und Methoden wie z.B "Dispose" ohne Fehler aufrufen jedoch verwirft .Net bei Letzterem die Objekte nicht wie gewollt. Dadurch kam es natürlich immer zu Fehlern bei dem Versuch die Objekte neu anzulegen.


Zitat:Besser wäre die Registrierung nur einmal am Anfang der Software zu machen und danach am Ende vor dem Abschliessen die Deregistrierung.

Letztendlich ist es auch auf diese Realisierung hinausgelaufen. Ich lege nun zu Beginn die Treiber mit ein paar Dummy-Objekten für das Device an und "scanne" während des Programms lediglich nur noch nach dem angeschlossenen Device. So gesehen sogar eine weniger aufwendig und rechenintensive LösungSmile

Glücklicherweise konnte ich mein Problem auf diese Weise lösen allerdings denke ich sollte sich NI vielleicht einmal mit dieser Thematik auseinandersetzen da hier ja irgendwas mit .Net nicht reibungslos funktioniert.

Trotzdem Danke dass Du Dich mit meinem recht speziellen Problem befasst hast.

Gruß, Christian W.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.07.2009, 14:32
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Event Callback Knoten verursacht Probleme mit den Treibern eines Devices
Ich glaube nicht das das Problem bei LabVIEW liegt. Wenn Du ein Object in .Net (und COM/ActiveX) initilisiert hast musst Du es auch wieder deinitialisieren. Also für jedes Register Even muss auch irgendwo ein Deregister sein. So wie Du das beschreibst scheint das verwendete Objekt noch eine eigene zusätzliche Limitation zu haben, dass es nämlich sogenannt (pseduo)-statisch ist, also nur einmal instantiert werden kann. Das ist nicht nach .Net Regeln aber wenn es das tut sollte es das dann auf die richtige Weise tun und nicht seine eigene interne statische Referenz bei Neuinstantierung überschreiben.

Sollte trotzdem gehen wenn Du nachdem Du einmal Register gemacht hast immer auch wieder Deregister machst bevor Du wieder Register machst. Wenn das nicht geht ist etwas ziemlich faul mit dem .Net Control.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Beenden des Event-Callback-VIs ? IchSelbst 5 12.901 26.09.2019 14:44
Letzter Beitrag: Nominas
  NotifyIcon Callback 83Daniel 3 8.687 30.10.2018 10:24
Letzter Beitrag: 83Daniel
  Scrollrad Event Callback chris_deus 2 5.986 04.01.2011 10:57
Letzter Beitrag: chris_deus
  Ereignis-Callback registrieren/ Callback VI Nico 3 10.225 01.08.2009 15:48
Letzter Beitrag: ImExPorty
  Hidden event und event mit Parameter uebergabe mit LV8 active x .Net? Reiner 8 9.279 04.09.2007 12:44
Letzter Beitrag: Reiner
  Net Funktionen - Knoten peter01 0 4.507 15.03.2005 22:20
Letzter Beitrag: peter01

Gehe zu: