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 

Kommunikation zweier separater Programme



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!

11.09.2007, 17:04 (Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2007 17:05 von erbi.)
Beitrag #1

erbi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 101
Registriert seit: Dec 2005

8.2
2005
de

98646
Deutschland
Kommunikation zweier separater Programme
Hallo Kollegen.....

hab wida mal ein problem zu lösen. Ich versuch den Komplizierten Sachverhalt mal plausibel rüberzubringen.

Ich habe ein LabVIEW-VI geschrieben mit dem ich den analogen Eingang einer Messkarte auslese. Das Ganze über eine bestimmte definierbare Zeit (i.d.R 10 sekunden). Grundproblem bei der ganze Sache ist, dass das über eine DLL läuft und mein VI während dieses Vorganges keine Befehle ausführen kann. Ich will nun aber während dem Auslesen der Messkarte (i.d.R. nach 5 sekunden) einen digitalen ausgang der Karte ansteuern.

ich hab das folgendermaßen gelöst.

Kurz bevor die 10 sekunden gemessen werden, schreibe ich mit meinem hauptprogramm, welches die Karte ausliest, einen wert in eine ini-datei(...=True). nun hab ich zusätzlich ein zweites VI geschrieben was kontinuierlich die ini-datei ausliest. wenn der besagte wert TRUE ist steuert dieses VI den digitalen ausgang nach den besagten 5 sekunden an. damit das ganze simultan ablaufen kann hab ich letztendlich aus diesem VI, welches den digitalen ausgang ansteuert, eine exe gemacht.

was anderes ist mir leider nicht eingefallen. ich hoffe es ist verständlich geschrieben(ist es in der regel leider nicht....).

gibts noch andere lösungsansätze? kann man das so machen?

mfg-erbi
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.09.2007, 17:26 (Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2007 17:26 von dc6xs.)
Beitrag #2

dc6xs Offline
registered alien
****


Beiträge: 762
Registriert seit: Aug 2006

6.1,7.00
2006
kA

79106
Sonstige
Kommunikation zweier separater Programme
Warum so einen Aufwand? könntest doch z.b. per TCPIP über das loopback-device kommunizieren. oder gleich per ActiveX oder DDE ..

TCPIP häte auch den Vorteil das Du die beiden Programme aufverschiedenen Rechnern laufenlassen könntest.

Unter Linux hättest auch per Pipe oder FIFO-Node die Programme verknüpfen können..

Gruß, Rob

Bitte Beachten:
Die obenstehenden Texteile können unter Umständen Sarkasmus und Ironie enthalten, für nicht erkannten Sarkasmus oder nicht erkannte Ironie wird keine Haftung übernommen.

N.B.:
"Multiple exclamation marks, " he went on, shaking his head, "are a sure sign of a deseased mind." - Terry Pratchett
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.09.2007, 17:42
Beitrag #3

erbi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 101
Registriert seit: Dec 2005

8.2
2005
de

98646
Deutschland
Kommunikation zweier separater Programme
versteh ich net.....wie gesagt.....mein programm macht während den 10 sekunden GARNÜSCHT....da fällt quasi alles flach was irgendwie mit dem blockdiagramm des hauptprogramms zu tun hat...
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.09.2007, 09:52
Beitrag #4

A.Berndsen Offline
LVF-Team
LVF-Team

Beiträge: 2.437
Registriert seit: Feb 2005

8.2.1 - 2011
2004
DE

724xx
Deutschland
Kommunikation zweier separater Programme
Hast DU mal probiert, zwei parallele Whileschleifen in Deinem VI zu erstellen?

Die erste ruft über DLL den analogen Wert ab und die zweite kümmert sich um den Port.
Die beiden Schleifen können dann über eine Queue kommunizieren.

Gruß
Andreas

Geht nicht, gibts nicht!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.09.2007, 08:33
Beitrag #5

erbi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 101
Registriert seit: Dec 2005

8.2
2005
de

98646
Deutschland
Kommunikation zweier separater Programme
2 while schleifen hatte ich schon....mit queue hab ich da aber net gearbeitet....da haben glaub ich beide schleifen während der dll-angehalten...wenn ich mich recht entsinne hab ich noch nie mit queue gearbeitet...muss ich mal beispiele durchforsten

kann nun mit meiner umständlichen methode auf 50ms genau arbeiten.

danke für den tip...ich ziehs mal in betracht
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.09.2007, 07:39
Beitrag #6

A.Berndsen Offline
LVF-Team
LVF-Team

Beiträge: 2.437
Registriert seit: Feb 2005

8.2.1 - 2011
2004
DE

724xx
Deutschland
Kommunikation zweier separater Programme
Hallo erbi,

