Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
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!
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
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...
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?!
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
Wie wäre es mit einer Datenbank?
Toolkits dazu hast Du ja, wie Du schreibst.
Und bitte , wenn Du LabVIEW 2009 hast.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
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.
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
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 leer
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, oder
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
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?
Hab mal den Feedback-Node durch ein Schieberegister ersetzt.
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
Hey Marc,
*batz* wie war das gleich mit dem Wald und den Bäumen.... 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
27.10.2010, 16:24 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2010 16:32 von Lucki.)
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
Hier mal kleine Anregung zum Lesen/Speichern der Sensorkoeffizienten (ausbaufähig).
lv90
Data.vi (Größe: 13,37 KB / Downloads: 300)
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?
27.10.2010, 16:45 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2010 16:54 von Cruzaderz.)
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
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 Tipp
...das O2-VI werde ich auf jeden Fall für die Speicherung als Ideenspender gebrauchen können. Danke auch dafür
Gruß,
Dennis
Edit zu deinem Edit: 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 integriert) 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 jucken
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
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 weiter
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 einfach
...Und nun stürze ich mich auf's Einlesen, Fitten und die Fits entsprechend it den Werten vom ADC verwursten. Auha - langsam wirds komplex
Kalibrierdaten / Kennlinie / Skalierung speichern wie am elegantesten
Wow - nur 4 Stunden (gefühlte 10) mit Essen zwischendurch. Und das ganz ohne euch zu nerven. Ich glaub', ich werde langsam auch etwas besser
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 geht
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...