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!
08.06.2021, 11:46 (Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2021 11:56 von Rumo.)
ich muss im Rahmen meiner Arbeit als völliger Neuling ein vorhandenes LabView-Programm umschreiben. Das ursprüngliche Programm bestand aus einem großen DAC mit drei Ausgängen und einem Eingang, die intern über Channel angesprochen wurden und jeweils eine Achse einer Magnetsteuerung kontrolliert haben. Mein Aufbau besteht nun aus drei einzelnen DACs, die jeweils einen Ausgang und einen Eingang besitzen. Die Unterscheidung der DACs findet hier über ihren VISA ressource name statt (beziehungsweise deren COM-Port).
Da ich sehr wenig Erfahrung mit LabView habe und unmöglich das gesamte Programm umschreiben kann, habe ich die Hoffnung, dass ich nur die Sub-VIs für die Initialisierung der DACs und die Magnetsteuerung anpassen kann. Allerdings habe ich keine Idee wie ich den Übergang von einem großen DAC mit drei Channels zu drei einzelnen DACs realisieren soll. Insbesondere weil die VIs für mich als Neuling sehr ineinander verschachtelt erscheinen. Ich gehe davon aus, dass ich dem Programm relativ simpel zu verstehen gehen kann, einfach den richtigen COM-Port anzusprechen anstatt eines Channels?
Mit freundlichen Grüßen
Rumo
P.S.: Im Anhang sind die relevanten Sub-VIs für das Initialisieren und Einstellen einer Spannung und ein Test-Programm. Die Sub-VIs sind bei mir nochmals in einer Bibliothek zusammengefasst, falls das weiterhilft.
P.P.S.: Eventuell wäre es einfacher, wenn ich den Ordner teilen würde: https://1drv.ms/u/s!AkCRhhRXjvqHgoMntK1f...Q?e=Z2HfVZ
Kleiner Nachtrag: Falls es für die Fragestellung relevant ist, könnte ich auch den Ordner des Gesamtprogramms freigeben. Das Programm ist ziemlich komplex, daher bin ich mir nicht sicher, ob dies zielführend wäre.
Anzeige
08.06.2021, 11:56 (Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2021 12:02 von GerdW.)
Zitat:P.S.: Im Anhang sind die relevanten Sub-VIs für das Initialisieren und Einstellen einer Spannung und ein Test-Programm. Die Sub-VIs sind bei mir nochmals in einer Bibliothek zusammengefasst, falls das weiterhilft.
P.P.S.: Eventuell wäre es einfacher, wenn ich den Ordner teilen würde: https://1drv.ms/u/s!AkCRhhRXjvqHgoMntK1f...Q?e=Z2HfVZ
Externe Links sind immer problematisch, z.T. auch wegen Zugriffsrechten aus Firmennetzwerken heraus… (Dieser Link funktioniert z.B. bei mir hier nicht.)
Beste Lösung: alles in ein ZIP-Archiv packen und dieses hier anhängen!
Zitat:Da ich sehr wenig Erfahrung mit LabView habe und unmöglich das gesamte Programm umschreiben kann, habe ich die Hoffnung, dass ich nur die Sub-VIs für die Initialisierung der DACs und die Magnetsteuerung anpassen kann. Allerdings habe ich keine Idee wie ich den Übergang von einem großen DAC mit drei Channels zu drei einzelnen DACs realisieren soll. Insbesondere weil die VIs für mich als Neuling sehr ineinander verschachtelt erscheinen.
Dann empfehle ich mal einen aufmerksamen Blick in meine Signatur…
Deine VIs zeigen sehr deutlich, dass du bzw. dein Vorgänger wenig von LabVIEW wissen. Da sind "ungünstige" bis "absolut fehlerträchtige" Konstrukte enthalten!
Da solltest du dringend etwas dran verbessern!
Beispiel:
Vergleiche das mal mit dem Zustand dieses VIs vor meinen Anpassungen!
Zitat:Ich gehe davon aus, dass ich dem Programm relativ simpel zu verstehen gehen kann, einfach den richtigen COM-Port anzusprechen anstatt eines Channels?
Die Antwort lautet: Ja!
Muss man halt etwas programmieren…
Vielen Dank für den Hinweis, habe die Ansteuerung der DACs und das Gesamtprogramm mal für euch archiviert. Das Gesamtprogramm startet über 3DCryostat_V0d. Ich hoffe man kann das Program einsehen, da ich es auf Grund der Größe in drei Archive splitten musste.
(08.06.2021 11:56 )GerdW schrieb: Deine VIs zeigen sehr deutlich, dass du bzw. dein Vorgänger wenig von LabVIEW wissen. Da sind "ungünstige" bis "absolut fehlerträchtige" Konstrukte enthalten!
Da solltest du dringend etwas dran verbessern!
Die VIs sind von meinem Vorgänger. Meinem Chef zu Folge kann ich in dem Programm über das Anpassen eines Sub-VIs alles ganz schnell und leicht ändern. Nachdem ich mir einige Tutorials angesehen und mich belesen haben, empfinde ich mein vorliegendes Programm allerdings als extrem verwirrend. Insbesondere habe ich das Gefühl, dass alles ineinander verschachtelt ist und ich durch die Änderung eines VIs alle nachfolgenden VIs ebenfalls verändere.
Dein gezeigtes Beispiel empfinde ich als deutlich besser zu verstehen. Mein Problem ist allerdings: Die lokalen Variablen "Channel" und "Coil X/Y/Z" tauchen überall im Programm völlig verstreut auf. Daher würde ich versuchen aus "Channel" einfach "COM-Port 3/4/5" zu machen, allerdings weiß ich nicht wie ich einen Visa ressource name zu einer numerischen Eingabe transformieren kann.
Zitat:Dein gezeigtes Beispiel empfinde ich als deutlich besser zu verstehen. Mein Problem ist allerdings: Die lokalen Variablen "Channel" und "Coil X/Y/Z" tauchen überall im Programm völlig verstreut auf. Daher würde ich versuchen aus "Channel" einfach "COM-Port 3/4/5" zu machen, allerdings weiß ich nicht wie ich einen Visa ressource name zu einer numerischen Eingabe transformieren kann.
Lokale Variablen einfach durch Draht (und Schieberegister) ersetzen!
Wenn deine "DACs" weiterhin per serieller Schnittstelle verbunden sind, verwendest du bitte auch weiterhin die VISA-Referenzen - und nicht etwas "numerische Inputs"…
(08.06.2021 12:50 )GerdW schrieb: Lokale Variablen einfach durch Draht (und Schieberegister) ersetzen!
Wenn deine "DACs" weiterhin per serieller Schnittstelle verbunden sind, verwendest du bitte auch weiterhin die VISA-Referenzen - und nicht etwas "numerische Inputs"
Ich bin mir gerade nicht sicher, wie ich von lokalen Variablen auf Schieberegister wechseln soll.
Mein bisheriger Ansatz war der folgende. Zuerst initialisiere (siehe Init.png) alle DACs und lasse mich die dazugehörigen COM-Ports auslesen. Daraufhin steuere ich mit Hilfe des VIs "MAX5134setvoltage" (siehe Setvoltage.png) die DACs an. Dieses VI wird auch vom Hauptprogramm immer wieder aufgerufen, um die Spannung des DACs einzustellen. Da ich jedoch keine Channel als lokale Variable mehr habe, kann das VI "UART_send_command" (siehe UART_send.png) diese auch nicht mehr auslesen.
Daher möchte ich dem Programm vermitteln, dass Channel 0 = COM3 = DAC der X-Achse ist. Äquivalent zu Channel 1 und 2 mit COM4 und COM5. In dem VI "UART_send_command" ist der "Channel" allerdings durch "command" ersetzt worden, der sich aus der Nummre des Channel addiert mit 20 ergibt (weshalb erschließt sich mir hier zum Beispiel nicht?).
Wenn ich jetzt allerdings die lokale Variable "Channel" oder "command" ersetze, dann taucht das Problem auf, dass in meinem Hauptprogramm dutzende Verbindungen kaputt gehen und ich quasi alles händisch und einzeln anpassen muss. Wäre es nicht einfacher, dem Programm einfach zu sagen "Wenn Command=20, dann COM3", "Wenn Command=21, dann COM4", "Wenn Command=22, dann COM5"?
08.06.2021, 13:52 (Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2021 14:07 von GerdW.)
Zitat:Ich bin mir gerade nicht sicher, wie ich von lokalen Variablen auf Schieberegister wechseln soll.
Das sind die oft erwähnten LabVIEW-Basics, die du lernen solltest. Siehe meine Signatur…
So sieht das Ersetzen von lokalen Variablen durch Draht und Schieberegister aus:
Zitat:Daher möchte ich dem Programm vermitteln, dass Channel 0 = COM3 = DAC der X-Achse ist. Äquivalent zu Channel 1 und 2 mit COM4 und COM5. In dem VI "UART_send_command" ist der "Channel" allerdings durch "command" ersetzt worden, der sich aus der Nummre des Channel addiert mit 20 ergibt (weshalb erschließt sich mir hier zum Beispiel nicht?).
Woher dieses "+20" kommt, müsste im Manual zu dem Gerät stehen, welches du über die serielle Schnittstelle ansteuerst!
Zitat:Wenn ich jetzt allerdings die lokale Variable "Channel" oder "command" ersetze, dann taucht das Problem auf, dass in meinem Hauptprogramm dutzende Verbindungen kaputt gehen und ich quasi alles händisch und einzeln anpassen muss. Wäre es nicht einfacher, dem Programm einfach zu sagen "Wenn Command=20, dann COM3", "Wenn Command=21, dann COM4", "Wenn Command=22, dann COM5"?
Wenn das 3 identische Geräte sind, die du da ansteuern willst, dann benötigst du genau ein VI. Dieses VI bekommt als Inputs die VISA-Reference (also COM3/4/5) und den nötigen Parameter (der einzustellende Wert). Dieses VI rufst du dann in deinem MainVI dreimal parallel auf: mit jeweils einem anderen COM-Port als Input…
Und ja, wenn man VIs editiert, kann es zu "broken wires" im HauptVI kommen. Die korrigiert man dann eben auch…
P.S.: Wie schon erwähnt, sollten alle VIs gründlich überarbeitet werden. Dazu gehört z.B. auch, das man die seriellen Ports nicht andauernd öffnet und wieder schließt…
Vielen Dank erstmal für deine Antwort! Leider habe ich nicht die Zeit die ganzen VIs zu überarbeiten und konnte mir gerade einmal die Grundlagen zu LabVIEW ansehen. Das Hauptprogramm soll Ende der Woche laufen, damit ich mit meinen Messungen beginnen soll. Da ich davor noch nicht mit LabVIEW gearbeitet habe, verzweifle ich momentan etwas daran, das Programm überhaupt zu verstehen, da ich es nicht selbst programmiert habe.
Ich werden deinen Ansatz aber mal testen, vielen Dank.
08.06.2021, 15:34 (Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2021 15:35 von GerdW.)
Zitat:Leider habe ich nicht die Zeit die ganzen VIs zu überarbeiten und konnte mir gerade einmal die Grundlagen zu LabVIEW ansehen. Das Hauptprogramm soll Ende der Woche laufen,
Meinem Chef zu Folge kann ich in dem Programm über das Anpassen eines Sub-VIs alles ganz schnell und leicht ändern.
im Rahmen meiner Arbeit als völliger Neuling ein vorhandenes LabView-Programm umschreiben.
Das ist ja mal wieder die ganz klassische Vorgehensweise: man nehme einen absoluten LabVIEW-Anfänger (nichts gegen dich), gebe ihm ein (schlecht programmiertes) Konvolut und setze ihm dann klare (natürlich viel zu kurze) Fristen…
Vielleicht sollte dein Chef statt dir "ganz schnell und leicht" das Programm anpassen, damit du dann Zeit für die Grundlagenkurse hast!? Sind ja nur 1-2 AT für Core1 und evtl. noch etwas Core2…
Ganz ehrlich: dein Chef könnte viel Geld sparen, wenn er dich erstmal 2 AT lang die Einsteigerkurse durchgehen lassen würde. Es sei denn, er rechnet dich als "EDA-Kosten" ab…
Ich möchte mich nochmal für die Rücksprachen mit dir bedanken. Hatte heute ein Gespräch mit meinem Chef und ihm die Problematik mit dem Programm erklärt. Ich soll das Programm jetzt neu aufsetzen und für meine Zwecke anpassen. Habe dafür auch mehr Zeit bekommen. Werde mich heute dann nochmal mit den Grundlagen auseinandersetzen und sehen, welche VIs ich noch verwenden kann.