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 

Modulares Programmieren mit LV



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!

01.07.2010, 13:22
Beitrag #1

petit_spirou Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Sep 2007

11.0
2005
DE

34132
Deutschland
Modulares Programmieren mit LV
Hallo an alle,

ich arbeite an einem Projekt, von dem eine EXE erstellt und an den Kunden weitergegeben wird.

Findet der Kunde einen Fehler, wird nach der Fehlerbehebung wieder eine EXE erstellt und weitergegeben.

Als ich früher in C/C++ programmiert habe, habe ich einige Programmteile als DLL kompiliert und mein Programm
modularisiert.

Mein Ziel ist es, eine EXE zu erstellen, die auf Module dynamisch zugreift. Wenn in diesen Modulen Fehler entdeckt wurden, kann ich die Module leichter austauschen. Ausserdem lassen sich die Module auch weiterverwenden in ähnlichen Projekten.

Mein erster Versuch war, dass ich API-VIs erstellt habe, die die eigenlichen VIs dynamisch aufrufen.
Die aufzurufenden VIs sind in einer LLB zusammen mit allen benötigten VIs (user.lib, vi.lib) gespeichert.
Die VIs in der LLB (ausser den aus vi.lib) habe ich einen eigenen Namensraum gegeben.

Nach ersten Tests habe ich die EXE zusammen mit den Modul-LLBs auf einem weiteren Rechner getestet.
Während der Laufzeit konnte ich die Module aufrufen, allerdings beim Beenden der EXE kam manchmal eine Fehlermeldung von LV.

Wer hat Erfahrungen oder kann mir Tipps geben, wie man in LV am besten modular programmiert?

Gruss

Markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.07.2010, 18:03
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Modulares Programmieren mit LV
Also, bei mir entsteht die Modularität durch SubVIs. Ich erstelle aus meinem HauptVI eine EXE und dann sind automatisch alle enthaltenen SubVIs mit dabei, die ich auf dem Blockdiagramm platziert habe.
Wenn ich SubVIs dynamisch aufrufe (mit "Call by reference node"), binde ich sie beim Erstellen der EXE manuell mit ein (unter "Source Files" -> "Always included"), da sie hier nicht automatisch mit eingebunden werden.

Was Du da machst ist mir irgendwie zu hoch. Da bin ich nicht durchgestiegen..... WackoBahn

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.07.2010, 06:48
Beitrag #3

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
Modulares Programmieren mit LV
' schrieb:Mein erster Versuch war, dass ich API-VIs erstellt habe, die die eigenlichen VIs dynamisch aufrufen.
Die aufzurufenden VIs sind in einer LLB zusammen mit allen benötigten VIs (user.lib, vi.lib) gespeichert.
Hi Markus

ich kann dir zwar nicht helfen, hätte aber eine Frage an dich Cool
Hast du mir ein Stichwort, wie das mit den API-VIs funktioniert. Ich steh momentan vor dem Problem, dass ich zur Laufzeit der exe gerne .NET Assemblies austauschen möchte. Unter der Entwicklungsumgebung funktioniert das einwandfrei, da ich die VIs dynamisch laden kann und somit die Assemblies noch nicht in der LabVIEW AppDomain geladen wurden. Bei der exe jedoch wird mir dieser Mechanismus in der Standardkonfiguration ausgehebelt. Momentan bin ich dabei mir eine Wrapper dll zu schreiben, die mir ein dynamisches Austauschen ermöglicht. Wenn ich das umgehen könnte, wäre ich gar nicht traurig Big Grin

Besten Dank und viele Grüsse,
Christian

In theory, there is no difference between theory and practice; In practice, there is.

Chuck Reid
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.07.2010, 07:03
Beitrag #4

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Modulares Programmieren mit LV
Also ich mache es bei meinen Applikationen genauso. Mein API VIs weißen alle eine Producer/Consumer Architektur auf. Wenn ich das Programm beende, sende ich ein Event an alle offenen API VIs. Dort wird eine Shutdown routine (muss man selbst implementieren) ausgeführt, die alle offenen Ressourcen schließt. Wenn das Main VI das OK bekommt (alle API VIs sicher beendet) so führt dieses seine eigene Shutdown Routine aus und beendet sich. So kannst du die LLBs einfach austauschen und brauchts nicht immer eine neue EXE der kompletten Applikation zu erstellen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.07.2010, 08:47
Beitrag #5

petit_spirou Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Sep 2007

11.0
2005
DE

34132
Deutschland
Modulares Programmieren mit LV
' schrieb:Also, bei mir entsteht die Modularität durch SubVIs. Ich erstelle aus meinem HauptVI eine EXE und dann sind automatisch alle enthaltenen SubVIs mit dabei, die ich auf dem Blockdiagramm platziert habe.
Wenn ich SubVIs dynamisch aufrufe (mit "Call by reference node"), binde ich sie beim Erstellen der EXE manuell mit ein (unter "Source Files" -> "Always included"), da sie hier nicht automatisch mit eingebunden werden.
Hallo Y-P
genau das will ich ja nicht, die Module sollen NICHT als SubVIs in die EXE mit einkompliert werden. Ich will sie ja dynamisch (also durch Call by Reference) aufrufen. Die VIs sollen ausserhalb der EXE in separaten LLBs o. ä. liegen