da gibt es schon zwei fertige Templates in LV.
Kannst Du ja mal für einen ersten Test hernehmen.

Gruß
Andreas


Angehängte Datei(en) Thumbnail(s)
   

Geht nicht, gibts nicht!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.09.2007, 09:05 (Dieser Beitrag wurde zuletzt bearbeitet: 14.09.2007 09:08 von rolfk.)
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Kommunikation zweier separater Programme
' schrieb:2 while schleifen hatte ich schon....mit queue hab ich da aber net gearbeitet....da haben glaub ich beide schleifen während der dll-angehalten...wenn ich mich recht entsinne hab ich noch nie mit queue gearbeitet...muss ich mal beispiele durchforsten

kann nun mit meiner umständlichen methode auf 50ms genau arbeiten.

danke für den tip...ich ziehs mal in betracht

Also LabVIEW ist inherent multithreading und hat damit prinzipiel keine Probleme. Aber es gibt schon ein paar Dinge zu beachten. Ein DLL Aufruf kann entweder reentrant laufen oder im UI thread. Reentrant bedeutet dass LabVIEW ihn innerhalb des aktuellen Diagramms in einem der zur Verfügung stehenden Threads laufen lassen kann und das sind seit LabVIEW 8 doch schon mal so ungefähr 4 pro Execution System (ein VI und damit Diagramm kann einem von 5 oder so Execution Systems zugeordnet werden). Default ist dasselbe Execution System als das aufrufende VI.

Bei DLLs gibt es aber einen Haken. Bei schlecht, schluffig, oder was auch immer programmierten DLLs kann es Probleme geben wenn diese reentrant aufgerufen werden, entweder weil sie mit globalen Variablen arbeiten die sich bei mehreren gleichzeitigen Aufrufen gegenseitig beeinflussen oder weil sie auf irgendeine Weise threadspezifische Information verwenden und nicht damit leben können von verschiedenen Threads aufgerufen zu werden. In dem Fall muss man die Call Library Node eben so konfigurieren, dass die DLL im UI Thread aufgerufen wird, da das der einzige Thread in LabVIEW ist der garantiert immer derselbe bleibt innerhalb einer LabVIEW Session.

Nun ist aber der UI Thread wie der Name schon sagt auch zuständig für das Updaten des User Interfaces und zudem werden ein paar andere Dinge wie etwa Property Nodes aus sicherheitstechnischen Gründen in diesem Thread ausgeführt.

Die Moral von der Geschicht: Wenn Du die DLL reentrant aufrufen kannst dann Du es. Wenn das crasht, oder unerklärliche Phanomene produziert musst Du sie eben im UI Thread laufen lassen. Dann musst Du aber dafür Sorge tragen, dass in anderen Loops die parallel laufen keine Frontpanelelemente geudated werden die ein synchrones Update ausführen (default ist asynchon) und auch keine Property Nodes sind, und auch keine anderen DLLs (oder CINs) die nicht reentrant sind (orange Hintegrundfarbe statt lichtgelber).

Und natürlich müssen alle Loops die parallel laufen sollen immer entkoppelt sein. Das heisst kein Verbindungsdraht von der einen Loop in die andere. Wenn Kommunikation zwischen solchen Loops nötig ist muss das auf andere Weise geschehen (in absteigender Folge der Bevorzugung): Queues, LV2 style globals, Interprocess Kommunikation (shared memory, Netzwerk, DDE/Apple Events, etc), lokale Variablen, oder globale Variablen.

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
15.09.2007, 23:46
Beitrag #8

erbi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 101
Registriert seit: Dec 2005

8.2
2005
de

98646
Deutschland
Kommunikation zweier separater Programme
ach du schande, was man da alles beachten muss.....werd ich mal alles ausprobieren.....vielen dank schonmal.....ich halt euch auf dem laufenden
Webseite des Benutzers besuchen 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
  Zeiterfassung zweier Lichtschranken Dsans 12 6.896 26.10.2022 12:10
Letzter Beitrag: Dsans
  Vergleich zweier Zahlen LabViewPete 13 12.444 27.10.2020 12:52
Letzter Beitrag: THL
  Ansteuerung zweier Heizer mittels PID-Regler Christoph1993 2 3.378 25.11.2018 19:53
Letzter Beitrag: Christoph1993
  Kopplung zweier Ereignisse TTT 4 4.524 25.07.2018 15:49
Letzter Beitrag: TTT
  Programme für unterschiedliche Hardware gestalten MaxP 2 3.357 29.11.2017 09:30
Letzter Beitrag: MaxP
  Vergleich und Neusortierung zweier Arrays domdom 6 5.865 30.11.2016 09:13
Letzter Beitrag: domdom

Gehe zu: