Haupt-VI zu mehrfach gleichzeitig ausführbaren Sub-VI machen
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!
Haupt-VI zu mehrfach gleichzeitig ausführbaren Sub-VI machen
Hallo Zusammen,
ich habe nach der Vorlage von NI ein Programm erstellt welches mit Hilfe eines Keithley DMM 3706 das Aufzeichnen und Protokollieren von Temperaturen ermöglicht. Das funktioniert so weit ganz gut. In dem Programm werden vom Nutzer zuerst die Kanäle konfiguriert, der Protokollpfad, Samplerate usw. festgelegt und anschließend wird die Messung gestartet. Nun soll es möglich sein, das Programm von mehreren Nutzern gleichzeitig zu nutzen. D.h. es soll einmal die Verbindung mit dem Keithley hergestellt werden, und anschließend soll jeder Nutzer für sich seine eigene Kanal- und Protokollkonfiguration festlegen können. Es soll dann jede Konfiguration getrennt voneinander gestartet und gestoppt werden können.
Nun war meine Überlegung dieses vorhandene VI zu einem SubVI zu machen, und von einem übergeordneten Haupt-VI mehrfach zu starten. In diesem Haupt-VI soll also nur nach dem Starten die Verbindung mit dem Keithley hergestellt werden, und bei Bedarf das Sub-VI bis zu viermal gestartet werden können. Einen ersten Versuch habe ich schon gestartet jedoch lässt sich das SubVI nicht mehr als einmal öffnen, obwohl ich eine Kopie gemacht habe, die sogar einen anderen Namen trägt. Ich weiß im Augenblick nicht wo ich mit der Suche beginnen soll. Deswegen habe ich auch erstmal einen Screenshot eingefügt, in der Hoffnung dass ihr mir sagt ob ich komplett auf dem Holzweg bin, oder ob es nur etwas "Einfaches" ist. Bei Bedarf kann ich auch das komplette VI hochladen, dass ist aber sehr umfangreich. Bitte seid gnädig mit mir, das ist mein erstes großes Projekt und es befinden sich sicher noch ein paar "dicke NoGos" im Programm.
Beste Dank schonmal.
Mez15
13.02.2017, 15:37 (Dieser Beitrag wurde zuletzt bearbeitet: 13.02.2017 15:39 von GerdW.)
RE: Haupt-VI zu mehrfach gleichzeitig ausführbaren Sub-VI machen
Hallo mez,
nur mal ein paar Gedanken, ohne auf dein VI einzugehen:
Du hast da eine einzelne Resource (DMM3706), die von mehreren Nutzern "gleichzeitig"/parallel genutzt werden soll. Meinst du, dass das sinnvoll oder zumindest konfliktfrei möglich sein wird?
Wie reagiert dein DMM, wenn User1 andere Samplingzeiten/Einstellungen nutzen will als User2?
Wie reagiert dein DMM, wenn User1 den gleichen Kanal/Switch (gewollt oder ungewollt) nutzen will wie User2?
Wie reagiert dein DMM, wenn es parallel sich widersprechende Messbefehle erhält?
Mögliche Lösung deines Problems, ohne auf dein VI einzugehen:
Erstelle dir eine Server-Client-Struktur. Dein Server verwaltet das eine DMM3706 und seine Resourcen. Deine Clients (User1-4) melden sich beim Server an, äußern ihre Wünsche und der Server kontrolliert, ob sie konfliktfrei umzusetzen sind. Darauf folgende Messrequest der Clients schickt dann nur der Server an das DMM und sendet die passenden Antworten an die Clients zurück.
Wenn du eine SharedResource hast, musst du dich auch um das Sharing kümmern!
RE: Haupt-VI zu mehrfach gleichzeitig ausführbaren Sub-VI machen
Hallo Gerd,
danke für deine Antwort. Deine Bedenken sind vollkommen begründet. Es ist jedoch so, dass es sich teilweise um Langzeitversuche handelt, d.h. die Temperaturen werden alle 30 Sekunden gemessen, teilweise nur alle 10 Minuten! D.h. man kommt sich normalerweise nicht in die Quere. Ob ein Kanal in einer Konfiguration mehrfach genutzt wird, kann dem Keithley auch egal sein, den er liefert einfach die Werte die abgefragt werden. Das heißt nicht dass mein Programm gut ist, wenn man es ordentlich machen wollte dann ist dein Vorschlag der Richtige.
Mich würde trotzdem interessieren ob sich mein VI als SubVI umbauen last. Mein aktueller Versuch ist kläglich gescheitert, und ich weiß nicht mal wo ich mit der Fehlersuche beginnen soll.
RE: Haupt-VI zu mehrfach gleichzeitig ausführbaren Sub-VI machen
Wenn du ein VI reentrant machst, dann musst du eigentlich auch alle SubVIs reentrant machen, damit auch diese Unterinstanzen unabhängig voneinander laufen. Dann hast du aber das Problem, dass FGVs nicht mehr einsetzbar sind (und laut Screenshot sind da einige FGVs drinnen).
Als "Rettung" könnstest jetzt aus deinem Main-VI eine Exe machen und diese mehrfach aufrufen. Wenn du da nicht heftig Probleme kriegst mit der HW-Resource...
Zusammenfassung: Main-VI reentrant ist definitiv kein gangbarer Weg, Main-VI als Exe mehrfach mag gehen, ich rate aber davon ab.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Haupt-VI zu mehrfach gleichzeitig ausführbaren Sub-VI machen
Ich danke euch für eure Ratschläge und Einschätzung. Dann werde ich das Haupt-VI so umgestallten dass es für bis zu vier User verwendbar wird. D.h. ich muss noch jeweils drei weitere Queues und Notifier aufmachen, so dass die Daten der einzelnen User getrennt laufen.
@ jg: Wo siehst du da FGVs? Ich hab zwar welche drin, aber auf dem Screenshot ist eigentlich keins zu sehen.
@ GerdW: Gibt es bei LabVIEW ein Beispiel für so eine Server-Client-Struktur?
14.02.2017, 08:32 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2017 08:37 von GerdW.)
RE: Haupt-VI zu mehrfach gleichzeitig ausführbaren Sub-VI machen
Hallo mez,
Zitat:Gibt es bei LabVIEW ein Beispiel für so eine Server-Client-Struktur?
Na klar: im Beispielfinder - wo sonst?
Da gibt es für den Einstieg den "Simple Data Server/Client"… (Ich habe mit LV2011 geguckt, bei neueren Versionen können sich die Namen leicht geändert haben. Einfach mal nach "Server" suchen!)
Bei NI findest du aber auch schon fertige Bibliotheken mit TCP-basierten Messagehandlern wie diese hier. Google doch einfach mal nach "labview tcp message handler", da findest du jede Menge passende Einträge…