01.07.2010, 13:22
Beitrag #1
|
petit_spirou
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
|
|
|
01.07.2010, 18:03
Beitrag #2
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
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.....
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
02.07.2010, 06:48
Beitrag #3
|
oenk
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
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
Besten Dank und viele Grüsse,
Christian
In theory, there is no difference between theory and practice; In practice, there is.
Chuck Reid
|
|
|
02.07.2010, 07:03
Beitrag #4
|
|
|
02.07.2010, 08:47
Beitrag #5
|
petit_spirou
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
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 [/quote]
Da kann ich Dir leider nicht weiterhelfen, da ich mit .NET keine Ahnung habe.
Gruss Markus
|
|
|
02.07.2010, 08:58
Beitrag #6
|
|
|
02.07.2010, 09:04
Beitrag #7
|
oenk
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 (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
|
|
|
02.07.2010, 09:47
Beitrag #8
|
|
|
02.07.2010, 10:50
Beitrag #9
|
|
|
02.07.2010, 11:53
|
oenk
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
|
|
|
| |