22.12.2008, 15:47
22.12.2008, 16:12
Beispiele zu Meldern (oder engl. Notifiers) findest du im NI-Examplefinder oder hier im Forum.
Und wenn du sagst, du findest dein VI so übersichtlicher, dann versuche Folgendes in Zukunft zu beachten:
-von links nach rechts programmieren.
-solange wie möglich gerade Verbindungen legen, so wenig wie möglich um die Ecke und überkreuz.
-deine nebeneinanderliegenden Schleifen mit lokalen Variablen können zu Race Condition führen - nicht gut
-dein VI braucht 100% CPU Last (auch auf Mehrprozessor-System), da du deine Schleifen (auch noch mehrere parallel) ohne Verzögerung laufen lässt. Brauchst du das wirklich?
Ansonsten, so wie du das aufgebaut hast, widerspricht es dem Datenfluss-Konzept von LabVIEW. Und sauber beenden lässt sich dieses VI auch nicht.
Gruß, Jens
Und wenn du sagst, du findest dein VI so übersichtlicher, dann versuche Folgendes in Zukunft zu beachten:
-von links nach rechts programmieren.
-solange wie möglich gerade Verbindungen legen, so wenig wie möglich um die Ecke und überkreuz.
-deine nebeneinanderliegenden Schleifen mit lokalen Variablen können zu Race Condition führen - nicht gut
-dein VI braucht 100% CPU Last (auch auf Mehrprozessor-System), da du deine Schleifen (auch noch mehrere parallel) ohne Verzögerung laufen lässt. Brauchst du das wirklich?
Ansonsten, so wie du das aufgebaut hast, widerspricht es dem Datenfluss-Konzept von LabVIEW. Und sauber beenden lässt sich dieses VI auch nicht.
Gruß, Jens
23.12.2008, 09:47
' schrieb:...
-deine nebeneinanderliegenden Schleifen mit lokalen Variablen können zu Race Condition führen - nicht gut
...
Ansonsten, so wie du das aufgebaut hast, widerspricht es dem Datenfluss-Konzept von LabVIEW. ...
Gruß, Jens
Hallo Jens,
danke für die Anregung. Leider bin ich in LabVIEW noch nicht so fit. Ich muss halt "einfach" nur meine Anlage steuern und dazu wird hier immer LabVIEW genutzt. Leider habe ich auch nicht die Zeit mir auf der Arbeit ganz in Ruhe mal ein Buch durchzulesen. Ist halt alles nicht optimal. Daher wäre ich dir dankbar wenn Du Deine Anmerkungen vlt. etwas ausführlicher darstellen könntest, oder mir einen Verweis mitteiltest, wo ich dieses in "angemessenem Aufwand" nachlesen könnte.
Vielen Dank schonmal und ein frohes Fest.
Gruß Lex
23.12.2008, 14:50
Dein Arbeitgeber kann Dich doch auf Lehrgänge schicken. Dann lernst Du es von Grund auf richtig. Das ist die normale Vorgehensweise. Jetzt in Dich investieren und nachher von Dir profitieren. So sehe ich das. Bei Studenten ist das allerdings was anderes.......
Gruß Markus
Gruß Markus
' schrieb:Hallo Jens,
danke für die Anregung. Leider bin ich in LabVIEW noch nicht so fit. Ich muss halt "einfach" nur meine Anlage steuern und dazu wird hier immer LabVIEW genutzt. Leider habe ich auch nicht die Zeit mir auf der Arbeit ganz in Ruhe mal ein Buch durchzulesen. Ist halt alles nicht optimal. Daher wäre ich dir dankbar wenn Du Deine Anmerkungen vlt. etwas ausführlicher darstellen könntest, oder mir einen Verweis mitteiltest, wo ich dieses in "angemessenem Aufwand" nachlesen könnte.
Vielen Dank schonmal und ein frohes Fest.
Gruß Lex
23.12.2008, 15:03
' schrieb:Dein Arbeitgeber kann Dich doch auf Lehrgänge schicken. Dann lernst Du es von Grund auf richtig. Das ist die normale Vorgehensweise. Jetzt in Dich investieren und nachher von Dir profitieren. So sehe ich das. Bei Studenten ist das allerdings was anderes.......
Gruß Markus
Für mich ist das nur Beiwerk. Mein Arbeitgeber schickt mich schon genug durch die Welt. (Im Mai z.B. auf einen Parabelflug... dafür sollte die Mess- und Regelungstechnik auch stehen.)
Viele Grüße
Dipl.-Ing. "Lex"
PS: Antworten sind toll, vielen Dank dafür. Aber auch für alle späteren Leser sind Antworten auf die Fragen noch viel hilfreicher als persönliche Meinungen zu Fortbildungsmaßnahmen...
23.12.2008, 15:24
' schrieb:PS: Antworten sind toll, vielen Dank dafür. Aber auch für alle späteren Leser sind Antworten auf die Fragen noch viel hilfreicher als persönliche Meinungen zu Fortbildungsmaßnahmen...
Das Problem ist nur - ohne dir hier nun Böses zu wollen - dass deine Fragen sehr grundlegende Themen betreffen, die nun mal nicht in 1-2 Sätzen erklärt werden können. Zusätzlich stellst du die Forderung, dass es nicht so viel Zeit kosten darf...
Auch wenn LabVIEW einen verhältnissmäßig einfach Einstieg und frühe Erfolge anbietet, so bleibt es doch eine komplexe Programmiersprache, die sich zusätzlich noch sehr anders als textbasierte Sprache verhält. Daher macht der Hinweis auf eine grundelegende Einführung sehr wohl Sinn.
Ansonsten wird es wohl doch eher bei Tips wie denen von Jens, eventuell noch unterlegt durch Links zu Tutorials oder Threads wie zu Race Conditions: http://www.LabVIEWportal.eu/viewtopic.php?f=13&t=329 bleiben.
Jens Tips zur Verkabelung sind selbsterklärend.
Zur Prozessorauslastung: Jede Schleife sollte ein "Wait" Element enthalten, dass zumindest ein Wait von 1ms enthält um den Prozessor zu entlasten.
Grüße und frohe Weihnachten.
23.12.2008, 15:44
Tasking Library:
http://www.LabVIEWforum.de/Tasking-Library-t11433.html
wäre vielleicht nicht verkehrt. Mein Programmierprinzip ist zum Beispiel: pro Aufgabe (Task) eine parallele Schleife. Zur Kommunikation zwischen den Schleifen - Queues, Notifiers, User Events oder auch TCP/IP. Sehr übersichtlich und leicht erweiterbar.
http://www.LabVIEWforum.de/Tasking-Library-t11433.html
wäre vielleicht nicht verkehrt. Mein Programmierprinzip ist zum Beispiel: pro Aufgabe (Task) eine parallele Schleife. Zur Kommunikation zwischen den Schleifen - Queues, Notifiers, User Events oder auch TCP/IP. Sehr übersichtlich und leicht erweiterbar.
23.12.2008, 16:13
Antworten auf die Fragen würdest Du ja bekommen, wenn man wissen würde was Du mit Deiner (meiner Meinung nach) verwirrenden, unkonformen Programmierweise bezwecken möchtest.... -_-
![Bahn Bahn](images/smilies/lvfsmilies/fun/bahn.gif)
Gruß Markus
![Bahn Bahn](images/smilies/lvfsmilies/fun/bahn.gif)
Gruß Markus
' schrieb:[...]sind Antworten auf die Fragen noch viel hilfreicher[...]
29.12.2008, 09:23
Hallo,
erst nochmal ein frohes Weihnachtsfest. Wie es aus sieht habe ich mit meinem Nachsatz dem ein oder anderen wohl etwas auf die Füße getreten. Das war nicht meine Absicht. Was ich eigentlich damit sagen wollte, ist, dass auch wenn Ihr, die dieses Thema viel besser beherschen als ich, vielleicht merkt, dass bei jemandem der eine Frage stellt Grundlagenwissen fehlt und ihr im nicht mit einer kurzen Antwort im Forum weiterhelfen könnt, ein Verweis auf ein Kapitel in einem guten Buch oder in Link dem Betreffenden mehr hilft als ihn nur auf die richtige Tatsache aufmerksam zu machen, dass ihm Grundlagenwissen fehlt. Vielleicht versuchen wir alle in diesem Sinne sowohl unsere Fragen als auch Antworten so zu gestallten, dass sie dem, der sie ließt, weiterhelfen.
So genug der Vorrede - ich versuche dann mich nochmal genauer auszudrücken was mein Problem ist:
Meine Aufgabe :
Ich möcht ein SubVi programmieren. Dieses SubVi möchte ich in beliebe Programme zur Regelung von Temperaturen einsetzten.
Das SubVi soll einen TemperaturSollwert und -Istwert als Eingang haben. Da damit ein Heizer über ein Relai gesteuert werden soll, soll der Ausgang "An oder Aus" sein. Über eine Pulsweitenmodulation soll die Heizleitung geregelt werden. Die Regelung soll mittels eines PID Reglers stattfinden. Das Ausgangssignal des PID Reglers soll in eine 0 - 100% Heizleistungsskala umgerechnet werden. Dazu benötige ich noch zwei Eingänge. "Min" "Max". Min = Ausgangswert 0% - Max = Ausgansgwert 100% Das SubVi soll mit einer eigenen Geschwindigkeit läufen. Unabhängig ob das Hauptprogramm (wird auch eine Schleife sein) schneller oder langsamer ist.
Anhand eurer Anmerkungen habe ich meine bisherige Programmierung etwas geändert. Untern angehängt.
Mein Problem:
ist jetzt folgendes. Ich kann dieses VI als SubVi in ein anderes Programm einbauen. Wenn ich dann im anderen Programm aber einen Eingabewert ändere (z.B. Sollwert) änder dieser sich nicht im SubVi. Mit einem Melder habe ich es bisher noch nicht hinbekommen, da sich dann die Schleife nur ausgeführt hat, wenn ich z.B. den Sollwert geändert habe.
Ich hoffe ich konnte mich mit meinem nicht so umfangreichen Wissen so ausdrücken, dass es jetzt etwas verständlicher ist.
Viele Grüße
Lex
Version 8.5 (Linux)
erst nochmal ein frohes Weihnachtsfest. Wie es aus sieht habe ich mit meinem Nachsatz dem ein oder anderen wohl etwas auf die Füße getreten. Das war nicht meine Absicht. Was ich eigentlich damit sagen wollte, ist, dass auch wenn Ihr, die dieses Thema viel besser beherschen als ich, vielleicht merkt, dass bei jemandem der eine Frage stellt Grundlagenwissen fehlt und ihr im nicht mit einer kurzen Antwort im Forum weiterhelfen könnt, ein Verweis auf ein Kapitel in einem guten Buch oder in Link dem Betreffenden mehr hilft als ihn nur auf die richtige Tatsache aufmerksam zu machen, dass ihm Grundlagenwissen fehlt. Vielleicht versuchen wir alle in diesem Sinne sowohl unsere Fragen als auch Antworten so zu gestallten, dass sie dem, der sie ließt, weiterhelfen.
So genug der Vorrede - ich versuche dann mich nochmal genauer auszudrücken was mein Problem ist:
Meine Aufgabe :
Ich möcht ein SubVi programmieren. Dieses SubVi möchte ich in beliebe Programme zur Regelung von Temperaturen einsetzten.
Das SubVi soll einen TemperaturSollwert und -Istwert als Eingang haben. Da damit ein Heizer über ein Relai gesteuert werden soll, soll der Ausgang "An oder Aus" sein. Über eine Pulsweitenmodulation soll die Heizleitung geregelt werden. Die Regelung soll mittels eines PID Reglers stattfinden. Das Ausgangssignal des PID Reglers soll in eine 0 - 100% Heizleistungsskala umgerechnet werden. Dazu benötige ich noch zwei Eingänge. "Min" "Max". Min = Ausgangswert 0% - Max = Ausgansgwert 100% Das SubVi soll mit einer eigenen Geschwindigkeit läufen. Unabhängig ob das Hauptprogramm (wird auch eine Schleife sein) schneller oder langsamer ist.
Anhand eurer Anmerkungen habe ich meine bisherige Programmierung etwas geändert. Untern angehängt.
Mein Problem:
ist jetzt folgendes. Ich kann dieses VI als SubVi in ein anderes Programm einbauen. Wenn ich dann im anderen Programm aber einen Eingabewert ändere (z.B. Sollwert) änder dieser sich nicht im SubVi. Mit einem Melder habe ich es bisher noch nicht hinbekommen, da sich dann die Schleife nur ausgeführt hat, wenn ich z.B. den Sollwert geändert habe.
Ich hoffe ich konnte mich mit meinem nicht so umfangreichen Wissen so ausdrücken, dass es jetzt etwas verständlicher ist.
Viele Grüße
Lex
Version 8.5 (Linux)
29.12.2008, 10:30
Hallo,
wenn Du Dein SubVI aufrufst wird es nie beendet, da die Abbruchbedingungen für die Whileschleifen nie erfüllt sind.
Wenn Du im SubVI eine / bzw. mehrere Whileschleifen hast, dann sollten sie auch abbrechbar sein.
Die lokalen Variablen von Tempwert, Sollwert, min und max brauchst Du nicht. Da kannst Du Deine Frontpanelelemente direkt anschließen. Wieso Du für Waveformchart eine lokale Variable verwendest weiß ich auch noch nicht so ganz,.....
Nichtsdestotrotz ist hier mal ein Bsp., wie vom Hauptprogramm aus ein SubVI aufgerufen werden kann und Daten untereinander ausgetauscht werden. Schau's Dir einfach mal an.
[attachment=15985]
![Lv80_img Lv80_img](images/smilies/lvfsmilies/lv_icons/lv80_img.jpg)
[attachment=15984]
![Lv80_img Lv80_img](images/smilies/lvfsmilies/lv_icons/lv80_img.jpg)
Gruß Markus
wenn Du Dein SubVI aufrufst wird es nie beendet, da die Abbruchbedingungen für die Whileschleifen nie erfüllt sind.
Wenn Du im SubVI eine / bzw. mehrere Whileschleifen hast, dann sollten sie auch abbrechbar sein.
Die lokalen Variablen von Tempwert, Sollwert, min und max brauchst Du nicht. Da kannst Du Deine Frontpanelelemente direkt anschließen. Wieso Du für Waveformchart eine lokale Variable verwendest weiß ich auch noch nicht so ganz,.....
Nichtsdestotrotz ist hier mal ein Bsp., wie vom Hauptprogramm aus ein SubVI aufgerufen werden kann und Daten untereinander ausgetauscht werden. Schau's Dir einfach mal an.
[attachment=15985]
![Lv80_img Lv80_img](images/smilies/lvfsmilies/lv_icons/lv80_img.jpg)
[attachment=15984]
![Lv80_img Lv80_img](images/smilies/lvfsmilies/lv_icons/lv80_img.jpg)
Gruß Markus