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!
ich würde gerne mal wieder eure Hilfe in Anspruch nehmen. Und ich hoffe ich hab das neue Thema im richtigen Bereich gestellt. Sollte dem nicht so sein bitte verschieben.
Ich habe ein Messfile(txt/siehe Anhang) welches ich als Array einlese. Dieses Array bereite ich so auf, dass ich es in einem XY-Graphen anzeigen kann. Es sind insgesamt 11 Signale die ich darstelle. Soweit ist alles klar mit dem Programm.
Was ich jetzt vor habe ist, dass ich das Messfile nach zwei Tagen und Uhrzeiten durchsuchen und die dazugehörigen Messwerte als ausgeben will. Mit den jeweiligen Messwerten muss dann noch ein wenig rechnet werden und schon ist das Ergebnis supi.
Folgende Probleme hab ich bei der Auswahl von dem Anfangsdatum und dem Enddatum werden die Sekunden mitgesucht. Was in meinem Fall ein Problem ist da, dass Messfile auch die Sekunden beinhalten. Und einfach weglassen ist auch nicht so einfach möglich.
In meiner Codeversion Funktioniert das Suchen schon ganz gut nur muss ich den EXAKTEN Zeitwert(Uhrzeit/Datum) eingeben sonst findet LV nichts und kann somit nicht rechnen.
Jetzt wäre die Frage gibt es ein Möglichkeit zum einen nur nach Stunden und Minuten zu suchen und den Messwert auszugeben. Oder irgendwie eine Uhrzeiten anzugeben und es wird der nächst gelegene Messpunkt ausgegeben.
Ich hoffe das ich das Problem halbwegs Verständlich geschildert habe und Ihr mir vielleicht weiterhelfen könnt. Sollten Fragen offen sein immer her damit ich versuche sie dann zu beantworten.
Im Anhang hab ich zum einen das Programm(LV8.20), ein dazugehöriges Monatsmessfile und ein Bild um welchen Codeabschnitt es sich dreht.
Ich danke schon mal und hoffe auf schnelle Hilfe.
Grüße aus Mainz
Jürgen
Anzeige
15.08.2012, 12:25 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2012 12:27 von Kasi.)
Da du ja eh schon interpolate einsetzt (obwol da eigentlich nur ein array-index gebraucht wird?) kannst du über threshold direkt das naheliegende Datum erreichen.
Wenn du die Interpoliererei vermeiden willst, kannst du den Threshold-Index dann auch Runden und statt interpolate direkten den arrayindex ansprechen, um an ein exaktes Ergebnis zu kommen.
(hoffe, dass ich dich richtig verstanden habe )
--edit-- der eine "dbl"-Konverter in der Mitte Unsinn, ist bei der Ctrl-Drag-Kopierschlacht übrig geblieben
If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
ich hab die interpolation verwendet weil mir das am Sinnvollsten erschien.
Ich bin nicht fixiert auf die interpolation. Da ich ja eigentlich nur die Messpunkte verwenden will.
Wie würdest du es denn per Array-index lösen? Ich hab das auch schon per Array-Suche wie du sicher gesehen hast versucht nur bin ich da nicht weiter gekommen.
Ich danke schon und nochmals.
Grüße Jürgen
15.08.2012, 12:57 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2012 13:20 von Kasi.)
Ich hab mal neben der Array-Indizierung noch ein paar weitere Verbesserungen einfließen lassen
(Im Grunde ist das Runden auch überflüssig, da das bei der Konvertierung zu I32 beim Array-Index automatisch geschieht)
If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
vielen Dank deine beiden Vorschläge funktionieren Super. Ich hab mich für deine zweite Idee entschieden.
Die macht im Taskmanager den eindruck, dass Sie weniger Speicher benötigt.
Was ich allerdings nicht zu 100% verstehe ist die Threshold 1D-Array funktion. Ich hab mir die beschreibung in Deutsch und in Englisch durchgelesen und irgendwie will das nicht in meinen Kopf. Desweiteren ist mir aufgefallen, dass diese Funktion Werte ausgibt die vom index-array so nicht verwendet wird.
In meinen Beispiel gibt die Thresholdfunktion die Zeile 17279 aus welche einen Wert von 199,868 im Messfile enthält. Allerdings wird nach dem Index-Array der Wert 199.770 ausgegeben was der Wert aus Zeile 17281 ist, aber der Wert passt zum suchparameter. Ich finde das komisch(nicht Lustig ) )
Ich bitte um Erklärung. Wenn jemand eine hat.
Ich danke schon mal.
Grüße Jürgen
15.08.2012, 14:36 (Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2012 14:41 von Lucki.)
Die Funktion "1D Array interpolieren" funktioniert auch mit "Array of Points", und zwar hast Du dann genau das was Du brauchts: Der X-Wert (hier: Zeit) wird eingegeben, und der interpolierte Y-Wert kommt heraus. Du brauchst dann keine weitere Funktion zum Herausklauben der Werte.
Glücklicherweise kann man auch beim XY-Graph das Format "Array of Points" verwenden. Es ist nur notwendig, die Daten etwas anders zu organisieren.
Die Array-Indizierung beginnt ab 0, die Textdatei zählt die Zeilen ab 1. Außerdem hat die Textdatei eine Einheitenzeile, die aus dem extrahierten Array rausfliegt (mittels der "Array-Subset" Funktion).
Macht insgesamt einen Unterschied von 2 zwischen Arrayindex und Zeilennummer, bzw. Arrayindex + 2 = Zeilennummer. Also alles korrekt.
If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
@Lucki: Vielen Dankfür die Hilfe ich hab deine Version mal getestet und war erstaunt wie Lange das gebraucht hat bis der Graph anzeigt. Was allerdings an der Reorganisierung des Programmes bzw. des Messfiles liegen wird. Ich denke ich werde die Version von Kasi verwenden.
@Kasi: Super vielen Dank für die Erklärung. Jetzt hab sogar ich es verstanden . Klar wenn das Array bei Null anfängt und die Textdatei bei 1 plus noch die Spaltenbeschreibung ergibt 2 Unterschied. Macht Sinn
Vielen Dank euch beiden. Für die schnelle Hilfe.
Grüße aus Mainz
16.08.2012, 14:32 (Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2012 15:10 von Lucki.)
(16.08.2012 14:01 )Kernphysik_Jürgen schrieb: @Lucki: Vielen Dankfür die Hilfe ich hab deine Version mal getestet und war erstaunt wie Lange das gebraucht hat bis der Graph anzeigt. Was allerdings an der Reorganisierung des Programmes bzw. des Messfiles liegen wird. Ich denke ich werde die Version von Kasi verwenden.
Das liegt aber nicht an meinem Code. Es ist ein absolutes No-Go, in der für gewöhnlich zeitkritischen Hautschleife bei jedem Durchgang eine Unmenge von Eigenschaftsknoten aufzurufen. Daran habe ich aber nichts geändert, weil das nicht Gegenstand der Frage war. Kasi hat aus demselben Grund das alles weggelassen. Damit ist das VI um Größenordnungen schneller.
Edit: Was sich sagte, ist zwar richtig, trifft hier aber nicht den Kern der Sache. Die Konvertierung der Daten in das von mir gewählte Format dauert tatsächlich volle 2 Sekunden, ist also nicht optimal.
(16.08.2012 14:32 )Lucki schrieb: Edit: Was sich sagte, ist zwar richtig, trifft hier aber nicht den Kern der Sache. Die Konvertierung der Daten in das von mir gewählte Foormat dauert tatsächlich volle 2 Sekunden, ist also nicht optimal.
Hallo Lucki,
mit der Konvertierung habe ich mich beschäftigt und festgestellt, das die "scan from String" super komfortabel aber auch langsam ist. In dem angehängtem Beispiel habe ich die "Date/Time To Seconds Function" als Case hinzugefügt.
Ergebnis: ~ Faktor 3 schneller.
Derzeitiges noch bestehendes Problem: Die Stunde im Zeitstempel hat einen Offset von +1.
Vielleicht ist es ja von Interesse.