Hallo zusammen.
Ich habe gerade einen COM1 - Partner für meinen PC bekommen, welcher mich leider mit etwas Programmieraufwand belästigt.
Wenn ich Daten von ihm empfange, weiß ich vorher NIE, wieviele es sein werden... Ich kenne nur das terminierende Zeichen (z.B. <CR>).
Um dieses Problem nun aus dem Weg zu räumen, habe ich mir überlegt, vom COM mit READ immer nur ein Zeichen zu lesen (while-Schleife) und mit dem terminierenden Zeichen zu vergleichen. Wenn sie übereinstimmen, breche ich die while-Schleife ab, sonst wieder ein Zeichen lesen.
Das ist doch blöd.
Habt Ihr da vielleicht Ideen?
Gruß!
' schrieb:Wenn ich Daten von ihm empfange, weiß ich vorher NIE, wieviele es sein werden... Ich kenne nur das terminierende Zeichen (z.B. <CR>).
Hallo,
jetzt bin ich endlich freigeschaltet und kann dir auch antworten.
Wenn ich dein Problem richtig deute, dann ist es ein ganz einfaches. Du bekommst über die Serielle Daten von unbekannter Länge und willst die mit LV einlesen.
Ich benutze dazu den Visa Serial. ( Instrument I/O / Serial /Visa Configure Serial Port)
Bei dem kannst du auch den Termination Char angeben und das sollte dein Problem beheben.
Hier nochmal ein Beispielprogramm von mir, welches ich vor kurzem benötigt habe. Kannst ja deinen Bedürfnissen anpassen.
[
attachment=2726]
Zuerst wollte ich schreiben, dass das wohl nicht die Lösung ist, da das Programm ja eben doch ein Numbers of Bytes to Read braucht...
Wie peinlich - da konfiguriere ich auch immer mit dem VI meine Ports - und frage mich auch noch, wat das middem Abschlußzeichen soll - und dabei ist das die Lösung...
Danke für den heissen Tipp - jetzt sehe ich den Wald wieder...
Kommando zurück!
Wenn ich das normale READ benutze muß ich die Zeichenanzahl angeben! Also ist das wohl nicht, was Du gemeint hast - oder?
Funktioniert Dein Tipp evtl. nur via VISA - Events?
Hat sonst noch jemand Ideen?
Hallo!
Ja, du musst zwar eine Zahl eingeben, aber du kannst auch einfach 100 da reinschreiben. Die Leseroutine bricht nach dem Term-Char ab:
Siehe LV Help: termination char calls for termination of the read operation. The read operation terminates when the termination char is read from the serial device.
Danach solltest du vielleicht die VISA Flush I/O Buffer funktion aufrufen, um Datenmüll aus sem Speicher zu entfernen. Muss aber nicht unbedingt.
Das mit dem Term Chat funktioniert definitiv!
Nisse
Stimmt geht! Danke!
Gibt es eine Möglichkeit, herauszufinden (ohne Timeouts) ob neue Daten am Com angekommen sind?