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!
29.01.2009, 14:19 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2009 19:27 von jg.)
ich will gern eine Art Haupt-VI schreiben, dass die Messungen verwaltet, aber dass zum Konfigurieren des Geräts das dafür spezielle VI öffnet (im Endeffekt soll es auch mehrere Geräte vereinigen!). Grund ist, dass Gerät wechselt (z.B. verschiedene Oszi Typen). D.h., in einer Datei sollen die Geräte mit den jeweiligen VIs stehen, welche intern eine ähnliche Struktur haben und mit demgleichen Mechanismus (z.B. globale Vaiablen) Daten ans Hauptprogramm zurückgeben soll (also z.B. Strings mit Messdaten oder dem Status). Wenn ich nun mehrere Messschränke mit jeweils diesem Haupt-VI von einem Rechner aus verwalten will, und für gleiche Geräte also auch mehrfach das gleiche "Verwaltungs"-VI offen hab, kommt es dann beim austausch nicht zu überschneidungen in den Globalen Variablen? Kann ich gezielt Daten an ein "Mutter"-VI senden?
Ich weiß, dass klingt vllt. erstmal komisch, aber genau das wird hier benötigt, da wir die Experimente aus Sicherheitsgründen von einem Steuerraum kontrollieren und dann auch mehrere Experimente gleichzeitig.
Ich hab eine Idee, die recht nett ist und auch nicht schwer, aber vllt. gehts auch anders: ich leg im Netzwerk eine Zentrale Datei, auf die Haupt- und Verwaltungs-VIs zugreifen und entsprechende Daten eintragen. Aber vllt. wisst ihr was besseres.
Hallo,
ich bin mir nciht ganz sicher ob ich alles verstanden habe, aber ich versuchs trotzdem mal.
zu deiner beschreibung
Zitat:D.h., in einer Datei sollen die Geräte mit den jeweiligen VIs stehen, welche intern eine ähnliche Struktur haben und mit demgleichen Mechanismus (z.B. globale Vaiablen) Daten ans Hauptprogramm zurückgeben soll
diese erinnert mich stark an mein programm:
Wir haben bspw. mehrere kameras, die zwar grob alle gleich arbeiten und die wir gleich ansteuern wollen, bzw. deren daten auf derselben weise erhalten wollen. Dafür habe ich eine allgemeine klasse "kamera" erstellt. Jedes gerät hat dann eine eigene klasse, die von kamera erbt und die gerätespezifisch angpasst werden kann (funktionen wie "record image" werden dabei ueberladen, man kann aber ALLE kameras genau gleich ansprechen, dies könntest du noch weiter verallgemeinern, je nachdem was du für geräte anstuerst und wie unterschiedlich diese sind. somit hast du diesselben schnittstellen für deine geräte (oder gerätegruppen, wie es halt sinnvoll ist).
Zur datenübergabe, da ich kein fan von globalen variablen bin: hast du es schonmal mit queue's probiert? erstell einfach eine queue, und lass alle deine geräte ihre daten dort anhängen. Das hauptprogramm liest dann diese queue aus und verarbeitet die daten weiter. damit kommt sich auf jeden fall dann nichts in die quere.
also, hab gleich mal ein Testprogramm dazu geschrieben (hab noch nie mit queue's gearbeitet). Könnte vielversprechend sein, danke erstmal für den Tipp!
Wenn ich das richtig verstehe, erstell ich ein queue mit seinem Namen (bzw. verschaff mir zugriff), und dass in allen VIs, die Kommunizieren sollen. Dann kann ich in dem einen Programm etwas ans queue hängen und es in einem anderen wieder auslesen, richtig? Aber wie sag ich einem Kontroll-VI, welches queue es nun beschreiben soll. Ist dieses VI 3mal offen, schreiben alle ins gleiche, da ja keinem gesagt werden kann, ein anderes zu nehmen (da der Quellcode ja nur eins vorgibt; aber auch bei mehreren, woher weiß es, welches das richtige ist)? Ich mein das so, wenn 3 Paare von VIs in den Paaren kommunizieren sollen, aber alle im Quellcode nur ein queue, globale variable oder sonst irgendwas haben, so reden trotzdem alle durcheinander, da keiner weiß, mit wem er sprechen muss. Gut, ich könnt das auch lösen, indem irgendwie Erkennungsmarken gesetzt werden, oder ich Arrays ins Queue lege, wo jeder seine Zeile hat, aber da ich ständig an das queue dranhänge und wegnehme, könnt auch mal das falsche Programm daten wegnehmen, zwar ohne diese zu verarbeiten, aber das andere VI steht dann hinten an und bekommt nix mehr.
Oder versteh ich das falsch mit dem Queue?
Gruß, Maxwell
PS: Weißt du zufällig, wie ich ein VI aus einem VI direkt starte? Mir fiel grad auf, dass ich garnich weiß wie das geht, ich dacht das sei so einfach wie z.B. exe-Dateien!?
30.01.2009, 08:47 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2009 14:59 von Lucki.)
' schrieb:ich will gern eine Art Haupt-VI schreiben, dass die Messungen verwaltet, aber dass zum Konfigurieren des Geräts das dafür spezielle VI öffnet (im Endeffekt soll es auch mehrere Geräte vereinigen!). Grund ist, dass Gerät wechselt (z.B. verschiedene Oszi Typen).
Die Idee läßt sich sehr elegant mit einer Erzeuger-Verbraucher-Struktur realisieren.
Einfachstes Beispiel hier
Umsetzung Deiner Idee: Es gibt mehrere Erzeuger, die Erzeuger sind Sub-VIs des Verbrauchers (= Haupt-VI). Vom Haupt-VI wird jeweils ein Erzeuger-VI als aktivere VI ausgewählt. Die Erzeuger-VIs haben identische Interfaces zum Haupt-VI.
Weitere Suchworte: Producer - Consumer, Queue, Melder, Notifier
Hi,
willst du VI b durch a starten, bindest du b einfach in a ein! Damit es das frontpanel zeigt (meintest du das? sichtbares frontpanel?) musst du unter rechtklick auf dem VI SubNode oder sowas auswaehlen.
Mit der queue... willst du wissen wer genau ein objekt an die queue angehaengt hat? machen dann evt mehrere queues sinn? ansonsten ja, mit einem erkennungsmerkmal, welches den "absender" identifiziert. Falls ein VI ein element aus einer queue holt mit falschem absender, dann fuege es der queue einfach wieder an.
@Lucki: Hallo und danke, klingt ganz gut, ich werd es mir mal anschauen; nur deine Beispiele nützen mir nix, da ich nur die 8.2 habe; aber ich gooles mal!
@Steffen: Ja, die Lösung mit dem Erkennungsmerkmal meinte ich ja damit. Aber mit dem VI mein ich das so: das soll kein wirkliches Sub-VI sein, da weiß ich ja wie es geht; es soll ein beliebiges VI sein, z.B. für einen Temperaturfühler, der ans Haupt-VI nur die Temperatur übergibt, aber das Kontroll-VI kann noch mehr (z.B. setzen von Heizung, Spannung auslesen, Messtabelle schreiben, etc.). Nun gibt es aber verschiedene Temperaturcontroller, bei Lakeshore 340 und 370 macht es vllt. nicht viel, aber nehm ich ein Cryovac 304, so brauch ich komplett andere Befehle (aber alle geben ans Haupt-VI nur die Temperatur!), und ich will nicht für jeden neuen Controller das "Temperaturfühler-VI" erweitern müssen, stattdessen will ich über eine Input-Datei dem Haupt-VI sagen, welches VI es für welchen Controller zu starten hat (halt genauso wie eine externe Anwendung, z.B. exe-Datei), welches dann zum erweiterten konfigurieren des Controllers dient oder einfach nur im Hintergrund die Temperatur ausließt und via Queue oder was auch immer ans Haupt-VI übergibt, wo man alles übersichtlich angezeigt bekommt.
Dieses Problem setzt sich fort bei Oszis, Spannungsmessern, Lock-Ins usw., da jede Firma andere Befehlssätze hat bzw. schon jedes Gerät andere Einstellmöglichkeiten, aber im Grunde machen sie grundsätzlich dasselbe und sollen dies im Haupt-VI zur Verfügung stellen. Aber vllt. sprech ich dieses Problem nochmal in nem neuen Thema an, da es eigentlich nicht mehr dazu passt...
ich will aus einem VI heraus ein anderes VI starten, was nicht in dem ersten integriert ist. Das erste VI kennt nur den Pfad des zweiten! Beide sollen dann miteinander kommunizieren, was ich aber gerade in einem anderen Thema diskutier. In demselben hab ich das auch nochmal ein bischen praktisch erläutert: http://www.LabVIEWforum.de/index.php?showt...amp;#entry65888
Klang an sich einfach, aber beim Programmieren eines Tests für das andere Problem fiel mir auf, ich weiß nicht einmal, wie das geht... ;p
hi,
mit den genauen geraete bezeichnugen kann ich nichts anfangen, da kenn ich mich gar nciht aus.
das producer - consumer - konzept das lucky angesprochen hat meinte ich mit meiner "queue-idee" auch, hatte den eintrag ganz ueberlesen, da findest du in der LabVIEW hilfe siche rein asnschauliches bsp dazu, das sollte dieses problem loesen.
wegen dem starten der vi's... ich bin mir nicht sicher ab ichs versteh... also abhaengig von irgendwas (log-datei oder user-auswahl...) soll ein bestimmtes vi gestartet werden - also eine ganz normale case-abfrage, oder? und was das vi dann kann also ob es jetzt subvi ist, ob dessen frontpanel angezeigt wird und es zur dateneingabe dient oder permanent parallel (ob im hintergrund oder cniht) laeuft ist doch egal, oder? naja, ich glaub ich kapiers nciht, sry
ich will aus einem VI heraus ein anderes VI starten, was nicht in dem ersten integriert ist. Das erste VI kennt nur den Pfad des zweiten! Beide sollen dann miteinander kommunizieren, was ich aber gerade in einem anderen Thema diskutier. In demselben hab ich das auch nochmal ein bischen praktisch erläutert: http://www.LabVIEWforum.de/index.php?showt...amp;#entry65888
Klang an sich einfach, aber beim Programmieren eines Tests für das andere Problem fiel mir auf, ich weiß nicht einmal, wie das geht... ;p
Ich hoffe, mir kann jemand helfen.
Danke!
Gruß, Maxwell
Hallo, bitte keine Doppelpostings der (im Prinzip) selben Frage. (s. LVF-Regeln).
Themen zusammengefasst und Titel editiert.
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!
' schrieb:ich will aus einem VI heraus ein anderes VI starten, was nicht in dem ersten integriert ist. Das erste VI kennt nur den Pfad des zweiten!
Geht über VI-Server.
Da wird der Dateiname auf ein CreateReferenz-Element gegeben, das eine Referenz auf das VI liefert. Über die Referenz kann das VI dann gestartet werden.
Zitat:Beide sollen dann miteinander kommunizieren,
Queues und Melder.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).