LabVIEWForum.de - Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten

LabVIEWForum.de

Normale Version: Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Heyho!

Ich hab's mal ins allgemeine Forum und nicht DAQ gepackt, weil man "sowas" ja doch recht universell einsetzen kann - nicht, dass der nächste Suchende den Thread nicht findet...Smile

Ja, wie schon angedeutet möchte ich so etwas wie eine Kennlinie speichern. Genau geht es um 6 Spannungen, welche Pt-100 (leider schon analog verdreht, daher RTD-VI nicht nutzbar) und vier Spannungen, welche U's und I's zweier Heizungen darstellen. Für Temperatur und Leistung habe ich Referenzen, entsprechende Werte zuzuordnen dürfte also kein Problem sein.
Aber wie macht man so etwas am elegantesten? Am liebsten würde ich eine große Maske haben, wo man die zu lesenden Kanäle markiert, irgendwo die Referenz einträgt und per Button die jeweiligen Messwerte mit zugehöriger Referenz in eine Datei speichert. Diese wird entsprechend bei jedem Programmstart eingelesen, sagen wir 5. Ordnung polynomisch interpoliert und sollte so zu recht präzisen Werten über den gesamten Bereich führen.

Mein Ansatz war, pro Kanal ein Array zu füllen (oder eben nicht, wenn nicht markiert) und im Anschluss alles mit separatem Button in eine Datei zu schreiben. Dies hat aber leider nur zu Frust und keinem brauchbaren Ergebnis geführt, so dass ich jetzt alle Hoffnung auf euch setze. Vielleicht hat jemand ja schonmal ein ähnliches Problem gehabt?!

Viele Grüße,
Dennis

PS: LV2009/SP1 und alle Addons verfügbar.
Wie wäre es mit einer Datenbank?
Toolkits dazu hast Du ja, wie Du schreibst.
Und bitte Profil_ergaenzen, wenn Du LabVIEW 2009 hast.

Gruß Markus
Heyho!

Ich wollte gerade fragen mit welchem Toolkit aber wenn ich recht entsinne hat nur eines davon MySQL installiert. Wäre das aber nicht etwas mit Kanonen auf Spatzen geschossen? Ich meine, es geht um 10 Kanäle mit jeweils nicht mehr als 10 X/Y Koordinaten. Da der Rechner u.A. auch sekündlich eine FFT machen muß hätt' ich doch Sorge, dass er von einem SQL im Hintergrund gebremst wird.

Gruß,
Dennis
Okaaay... Latein am Ende und ich muss euch mal wieder nerven. Hoffentlich habt ihr zumindest noch 1..2 Tipps parat damit es weiter gehen kann. Die Arbeit mach' ich gern selbst aber wie gesagt: Die Ideenflasche ist leider leerSad

Vorweg: Ich hab' da vorhin was gefunden, was in die richtige Richtung geht:
http://zone.ni.com/devzone/cda/epd/p/id/3867
...Leider ist mein LV-Wissen zu begrenzt, um es in akzeptabler Zeit zu durchschauen und zu modifizieren. Alles was ich weiß ist, dass sie es dort wohl auch mit Arrays machen und das Ganze zum Schluss als Tabelle schreiben. So wäre ich es auch angegangen bzw hatte es ja schon im ersten Versuch, also nochmal auf ein Neues:

Das VI liest alle 6 Kanäle und stellt sie dar. Der "Save" Knopf aktiviert dann einen case, der das gerade anliegende 1D-Array an ein 2D-Array anhängt, die grüne LED als Bestätigung kurz aufblinken lässt und den Save-Knopf wieder auf 0 setzt. Mein aktuelles Problem ist nun der false-case, der ja innen auch nach Anschluss verlangt. Was hänge ich dort dran? Oder besser das ganze in eine Schleife mit Schieberegister verpacken und dort drin per case das Array ergänzen einfach nur durchschleifen?! Nee - dann wäre das case-Problem gelöst aber die innere while-Schleife blockiert die äußere... Könnt ihr euch denken, dass ich langsam verzweifle, oderWink

Viele Grüße,
Dennis

LV9
Guten Morgen Dennis

Wieso verwendest du nicht einfach ein Schieberegister in deiner akutellen Schleife?
Du brauchst ja eh etwas in der Richtung um dein Array zu füllen, wieso nicht auch gleich für den False-Case verwenden?Wink

Hab mal den Feedback-Node durch ein Schieberegister ersetzt.

LabVIEW 2009:

[attachment=30163]

Hoffe das hilft dir weiter.
Gruss Marc
Hey Marc,

*batz* wie war das gleich mit dem Wald und den Bäumen...Wink. Hast vollkommen recht - das mit while in 'ner while wäre doppelt gemoppelt und überflüssig. Ich muss jetzt noch ein bißchen am Theorieteil der Diss feilen und werde gleich die nächste Pause nutzen, um mit deinem Tipp weiter zu basteln, bis das nächste Problem auftaucht oder die Kalibrierung endlich gelöst ist. Das 2D-Array abzulegen, anderswo wieder aufzurufen und die Kurven anzufitten kann ja sooo schwer nicht sein. Das meiste hab' ich zwar noch nie gebraucht aber die Tools dafür sind eigentlich alle bekannt.

...Nur zum Verständnis noch zwei Fragen:

- Ein Schieberegister schiebt immer nur von rechts nach links, damit die Daten für den nächsten Durchlauf dort anliegen, richtig? Ein Tunnel aus einer While produziert ja selbst schon ein Array - nicht, dass hier auch so etwas passiert.