<!--quoteo(post=100915:date=02.07.2010 , 07:48:48:name=<<oenk>>)--><div class='quotetop'>ZITAT(<<oenk>> @ 02.07.2010 , 07:48:48) [url=index.php?act=findpost&pid=100915][/url]</div><div class='quotemain'><!--quotec-->ich kann dir zwar nicht helfen, hätte aber eine Frage an dich Cool
Hast du mir ein Stichwort, wie das mit den API-VIs funktioniert. Ich steh momentan vor dem Problem, dass ich zur Laufzeit der exe gerne .NET Assemblies austauschen möchte. Unter der Entwicklungsumgebung funktioniert das einwandfrei, da ich die VIs dynamisch laden kann und somit die Assemblies noch nicht in der LabVIEW AppDomain geladen wurden. Bei der exe jedoch wird mir dieser Mechanismus in der Standardkonfiguration ausgehebelt. Momentan bin ich dabei mir eine Wrapper dll zu schreiben, die mir ein dynamisches Austauschen ermöglicht. Wenn ich das umgehen könnte, wäre ich gar nicht traurig Big Grin[/quote]

Da kann ich Dir leider nicht weiterhelfen, da ich mit .NET keine Ahnung habe.

Gruss Markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.07.2010, 08:58
Beitrag #6

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
Modulares Programmieren mit LV
Dein Ansatz ist genau richtig! Ich denke du musst nur noch schauen was diesen Fehler verursacht und das Problem beseitigen, abrissbirne hat hier einen guten Vorschlag geliefert.

Ein Nachteil an dieser Geschichte ist, dass durch das hinzufügen der vi.lib und user.lib die llb-Dateien sehr groß werden können. Aber ohne hinzufügen findet er die VI´s nicht auch wenn sie in der EXE drin sein sollten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
02.07.2010, 09:04
Beitrag #7

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
Modulares Programmieren mit LV
' schrieb:Ich will sie ja dynamisch (also durch Call by Reference) aufrufen. Die VIs sollen ausserhalb der EXE in separaten LLBs o. ä. liegen

Da kann ich Dir leider nicht weiterhelfen, da ich mit .NET keine Ahnung habe.

Gruss Markus
mit .NET brauchst du mir auch nicht zu helfen, das bekomm ich selber hin Rolleyes (hoff ich zumindest)
Ich hab hab mich auf das Call by Reference in einer executable bezogen. Das hab ich noch nie gemacht und wüsste jetzt auch nicht direkt unter was ich das bei ni.com suchen sollte...

In theory, there is no difference between theory and practice; In practice, there is.

Chuck Reid
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.07.2010, 09:47
Beitrag #8

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Modulares Programmieren mit LV
' schrieb:Ein Nachteil an dieser Geschichte ist, dass durch das hinzufügen der vi.lib und user.lib die llb-Dateien sehr groß werden können. Aber ohne hinzufügen findet er die VI´s nicht auch wenn sie in der EXE drin sein sollten.
Du kannst diese in eine Datei ablegen. Beim "Compilieren" der LLB gibst du den Pfad für die Hilfsdateien an. Innerhalb deiner Release musst du dann den relativen Pfad auf diese Datei auch so anlegen und dann können alle LLBs auf diese Bibliotheken zugreifen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.07.2010, 10:50
Beitrag #9

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Modulares Programmieren mit LV
<!--quoteo(post=100933:date=02.07.2010 , 10:04:56:name=<<oenk>>)--><div class='quotetop'>ZITAT(<<oenk>> @ 02.07.2010 , 10:04:56) [url=index.php?act=findpost&pid=100933][/url]</div><div class='quotemain'><!--quotec-->Ich hab hab mich auf das Call by Reference in einer executable bezogen. Das hab ich noch nie gemacht und wüsste jetzt auch nicht direkt unter was ich das bei ni.com suchen sollte...[/quote]
In LabVIEW hat es ein Beispiel "Plug In Example", sollte doch auch mit einer Exe gehen. (wenn der Pfad stimmt, habe es aber auch nie gemacht)

Ist das nicht das gesuchte?
Was mich verunsichert, warum schreibt ihr von API-Vi ?

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.07.2010, 11:53
Beitrag #10

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
Modulares Programmieren mit LV
' schrieb:wenn der Pfad stimmt, habe es aber auch nie gemacht)

Ist das nicht das gesuchte?
Hi RoLe
danke für den Link
so hab ich das auch gemacht. In der IDE funktioniert das alles einwand frei. Bei einer executable funktioniert das aber irgendwie nicht mehr.
Da kann ich die dll nicht mehr austauschen, da sie schon geladen wurde. Und wenn einmal eine .NET Assembly in der AppDomain geladen wurde bekommst du die da nie mehr raus (ausser du schliesst die AppDomain)
Irgendwie klang die Anfangsfrage so, dass man das Laden irgendwie anders gestallten kann. Die Frage ist nur wie (auch mich hat das Wort API-VI irritiert, da ich noch nie was davon gehört habe und hoffte Hinweise darauf zu bekommen)

In theory, there is no difference between theory and practice; In practice, there is.

Chuck Reid
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
  Programmieren im Formelknoten DrHoas 9 12.690 26.06.2021 23:22
Letzter Beitrag: Martin.Henz
  Tic Tac Toe Programmieren OenerSer 3 3.008 11.05.2021 09:26
Letzter Beitrag: OenerSer
  Labview Memory Programmieren OenerSer 5 3.815 27.04.2021 13:05
Letzter Beitrag: GerdW
  Statemachine programmieren… Granit 8 10.894 30.04.2017 16:42
Letzter Beitrag: Granit
  Übersichtliches Programmieren LabVIEW cobain2004 2 4.365 29.10.2015 17:57
Letzter Beitrag: IchSelbst
  Automatischen Ablauf programmieren Freaky29 3 4.999 03.02.2015 11:27
Letzter Beitrag: Freaky29

Gehe zu: