LabVIEWForum.de - VI funktioniert, .exe nicht

LabVIEWForum.de

Normale Version: VI funktioniert, .exe nicht
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe folgendes Problem an dem ich nun schon seit Tagen verzweifle. Hoffe es findet sich hier ein Retter der mir weiterhelfen kann.

Das angehängte Programm stellt einen Datenlogger dar, der verschiedene Messwerte einer Trocknungsstrecke aufzeichnen soll. Dabei kommuniziert das VI mit einem Arduino Mega 2560, der durch das Senden von einzelnen Zahlen verschiedene Cases im VI auslöst. In Case 1 wird ein vom Arduino gesendeter Differenzdruckwert sowie ein Zeitstempel aufgenommen. In den Cases 2 und 3 wird mit jeweils einem Jumo Regler über Modbus kommuniziert und so Temperaturwerte aufgenommen. In Case 4 kommuniziert das VI mit einem Pyrometer (Heitronics Infrarot Strahlungspyrometer KT15 II) und liest ebenfalls einen Temperaturwert aus. In Case 5 wird über eine RS232 Schnittstelle ein Gewichtswert eingelesen. Die Cases 6 und 7 greifen wieder auf vom Arduino gesendete Werte zu.

Lasse ich das VI laufen, funktioniert alles fehlerfrei. Erstelle ich allerdings eine ausführbare Datei und lasse diese laufen, hängt sich das Programm in Case 4 auf. Das tut es allerdings nicht immer. Es kommt auch vor, dass erst bei der Übergabe des dritten oder vierten Wertes des Pyrometers ein Fehler auftritt.

Erstelle ich ein eigenes VI, welches lediglich Case 4 enthält und generiere hier eine ausführbare Datei, treten keine Fehler auf.

Würde mich über eine Rückmeldung/Tipps/Anregungen freuen.

Viele Grüße
Kevin
Hallo Kevin,
in der Case 4 kann es passieren, dass die Anzahl der Bytes kleiner 9 bleiben. Dann wird diese While -Schleife nie beendet.

Gruß
Freddy
Hallo Kevin,

Zitat:Erstelle ich allerdings eine ausführbare Datei und lasse diese laufen, hängt sich das Programm in Case 4 auf. Das tut es allerdings nicht immer. Es kommt auch vor, dass erst bei der Übergabe des dritten oder vierten Wertes des Pyrometers ein Fehler auftritt.
In Case 4 wird eine Schleife aufgerufen, die erst beendet wird, wenn BytesAtPort mehr als 8 Zeichen im Buffer zurückmeldet.
Wenn diese 8 Zeichen nie eintreffen, wird die Schleife auch nie beendet…

- Es fehlt ein Error-Handling in der Loop!
- Es fehlt eine maximale Laufzeit in dieser Loop!
- Warum verwendest du überhaupt BytesAtPort? Das ist hier einfach FALSCH! Diese serielle Kommunikation verwendet (lt. deinen Einstellungen) ein TermChar: dann nutze das bitte auch!

Allgemeine Tipps:
- Verwende statt "MouseDown" eher das "ValueChange"-Event für die Buttons: damit werden auch Latch-Buttons korrekt behandelt…
- Ich würde die Kommunikation mit den Geräten jeweils in eigene Schleifen/Statemachines auslagern…
Referenz-URLs