07.03.2012, 14:27
Beitrag #1
|
UnbekanntesPferd
LVF-Grünschnabel
Beiträge: 12
Registriert seit: Mar 2012
8.2
-
kA
|
Messdaten in Protokoll speichern
Hallo!
Ich habe ein VI geschrieben, welches überprüft, ob eine Kraftmessdose noch ausreichend genau kalibriert ist (vgl. Feld "Bedienung" im Frontpanel).
Die Kraft KD24 2 in den ersten beiden Bildern ist die vom Sensor kommende Kraft und wird durch ein separates VI ausgelesen.
Die einzelnen Messungen liegen jeweils in einer Sequenzstruktur, am Schluss will ich im letzten Teil der Sequenzstruktur alle Messwerte, die angehangenen Gewichte und den relativen Fehler in eine Messdatei schreiben. Das klappt auch, wenn ich den letzten Array (3. Teil des Blockdiagramms) einfach in eine Tabellenkalkulationsdatei schreibe, aber die Datei ist mir dann viel zu kryptisch. Die For-Schleife im 3. Bild könnt ihr außer Acht lassen, die stammt noch von nem misslungenen Versuch die Messdatei selbst zu erstellen.
Das Blockdiagramm von links nach rechts:
Meine Frage/Bitte an euch:
Wie kann ich ein Messprotokoll erstellen, das eine Kopfzeile (z.B. "Messprotokoll vom [Datum]"), dann eine Leerzeile und danach in einer Spalte die Werte (die in Bild 3 in den letzten Array gehen) mit passender Beschriftung in einer Spalte davor (jeweils in einer neuen Zeile) enthält? Eventuell sollte am Schluss noch meine Signatur stehen
Wäre super nett wenn ihr mir da helfen könnt (wenn möglich mit grobem Blockdiagramm, wie ich was verschalten muss), ich hab erst vor kurzem angefangen mit Labview zu arbeiten und kenn mich mit diesen komplizierteren Sachen noch nicht aus.
Liebe Grüße,
Unbekanntes Pferd
|
|
|
07.03.2012, 15:22
Beitrag #2
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Messdaten in Protokoll speichern
Hallo Pferdchen,
erstmal würde ich dir dringend raten, dir die Basics von LabVIEW anzulesen! (Siehe Signatur...)
- Wenn du das gemacht hast, wirst du wissen, was RaceConditions sind und dann die ganzen unnötigen lokalen Variablen entfernen und durch Drähte ersetzen.
- Dann kannst du dir überlegen, ob es wirklich sinnvoll ist, eine lokale Variable 100mal ohne Timing auszulesen und davon den Mittelwert zu bilden...
- Zur eigentlichen Frage: Schau dir die Funktionen "Write to Text File" und "Write Spreadsheet File" (bzw. die Hilfe dazu) mal an...
|
|
|
07.03.2012, 15:52
Beitrag #3
|
UnbekanntesPferd
LVF-Grünschnabel
Beiträge: 12
Registriert seit: Mar 2012
8.2
-
kA
|
RE: Messdaten in Protokoll speichern
Hey!
Zuerst mal danke für die schnelle Antwort.
Ich weiß, dass ich mir die LabView Anleitung durchlesen sollte, hab das auch schon teilweise gemacht, aber bisher brauche ich LabView zu wenig, um mir mehrer dieser riesen Bücher durchzulesen, v.a. da das momentan für mich eher ne Beschäftigung ist, um als HiWi die Semesterferien rumzukriegen, ansonsten helf ich nur in der Lehre mit.
Ich hab die lokalen Variablen jetzt vor allem benutzt, damit das VI übersichtlicher ist und ich nicht so viele Drähte hin- und herlaufen hab. Haben die lokalen Variablen so wie ich sie benutze Nachteile?
Das 100 mal Auslesen hab ich nur gemacht, weil ich mit einem Schalter steuern will, wann das VI die Kraft ausliest, ich dafür ne Schleife gebraucht hab und 100 dann als beliebigen Wert genommen hab. Mir ist keine einfachere Variante eingefalln um dem VI zu sagen "Wenn ich den Knopf drücke, musst du den Kraftwert auslesen und dir als Kraft 1 (bzw 2 oder 3ist) merken"
"Write Spreadsheet File" ist auf Deutsch doch "In Tabellenkalkulationsdatei schreiben" oder? Da hab ichs nicht geschafft die Beschriftung usw in die Tabelle zu Bringen. Bin momentan an einem Versuch das Problem mit "In Textdatei schreiben" zu lösen, die Tabelle sieht aber immernoch nicht so aus, wie ich es gern hätte.
Nochmal danke für die Mühe,
Grüße,
Unbekanntes Pferd
|
|
|
08.03.2012, 08:11
Beitrag #4
|
M Nussbaumer
Zarathustra
Beiträge: 654
Registriert seit: Sep 2009
2009 SP1
2009
EN
6300
Schweiz
|
RE: Messdaten in Protokoll speichern
(07.03.2012 15:52 )UnbekanntesPferd schrieb: Hey!
Ich hab die lokalen Variablen jetzt vor allem benutzt, damit das VI übersichtlicher ist und ich nicht so viele Drähte hin- und herlaufen hab. Haben die lokalen Variablen so wie ich sie benutze Nachteile?
Das 100 mal Auslesen hab ich nur gemacht, weil ich mit einem Schalter steuern will, wann das VI die Kraft ausliest, ich dafür ne Schleife gebraucht hab und 100 dann als beliebigen Wert genommen hab. Mir ist keine einfachere Variante eingefalln um dem VI zu sagen "Wenn ich den Knopf drücke, musst du den Kraftwert auslesen und dir als Kraft 1 (bzw 2 oder 3ist) merken"
"Write Spreadsheet File" ist auf Deutsch doch "In Tabellenkalkulationsdatei schreiben" oder? Da hab ichs nicht geschafft die Beschriftung usw in die Tabelle zu Bringen. Bin momentan an einem Versuch das Problem mit "In Textdatei schreiben" zu lösen, die Tabelle sieht aber immernoch nicht so aus, wie ich es gern hätte.
Hey Pferd
Ein grosser Nachteil ist es, dass du mit lokalen Variablen so wie du sie verwendest sogenannte Race-Conditions (wie Gerd bereits angetönt hat) herraufbeschwörscht. Einfach gesagt hast du keine Kontrolle darüber in welcher Reihenfolge die Daten geschrieben und gelesen werden. Im schlimmsten Fall überschreibst du dir neue Werte mit altem Mist. Zudem funktioniert LabVIEW nach dem Datenfluss-Prinzip, alles was nicht datenmässig abhängig ist wird parallel ausgeführt.
Es ist einfach guter Programmierstyl die Drähte zu verwenden anstatt alles mit lokalen Variablen zu ersetzen. Falls du Probleme mit der Übersichtlichkeit bekommst kannst du entweder alles in einen Cluster (ein struct in C bspw.) packen und aus vielen Drähten einen einzelnen machen. Oder du verwendest Funktionale Globale Variablen (kurz FGV) welche die gleiche Funktionalität haben, jedoch vor Raceconditions schützen.
Um Daten zu speichern für den nächsten Schleifendurchlauf gibt es sogenannte Shift-Register.
Und ja "Write Spreadsheet File" ist in Deutsch "In Tabellenkakulationsdatei schreiben". Am besten lädst du mal dein VI hoch in welchem du ins Excel-File schreibst mit einer Excel-Datei wie sie aussehen sollte, damit man sich ein besseres Bild davon machen kann.
Hoffe das hilft dir weiter!
Gruss Marc
|
|
|
09.03.2012, 11:48
Beitrag #5
|
UnbekanntesPferd
LVF-Grünschnabel
Beiträge: 12
Registriert seit: Mar 2012
8.2
-
kA
|
RE: Messdaten in Protokoll speichern
Hey!
Danke, dass du mich darüber aufgeklärt hast. Ich probier wohl in Zukunft weniger lokale Variablen zu benutzen, aber bei dem VI hier lass ich es so. Ich hab mir mit diesem Glühbirnen Symbol mal den Fluss im VI genauer angesehn, da passt alles so wie's ist, ich denk mal weil ich alles in die Sequenzstruktur gepackt hab und die Kräfte jeweils nacheinander über einen kurzen Zeitraum auslese.
Ich hab das Problem jetzt mit "In eine Textdatei schreiben" gelöst. Es sieht zwar nicht so toll aus, da alles (damit die Datei so aussieht, wie ich will) ein ziemlicher "Array&String-Salat" ist, aber es passt. Ich bin wohl erst nächsten Freitag wieder auf der Arbeit, dann werde ich das VI mal hier hochladen.
Grüsse,
UnbekanntesPferd
|
|
|
09.03.2012, 13:08
Beitrag #6
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Messdaten in Protokoll speichern
Hallo Pferd,
Zitat:Ich hab mir mit diesem Glühbirnen Symbol mal den Fluss im VI genauer angesehn, da passt alles so wie's ist,
Ich warte auf den ersten Beitrag von dir, der folgenden Satz enthält: "Wenn ich im HighlightingMode alles ausprobiere, funktioniert mein VI, aber sobald ich es normal laufen lasse, nicht mehr..."
|
|
|
22.03.2012, 11:46
Beitrag #7
|
UnbekanntesPferd
LVF-Grünschnabel
Beiträge: 12
Registriert seit: Mar 2012
8.2
-
kA
|
RE: Messdaten in Protokoll speichern
Hallo!
Ist zwar etwas verspätet, aber hier mal noch für alle, die es interessiert das VI, das ich geschrieben hab.
Kalibrierung Kraftmessdose.vi (Größe: 149,49 KB / Downloads: 411)
Grüße,
UnbekanntesPferd
|
|
|
22.03.2012, 14:15
Beitrag #8
|
M Nussbaumer
Zarathustra
Beiträge: 654
Registriert seit: Sep 2009
2009 SP1
2009
EN
6300
Schweiz
|
RE: Messdaten in Protokoll speichern
(22.03.2012 11:46 )UnbekanntesPferd schrieb: Hallo!
Ist zwar etwas verspätet, aber hier mal noch für alle, die es interessiert das VI, das ich geschrieben hab.
Grüße,
UnbekanntesPferd
Liefert das VI auch erwartete Werte zurück
Ich verstehe nicht ganz was du mit den Schleifen in denen du 100 mal die Variable ausliest machen willst ausser deine Race-Condition zu betonen.
So wie es jetzt programmiert ist, lässt sich zur Laufzeit nicht sagen, welcher Wert sich in der lokalen Variable befindet zum Auslesezeitpunkt...
Du tätest gut daran das Ganze in einer Produce-Consumer Struktur zu lösen und deine Werte kontinuierlich in einen 100 Elemente grossen Queue zu schreiben.
Auch wenn die Werte im Debug-Modus evtl stimmen, so wird kann und wird deine Datenunabhängigkeit zu Fehlern im laufenden Betrieb führen.
Falls du Fragen hast kannst du gerne nachhaken.
Gruss Marc
|
|
|
22.03.2012, 14:38
Beitrag #9
|
|
|
23.03.2012, 15:37
|
UnbekanntesPferd
LVF-Grünschnabel
Beiträge: 12
Registriert seit: Mar 2012
8.2
-
kA
|
RE: Messdaten in Protokoll speichern
(22.03.2012 14:15 )M Nussbaumer schrieb: Liefert das VI auch erwartete Werte zurück
Ja, macht es soweit schon.
(22.03.2012 14:15 )M Nussbaumer schrieb: Ich verstehe nicht ganz was du mit den Schleifen in denen du 100 mal die Variable ausliest machen willst ausser deine Race-Condition zu betonen.
Theoretisch könnte ich die For-Schleifen mit dem Mittelwert dahinter auch weglassen, ich häng ja ein Gewicht dran und messe die Kraft, da sollte der Kraftwert bei einem Gewicht ja sowieso konstant sein, aber ich dachte mir, das ich das sicherheitshalber 100 Werte nehme und mittle, um eventuelle Fehler wie z.B. nen Luftstoß oder sowas abzuschwächen.
(22.03.2012 14:15 )M Nussbaumer schrieb: So wie es jetzt programmiert ist, lässt sich zur Laufzeit nicht sagen, welcher Wert sich in der lokalen Variable befindet zum Auslesezeitpunkt...
Das verstehe ich irgendwie nicht. Ich hab ne Sequenzstruktur, also wird alles nacheinander ablaufen. Ich häng Gewicht 1 an, drück auf nen Knopf, die Kraft wird gemessen, ich drück wieder auf nen Knopf, die Messung stoppt und ich hab nen Wert für Kraft 1. Das Gleiche dann wieder für Gewicht2/Kraft2 und Gewicht3/Kraft3ist. Danach benutze ich zum rechnen ja nurnoch die in den vorigen Sequenzen erstellten Werte. Wie kann ich denn da noch Probleme mit den in den lokalen Variablen gespeicherten Werte bekommen? Oder hab ich da jetzt nen totalen Denkfehler drin?
(22.03.2012 14:15 )M Nussbaumer schrieb: Du tätest gut daran das Ganze in einer Produce-Consumer Struktur zu lösen und deine Werte kontinuierlich in einen 100 Elemente grossen Queue zu schreiben.
Das sagt mir leider garnichts, bin noch absoluter Labview Anfänger
Grüße,
UnbekanntesPferd
|
|
|
| |