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 

Gleichzeitiger DLL Zugriff über LabVIEW



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!

26.01.2015, 09:33
Beitrag #1

ahebauer Offline
LVF-Grünschnabel
*


Beiträge: 28
Registriert seit: Jun 2010

18.0f1 (64bit)
2010
DE_EN


Deutschland
Gleichzeitiger DLL Zugriff über LabVIEW
Hallo,

ich habe eine Frage zum Verhalten von DLLs, wenn sie aus LabVIEW heraus aufgerufen werden (über 'Call Library Funtion Node'):

wie verhält sich eine DLL, wenn sie von zwei Programmteilen gleichzeitg aufgerufen wird? In meiner Anwendung laufen zwei Prozesse
parallel und unabhängig zueinander und beide müssen auf die selbe DLL zugreifen. Jetzt könnte ich den gleichzeitigen Zugriff natürlich
von vorne herein verhindern, wenn ich den DLL-Aufruf in einem ablaufvarianten VI unterbringe. Ich möchte aber gerne wissen, wie sich
eine DLL verhält, wenn sie zur gleichen Zeit von 2 Programmteilen aufgerufen wird. Puffert die DLL die Anfragen (bzw. merkt LabVIEW,
dass die DLL gerade belegt ist und wartet) und die Abarbeitung erfolgt sequentiell, oder geht eine Anfrage verloren (oder resultiert in
einer Fehlermeldung von LabVIEW, da die DLL nicht aufgerufen werden konnte)?

Vielen Dank
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.01.2015, 10:17 (Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2015 10:22 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Gleichzeitiger DLL Zugriff über LabVIEW
(26.01.2015 09:33 )ahebauer schrieb:  Hallo,

ich habe eine Frage zum Verhalten von DLLs, wenn sie aus LabVIEW heraus aufgerufen werden (über 'Call Library Funtion Node'):

wie verhält sich eine DLL, wenn sie von zwei Programmteilen gleichzeitg aufgerufen wird? In meiner Anwendung laufen zwei Prozesse
parallel und unabhängig zueinander und beide müssen auf die selbe DLL zugreifen. Jetzt könnte ich den gleichzeitigen Zugriff natürlich
von vorne herein verhindern, wenn ich den DLL-Aufruf in einem ablaufvarianten VI unterbringe. Ich möchte aber gerne wissen, wie sich
eine DLL verhält, wenn sie zur gleichen Zeit von 2 Programmteilen aufgerufen wird. Puffert die DLL die Anfragen (bzw. merkt LabVIEW,
dass die DLL gerade belegt ist und wartet) und die Abarbeitung erfolgt sequentiell, oder geht eine Anfrage verloren (oder resultiert in
einer Fehlermeldung von LabVIEW, da die DLL nicht aufgerufen werden konnte)?

Vielen Dank
Michael

Eine DLL wird grundsätzlich immer in den Prozessspeicher geladen. Jeder Prozess hat seinen eigenen, geschützten Prozessspeicher, den ein anderer Prozess nicht einfach so lesen (und schon gar nicht schreiben) darf. LabVIEW ist ein Prozess und Deine andere Applikation ist ein anderer Prozess. Die DLL ist also grundsätzlich zweimal, völlig unabhängig voneinender im Speicher geladen. Das heisst dass allfällige globale Variablen in der DLL in jeder Applikation ihren eigenen unabhängigen Werte nebeneinander halten können. Aber wenn die DLL irgendeine geteilte Resource anspricht (File, Device, etc) dann gelten selbstverständlich die selben Regeln wie wenn zwei unabhängige Prozesse diese Resource anzusprechen versuchen.

Innerhalb der selben Applikation gelten andere Regeln. LabVIEW ist grundsätzlich Multithreading. Wenn die Call Library Node nicht so konfiguriert wird dass sie im UI Thread ausgeführt wird und Du keine anderen Massnahmen triffst wie eine Semafore oder den DLL Aufruf in ein non-reentrantes VI legen das Du jeweils von den verschiedenen Orten aufrufst, dann werden die Funktionen grundsätzlich parallel und durchaus auch überlappend aufgerufen. Wenn Deine Funktion das nicht haben kann, dann ist es zwingend erforderlich um entweder die DLL Node im UI Thread auszuführen oder in ein VI zu legen das non-reentrant ist und diese Funktion(en) immer durch dieses VI aufzurufen.

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.01.2015, 13:42
Beitrag #3

ahebauer Offline
LVF-Grünschnabel
*


Beiträge: 28
Registriert seit: Jun 2010

18.0f1 (64bit)
2010
DE_EN


Deutschland
RE: Gleichzeitiger DLL Zugriff über LabVIEW
Danke für die ausführliche Antwort.
Ich werde jetzt den Kontakt zum Programmierer
der DLL suchen und mit ihm erörtern, ob
parallele Zugriffe überhaupt realisierbar sind.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Extrem langsamer Variablen Zugriff über Referenzen hajos118 12 3.646 01.08.2022 17:20
Letzter Beitrag: BNT
Question Festo CPX Busknoten über cRIO und Labview ansteuern Gast955235 1 2.777 05.03.2020 14:23
Letzter Beitrag: MaxP
  Schrittmotor über Labview ansteuern für X-Y-System taracho 5 5.918 26.10.2017 09:59
Letzter Beitrag: GerdW
  LabVIEW über Button auf Frontpanel starten otto 10 16.442 13.10.2016 12:33
Letzter Beitrag: Appa
  DVR Zugriff über FGV? GT123 6 4.886 03.09.2015 11:33
Letzter Beitrag: GT123
  TestStand über LabView steuern rabber 5 5.545 07.07.2014 07:58
Letzter Beitrag: GerdW

Gehe zu: