Probleme mit Datenerfassung über serielle Schnittstelle (RS232)
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!
Probleme mit Datenerfassung über serielle Schnittstelle (RS232)
Hallo zusammen,
hab mit meinem erstellten Programm mal wieder ein Problem wobei ich nicht so recht weiß wo das Problem überhaupt liegt.
Ich vermute mal das es an der seriellen Schnittstelle liegt.
Zum Programm:
Ich lese über eine serielle Schnittstelle die Daten eines Wechselrichters einer Solaranlage aus. Die Daten werden im Stringformat alle 10 Sekunden vom Wechselrichter über die RS232-Schnittstelle ausgegeben. Mit meinem Programm speichere ich die Strings in einer txt-Datei ab und verarbeite die Daten weiter (z.B. ermitteln der Tagesgesamtleistung, Ertrag der Anlage, eingespeiste Leistung pro Stunde /Tag usw...)
Um mein erstelltes LabVIEW-Programm auch ohne Wechselrichter testen zu können, habe ich ein C-Programm, dass die Datenstrings des Wechselrichters simuliert.
Zum Problem:
Um die Funktion des erstellten Programms zu testen, habe ich anfänglich über das C-Programm jede Sekunde einen Datenstring ausgegeben und in mein LabVIEW-Programm eingelesen. Den Timeout des VI´s "VISA: Auf Ergebnis warten" habe ich dabei auf 1 Sekunde eingestellt.
Mit dieser Konfiguration funktioniert das Einlesen und Abspeichern der Strings ohne Probleme. Auch über längere Zeit werden alle Daten übernommen und abgespeichert.
Wird nun jedoch nur alle 10 Sekunden ein Datenstring ausgegeben (wie es später am Wechselrichter auch sein wird), werden nicht mehr alle Werte übernommen. Die Anzahl der abgespeicherten Strings pro Minute varriert dabei. Mal sind es nur 3, 4 oder 5 Strings. Das alle Werte pro Minute übernommen und abgespeichert werden kommt sogut wie nie vor.
Setze ich nun den Timeout von einer Sekunde auf 3 Sekunden, werden alle Werte ohne Probleme übernommen und abgespeichert.
Wird das laufende Programm über den "Ausführung abbrechen"-Button gestoppt, rechnet der PC sehr lange bis das Programm wirklich gestoppt ist und man wieder darauf zugreifen kann. Je nach dem wie lange das Programm gelaufen ist schmiert LabVIEW sogar komplett ab und kann nur über "Sofortbeenden" abgebrochen werden.
Hat jemand eine Idee, wo ich ansetzen könnte um den Fehler zu beheben ??
Kann das erstellte Programm leider nicht hochladen, da es sehr umfangreich ist.
Hab mal nen Screenshoot angefügt wie ich die Serielle-Schnittstelle auslese:
Probleme mit Datenerfassung über serielle Schnittstelle (RS232)
Schuss ins Blaue: Setze mal den Timeout bei Config Serial Port höher. Der hast du nichts angeschlossen, und der Timeout steht default-mäßig genau bei 10 Sekunden.
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!
Probleme mit Datenerfassung über serielle Schnittstelle (RS232)
hi
als stabile Art und Weise Daten über RS-232 von einem Greät zu bekommen,
benutze ich oft folgende Einstellung. Ein Time Out von 1000 ms sowie warten auf das eingestellte Abschlußzeichen. In deinen Eigenschaften muß Du das vorhereinstellen. Erkennt LabVIEW das Abschußzeichen ist der String vollständig. Die mindest Time Out Zeit kann man durch rumspielen ermitteln.
Gruß
Probleme mit Datenerfassung über serielle Schnittstelle (RS232)
Hallo zusammen,
vielen Dank für eure Antworten!
Hab beide Vorschläge mal ausprobiert. Hab den Timout am VI "Seriellen Port konfigurieren" mehrmals verändert und auch das Abschlusszeichen entsprechend eingestellt.
Die Werte werden nun mit einem Timout von einer Sekunde am VI Auf Ergebnis warten und den obigen Einstellungen soweit vollständig übernommen und abgespeichert.
Läuft das Programm allerdings für eine längere Zeit durch, werden ab einer Programmlaufzeit von ca. 2 Stunden die Strings wieder nur sporadisch übernommen.
Bin mir nun nicht sicher ob das Problem nur an der Einstellung der Schnittstelle liegt.
Auf einem anderen Rechner (ca. 1GB mehr Arbeitsspeicher) läuft das Programm ca. 5 Stunden ohne Probleme dann werden die Strings auch wieder nur sporadisch übernommen.
Kann es sein das das Programm irgendwo einen Zwischenspeicher belegt, der mit der Zeit immer größer wird und sich dadürch die Programmlaufzeit stehtig verlängert ??
Probleme mit Datenerfassung über serielle Schnittstelle (RS232)
' schrieb:Kann es sein das das Programm irgendwo einen Zwischenspeicher belegt, der mit der Zeit immer größer wird und sich dadürch die Programmlaufzeit stehtig verlängert ??
Im Prinzip ja. Dann hast du normalerweise aber irgendwas schlecht programmiert.
Hast du mal im Taskmanager gekuckt, was da die Speicherauslastung macht?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Probleme mit Datenerfassung über serielle Schnittstelle (RS232)
Danke für den Tipp,
hab mir nun die CPU-Auslastung und die größe der Auslagerungsdatei im Taskmanager angesehen. Die CPU-Auslastung schwankt zwischen 3% und ca. 25%. Die größe der Auslagerungsdatei ändert sich nicht, bleibt bei 300 MB....
Denke bei einer Auslastung von 25% müsste das Programm ohne Probleme laufen.
Das ich irgendwas schlecht Programmiert habe kann gut sein, da ich noch nicht sehr lange mit LabVIEW arbeite und noch über keinerlei Erfahrung verfüge.
Hat jemand evt. Erfahrungswerte woran es am ehesten liegen könnte bzw. was man sich zuerst anschauen sollte ?
Denke es ist relativ schwer irgendwelche Tipps zu geben ohne das eigentliche Programm zu kennen, es ist aber zu umfangreich um es hier hoch zu laden.
Ich arbeite in meinem "Haupt-VI" mit einer flachen Sequenz 5 Sequenzen nacheinander ab in denen 10 SubVI´s teilweise mehrfach aufgerufen werden.
Ich speichere die Datenstrings bzw. die berechneten Werte in 5 Textdateien ab. Dabei habe ich darauf geachtet, dass ich die Dateien nachdem ich die Werte ausgelesen oder abgespeichert habe sofort wieder schließe.
Es sind mehrere zeitabhängige Funktionen im Programm enthalten, so wird z.b. eine While-Schleife nur stündlich ausgeführt um die eingelesenen Werte über ein Schieberegister aufzuaddieren.
Hierbei vergleiche ich die aktuelle Systemzeit mit einer Konstanten um Timer- und Wartezeiten im Programm zu vermeiden.
Probleme mit Datenerfassung über serielle Schnittstelle (RS232)
' schrieb:Die CPU-Auslastung schwankt zwischen 3% und ca. 25%.
Ich bin der Meinung, das grobe Mittel sollte unter 10% liegen. Eine Auslastung von 25% ist schon sehr viel.
Zitat:Die größe der Auslagerungsdatei ändert sich nicht, bleibt bei 300 MB....
Ich meine hier den Hauptspeicherbedarf des Prozesses. Siehe in der Zeile des Prozesses.
Zitat:... die eingelesenen Werte über ein Schieberegister aufzuaddieren.
Das Verfahren der Array-Addition an sich kann zu Problemen führen. Array-Ersetzen an sich ist besser. Ich vermute allerdings, dass es nicht hieran liegt. (Sowas würde im Zeitbereich 50ms Auswirkunen haben, nicht bei Sekunden)
Ohne deine VIs zu sehen, kann man aber keine gute Hilfestellung geben.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).