Hallo LV-Foristen,
ich habe ein Problem.
Mein Chef fand es passend
, mich an ein Laborgruppen-Projekt zu setzen, welches seit 6 Jahren nicht in Gang zu kriegen ist, es geht um eine "
Filmwaage". Kosten hat sie schon genug verschlungen (daher auch nur LV 7.1), 4 Diplomanden haben sich, mit mehr oder weniger logischem Verständnis, daran versucht, nun soll ich sie zum Laufen kriegen.
Das Ding ist komplett selbst gebaut, was dann "leider" auch die komplette Programmierung in LV beinhaltet.
Ärgerlicherweise beschränkten sich meine LV-Erfahrungen auf die Programmierung einer Steuer- und Auswertesoftware eines Spektrographen vor 2 Jahren, nur über einen Tag. Daher kenn ich mich einfach nicht mit LV aus.
Und ich bin hier im Haus noch derjenige, der sich damit am "meisten" auskennt.
Aber genug von meiner Inkompetenz, kommen wir zu meinem Problem:
Ich tüftel zur Zeit an der Motorsteuerung, simples nach links oder rechts fahren, dabei in kleinen Intervallen @1s Aufnahme von insg. 4-5 Messparametern. Dabei soll die Motorsteuerung möglichst NICHT von der Aufnahme der Daten beeinflusst werden.
Ich könnte natürlich ganz simpel "1cm fahren, Daten aufnehmen, 1cm fahren, Daten aufnehmen ..." programmieren, so war es auch ganz am Anfang (funktionierte dennoch nicht
).
Das Problem dabei ist die Bewegung der Barriere (durch den Motor getrieben), welche sich teilweise in Flüssigkeit befindet. Eine solche "step-by-step" Lösung führt zu starken Stoßwellen, welche wiederum die Probe massiv beeinflussen.
Also habe ich mich, nach langer und hoffentlich ausgiebiger Lektüre verschiedener Quellen, auch dieses Forums, an die "Erzeuger-Verbraucher-Schleife" rangemacht. Auf einmal kann ich mit minimaler Verzögerung in 50-Schritt-Blöcken (damit alle 50 Schritte die Stopbedingungen geprüft werden) fahren und alle 4 Blöcke die Motorposition aus der Erzeuger-Schleife in die Verbraucher-Schleife geben. Dabei läuft die Erzeuger-Schleife weiter, auch wenn der Verbraucher noch am arbeiten ist. Nahezu paralleler Ablauf, juhu!
Dabei gibt es aber zwei Probleme:
1. Wenn ich die Verbraucher-Schleife zu voll packe (mit noch mehr Graphen, noch mehr Datenaufnahmen) oder den Waittimer in der Verbraucherschleife (zur Beeinflussung des Ausgabe-Intervalls) zu hoch setze (zB testweise 5000ms), läuft zwar der Erzeuger normal weiter, jedoch "streikt" die Verbraucherschleife irgendwann (meist gleich ab dem ersten Durchlauf).
D.h. es werden ständig neue Parameter in die Queue gesetzt, die Verbraucher-Schleife holt sich jedoch keine raus, obwohl sie zZ GARnichts tut. Und es ist nicht so, dass sie mal einen Durchlauf "auslässt", sie hört dann komplett auf zu arbeiten. Warum und wie kann man das beheben?
2. Man hört ganz deutlich, dass die Motorsteuerung kurz aussetzt, wenn die Verbraucher-Schleife arbeitet. Das ist aus oben genannten Gründen unschön. Dass es nicht an der Übergabe des Parameters in die Queue in der Erzeuger-Schleife liegt, kann ich schnell sehen, wenn ich die gesamte Datenauswertung (4 Graphen abbilden, Messwerte in 2 Dateien schreiben) aus dem Verbraucher rauslösche - dann funktioniert das nämlich "reibungslos". Ich kenne das Problem von (alten?) LabView(-Versionen?), dass das Programm
überhaupt nicht damit umgehen kann, wenn nebenbei noch was anderes passiert (Mausclick ahoi) und dann sofort hakt. Ist das hier auch der Grund? Hakt die Motorsteuerung, weil die Verbraucherschleife nun auch Rechenleistung benötigt? Wenn ja, kann man das beheben? Wenn nein, wie kann man das beheben?
Ich habe mal sowohl Screenshots als auch ein Beispiel-VI (Queue_Template2.vi) samt SubVIs angehängt (die letzten 2 SubVIs folgen im nächsten Post).
Ich bitte daher um Hilfe (auch abseits der genannten Probleme, bin immer dafür zu haben)
Danke und mit freundlichen Grüßen,
Niels
Anhänge Teil 2