- Indizieren mit leerem Array ist richtig, weil ist das ja erst in der Schleife mit Daten gefüllt wird - auch richtig so? In der Schleife wird dann immer ein Array-Satz von Daten zusammengesetzt und diese wiederum auf Knopfdruck in eine weitere Dimension aneinander gereiht. Hinten müsste also so etwas wie eine Tabelle raus kommen - ob die Referenzwerte nun in der ersten Zeile oder Spalte stehen übersteigt meine Erfahrung. Im Zweifel gibt's aber ja nette Tools, um das komplette Array zu drehen...

Viele Grüße,
Dennis
Hier mal kleine Anregung zum Lesen/Speichern der Sensorkoeffizienten (ausbaufähig).
lv90 [attachment=30236]
Anmerkung zu Deinem VI: Bei den Diagr. gibt es Rechtsklick/Sichtbare Elemente/Zahlenanzeige. Die könnten die anderen Zahlenanzeigen ersetzen.
Zur Approximation der PT100 Kennlinie werden normalerweise im Höchstfall 4 Koeffizienten verwendet, wabei sich das auf den Widerstandverlauf bezieht. (s. Wikipedia) Du glaubst doch nicht etwa, daß Du mit 10 Koeffizienten genauere Gesamtergebnisse bekommst als mit 4?
Zum letzten Tipp: Wo holst du die eigentlich immer her - oder liest du Gedanken?! Ich habe schon öfters ne Zahl in ein Diagramm gebracht aber immer mit einem überlagerten Indicator gelöst. Genial - danke für den TippBig Grin

...das O2-VI werde ich auf jeden Fall für die Speicherung als Ideenspender gebrauchen können. Danke auch dafürSmile

Gruß,
Dennis

Edit zu deinem EditWink: Da reden wir von zwei unterschiedlichen Kennlinien. Du meinst die Umrechnung U->T, wofür man je nach Temperatur bis zu 4 Koeffizienten bemühen muss. Wäre schön, wenn dem so wäre (zumal in LV integriertWink) aber ich habe leider einen 20 Jahre alten Analogverstärker, der eben diese Anpassung auch analog macht - keine Ahnung wie genau aber der ausgegebene Spannungsverlauf ist relativ gerade. Und gerade da ist das Problem: Es ist "relativ" gerade aber wir messen Temperaturänderungen von wenigen °C . Wenn wir da gerade mal in ner Beule drin sind, ist die Messung Nonsens und wir suchen im Zweifel an der falschen Stelle. Daher nehme ich seit jeher lieber einen guten Thermostaten, einen Satz Quecksilber-Referenzthermometer und verbiege die analog erzeugte Kennlinie quasi zu den richtigen Absolutwerten. Bisher hab' ich das immer händisch und nur mit Achsenabschnitt und Steigung gemacht, was immer etwas besser als R=0.99 war. Nun gehen uns aber die Verstärker aus und auf dem letzten steht "nicht angep.", weshalb ich eine wellige Kennlinie fürchte. Da ich es schon lange in LV einpflegen wollte wird das Ganze nun kurzerhand 3. oder gar höherer Ordnung angefittet und gut. Bei einem Mal Rechnen pro Sekunde sollte das den 2800er Athlon nicht weiter juckenWink
Sooooo... in Sachen Werte wegspeichern soll's das gewesen sein und es tut recht schön, was es soll *freu*. Den Tipp von Lucki mit den Charts setze ich aus Faulheit (ne, in Wirklichkeit ist es richtig fieser Zeitdruck) erst beim nächsten VI um. Die paar Objekte stören nun auch nicht weiterWink

Im Anhang das Endergebnis. Erstellen von Kalibrierung für 6*RTD, beliebig viele Wertepaare mit vorgegebenem Dateinamen.

Btw: Wie wichtig bei LV die kleinigkeiten sind habe ich eben wieder gemerkt, als das Array trotz "build array" immer nur 1D blieb. Tjaaa, die Konstante vorn muss 2D sein, sonst klappt das auch nicht. Aber da als Laie erstmal drauf zu kommen war nicht einfachWink


...Und nun stürze ich mich auf's Einlesen, Fitten und die Fits entsprechend it den Werten vom ADC verwursten. Auha - langsam wirds komplexSad

Gruß,
Dennis

LV9
Wow - nur 4 Stunden (gefühlte 10Wink) mit Essen zwischendurch. Und das ganz ohne euch zu nerven. Ich glaub', ich werde langsam auch etwas besser Lol

So, und nun möchte ich euch natürlich an meiner Freude teilhaben lassen. Das VI liest die oben erzeugte Datei ein, fittet als Polynom 3. Ordnung, stellt alles schön dar und übergibt die Polynome an das Haupt-VI. Dort brauche ich sie nur noch an "evaluate polynom" anzuschließen und *bingo* hinten kommt die Temperatur raus, die genauer bei uns nicht gehtSmile

Und bevor es jetzt Haue wegen des engen Programmierstils gibt: Das Ganze muss später in den Anhang eines A5-Büchleins und wenn man nicht nur die Linien sehen will, muss alles halt etwas dichter gepackt werden. Außerdem mag' ich es sowieso, wenn man das VI ohne scrollen überblicken kann.

Btw: Gibts eigentlich eine elegantere Möglichkeit für die 6 Graphen/Residuen? Ich meine etwas, was man z.B. in eine Schleife packen könnte, damit der Index-Part nur einmal vorkommt. Aber wie weist man dann die einzelnen Graphen und Indicator zu?! Naja - durch das Bündeln in der Schleife konnte ich ja zumindest schonmal einen Indizierer einsparen. Immerhin etwas...Wink

Viele Grüße,
Dennis

LV9
Seiten: 1 2
Referenz-URLs