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 habe ein Problem in meiner fertigen Application, welches ich mir so recht nicht erklären kann. Vielleicht könnt ihr mir dort helfen?
Grundsätzlich folgendes: Ich habe ein Programm geschrieben, welches mit einem Spektrometer kommuniziert, Messungen durchführt, mit den Ergebnissen rumrechnet, einen Messreport erstellt usw. Funktioniert auch alles wie es soll. Aus dieser Software habe ich dann einen Installer gebastelt. Das tut soweit auch und die Software läuft. Auch die Dateipfade habe ich für die .exe entsprechend angepasst.
Lediglich eine Berechnung von vielen bereitet mir Sorgen, denn die liefert in der .exe andere Ergebnisse als in der Entwicklungsumgebung. Konkret geht es dabei um die Berechnung des Farbortes eines Spektrums. Dazu liest die Funktion Tristimuluskurven aus Textdateien ein, gewichtet das Spektrum mit diesen und berechnet daraus den Farbort in x und y Koordinaten.
Nur warum unterscheiden sich die Ergebnisse zwischen Entwicklungsumgebung und Exe? Die Textdateien scheint er ja zu finden...
Ich habe das VI "Chromacity coordinates.vi" mal angehangen, inklusive zweier VI's welche die Textdateien lesen. Das eine erstellt eine Tabelle wieviele Bytes eine Zeile in der Textdatei hat, das andere kann dann entsprechend gezielt Zeilen aus den Textdateien lesen. Beispielhaft habe ich auch mal eine Tristimuluskurve als Textfile angehängt.
Ich wäre echt dankbar, wenn da jemand einen Tip hat!
Viele Grüße,
Tobias
Anzeige
14.12.2012, 13:10 (Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2012 13:13 von GerdW.)
- Was deine beiden VIs zum Einlesen der Textdatei und das nachfolgende Umwandeln von String nach Zahl erledigen, kannst du auch mit der Funktion "Read from Spreadsheet File" (oder ReadTextFile mit SpreadsheetStringToArray) bekommen. Und dies viel einfacher...
- Es fehlt ein subVI "Array wavelength cut"...
- lass dir doch einfach in der EXE das VI anzeigen, um "live" alle Werte begutachten zu können. (Sowas nennt man Debugging: Wenn ein anderer Rechenwert herauskommt, prüft man die Rechnung inkl. Eingangs- und Zwischenwerte...)
Ich tippe mal darauf, dass du in deinen Entwicklungsumgebung den "System-Dezimalpunkt" abgeschaltet hast.
Das "weiß" jetzt die Exe nicht, und erwartet beim Einlesen deiner txt-Datei Zahlen mit einem Komma als Dezimaltrennzeichen.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
(14.12.2012 13:10 )GerdW schrieb: - Was deine beiden VIs zum Einlesen der Textdatei und das nachfolgende Umwandeln von String nach Zahl erledigen, kannst du auch mit der Funktion "Read from Spreadsheet File" (oder ReadTextFile mit SpreadsheetStringToArray) bekommen. Und dies viel einfacher...
Hallo Gerd,
Ist mir bekannt, ich lese allerdings innerhalb der Software oft aus Textdateien ein und daher die beiden VI's, die auch an vielen anderen Stellen verwendet werden.
(14.12.2012 13:10 )GerdW schrieb: - Es fehlt ein subVI "Array wavelength cut"...
Sorry, vergessen!
(14.12.2012 13:10 )GerdW schrieb: - lass dir doch einfach in der EXE das VI anzeigen, um "live" alle Werte begutachten zu können. (Sowas nennt man Debugging: Wenn ein anderer Rechenwert herauskommt, prüft man die Rechnung inkl. Eingangs- und Zwischenwerte...)
Ich habe versucht die Exe zu debuggen aber da hat er mir schon beim öffnen des Debuggers einen Fehler gemeldet. Einfach, das entsprechende VI Frontpanel einblenden zu lassen, da hätte ich auch mal selbst drauf kommen können.
(14.12.2012 13:28 )jg schrieb: Ich tippe mal darauf, dass du in deinen Entwicklungsumgebung den "System-Dezimalpunkt" abgeschaltet hast.
Das "weiß" jetzt die Exe nicht, und erwartet beim Einlesen deiner txt-Datei Zahlen mit einem Komma als Dezimaltrennzeichen.
Gruß, Jens
Hallo Jens,
Danke! Thats it!
Ich habe in sämtlichen anderen Programmteilen, die aus Textdateien lesen, den Code entsprechend angepasst, nur in diesem hab ichs wohl vergessen. Manchmal sieht man den Wald vor lauter Bäumen nicht.
Jetzt berechnet auch die Exe das korrekte Ergebnis.
Danke für die Antworten und die Hilfe, ihr beiden!
Zitat:ich lese allerdings innerhalb der Software oft aus Textdateien ein und daher die beiden VI's, die auch an vielen anderen Stellen verwendet werden.
Und da ist es sinnvoll, jede Textdatei zweimal einzulesen? Einmal, um die Zeilenlängen zu bestimmen und dann noch einmal, um jeweils eine Zeile zu lesen? Obwohl man die schon gelesen hatte (und deshalb einfach per IndexArray darauf zugreifen könnte), aber den entsprechenden Draht nicht weiterverwendet?
Tut mir leid, aber deine zwei VIs sind RubeGoldberg...