Hallo Leute,
also, mein Problem ist, ich habe einen Datenstrom der innerhalb einer WHILE-Schleife von der VISA-Schnittstelle ausgelesen wird. Hier wird bei jedem Schleifen durchlauf eine Nachricht verarbeitet. Ich hab nun die Aufgabe diesen Datentrom mitzuloggen, was ich schon gemacht habe, aber auch eine bereits mitgeloggte Datei einzulesen und damit sozusagen den Datenstrom zu simulieren. Mein Problem ist nun, dass ich mir nicht sicher bin, wie ich das am besten mache.
Also aufgrund der WHILE-Schleife wird ja dann die auslesenfunktion ständig aufgerufen. Wie sag ich ihm denn da dass er immer die nächste Zeile nehmen soll?
Anbei mal das Speichern. Vielleicht hilft das etwas.
Würde mich über konstruktive Beiträge freuen!!! DANKE
LabVIEW 7.0
[attachment=40312:LOADING_TEST.vi]Also ich habs soweit hinbekommen, asu meiner Datei nach und nach die Nachrichten auszulesen, aber irgendwie schaffen es die Ergebnisse nicht aus der WHILE-Schleife. Also alle Anzeigen ausserhalb der WHILE-Schleife zeigen keine Werte an...
Was hab ich falsch gemacht, innerhalb sind die Werte noch korrekt.
Anbei mal meine Funktion zum Laden, plus entsprechendem Textdokument zum Testen.
Und noch ne Frage, ich dachte, dass bei Dateiende ein TRUE gesetzt wird mit dem ich dann die Schleife beenden kann, ohne diesen Fehler zum Schluss zu bekommen. Setzt das etwa doch keinen Wert?
LabVIEW 7.0
Also das Problem liegt, wie du richtig erkannt hast, darin, dass deine Schleife nie beendet wird. Das EOF kommt also nie. Daher können die Anzeigen außerhalb der While Schleife auch nichts anzeigen, da sie nie aufgerufen werden.
Warum das nicht funktioniert weiß ich nicht. Du kannst dir ja mal das Datei-Lesen Vi genauer anschauen (doppelklicken) und versuchen selbst darauf zu kommen (ist mir zu viel Aufwand). Vielleicht kennt sich auch hier jemand besser aus,
ABER:
Warum liest du überhaupt in einer Whileschleife die Datei aus? Warum nicht einfach einmal den kompletten String einlesen und anschließend diesen String zerlegen? Oder hast du zuviele Daten dafür?
Oder du machst es so wie im angehängte Vi und baust dir das Auslesen selbst zusammen. Die Version von mir funktioniert, allerdings arbeitet er einmal zu oft die Schleife ab, sodass du am Schluß noch einen Nulldurchlauf hast. Da müsstest du noch ein wenig herumspielen mit der Abbruchbedingung.
Grüße
[
attachment=13029]
edit: Sehe gerade du hast 7.0. Kann leider nicht so weit runterspeichern. Aber der Screenshot sollte auch helfen.
Also dadurch dass ich jetzt die erweiterten Dateimethoden verwende habe ich das Problem mit dem EOF lösen können. Was mir aber immer noch fehlt ist die Sache, dass er mir bei jedem Schleifendurchlauf das Ergebnis nach draussen leifert. Ich will ja nicht nur das letzte sondern alle Arrays haben.
Muss eine WHILE-Schleife erst komplett durchgelaufen sein, bis sie den Wert ausgibt? Das wäre in diesem Fall aber äußerst ungünstig. Hat jemand ne Ahnung wie ich das lösen kann?
Ich benutze die WHILE-Scheliefe, weil ich immer nur ein Zeile auf einmal haben will und damit die Datei durchlaufe und jeweils die wichtigen Nachrichten auslese.
Ja die While Schleife liefert Daten immer erst am Ende nach außen. Macht auch Sinn wenn du mich fragst.
Das Problem lösen kannst du auf verschiedene Arten (je nachdem, was du genau brauchst):
- Alles in die While Schleife packen - sprich das gesamte Programm in der Schleife abarbeiten. Dann hast du jeweils eine Zeile zur Verfügung.
- Mit Melder / Queues oder (einfacher, aber unschöner) lokalen / globalen Variablen arbeiten und parallele Schleifen verwenden. Sprich du verwendest neben dieser While Schleife noch eine zweite unabhängige in der du arbeitest und nimmst dir die Werte über besagte Methoden aus der ersten WhileSchleife.
- Auto Indizierung aktivieren (rechte Maustaste auf das Rechteck beim Schleifenausgang). Damit erhältst du einen 2D Array, in dem in jeder Zeile der Array von einem Schleifendurchlauf steht. Damit kannst du dann weiterarbeiten.
Ich würd in deinem Fall wohl 1 oder 3 verwenden, wobei ich ja nicht recht weiß, was du überhaupt anfangen willst mit den Daten.
Gruß
Pro Zeile erhalte ich eine Nachricht, die ich anschließend über verschiedene SubVIs auswerten möchte. Das Ganze läuft schon ohne das einspeisen mit einer Datei, also einen Datenstrom vom Gerät, aber damit Fehler oder Ereignisse reproduziert werden können, sollen aufzeichnungen eingespeist und somit simuliert werden. Das versuche ich damit zu erreichen.
Das ganze Programm läuft bei mir schon in einer While-Schleife, aber das einlesen wollte ich eigentlich über ein SUBVI steuern. Ich schau mir mal Lösung 3 näher an, das klang ganz gut, aber ich glaube das schon getestet zu haben und dabei auch auf die Nase gefallen zu sein. Ich teste es mal.
EDIT: Also die Indizierung funzt schon mal ganz gut, nur leider steh ich ja dann wieder vor dem selben problem, dass ich jede Nachricht einzeln brauche und somit ein FOR- oder While-Schleife bemühen müsste um mir das jeweilige Teilarray nacheinander auszugeben. Ich will zudem ja ein Warten verwenden, weshalb ich ja eine schleife nutzen muss. Soll ja simuliert und nicht einfach in einer Sekunde erledigt sein. Hmm mal schauen, das ist bisher alles noch nicht so schön ....