hey leute,
bei den LabVIEWbeispiel "basci Serial Write and Read.vi" gibt es ein "delay before read". Für was ist das? Warum braucht man das? wenn ich 0 einsetze, dann kommt bei mir des öfteren ein Wert an, der 0 ist, was eigentlich aber nicht sein kann.
Hallo manu,
ich nehme mal an, du verwendest einen aktuellen PC.
Dieser PC ist üblicherweise so schnell, dass ohne Wartezeit zwischen Write und Read dein Gerät, welches am SerialPort hängt, gar keine Zeit zum Antworten hatte - die serielle Schnittstelle gehört zu den eher langsameren...
D.h. die Property "bytes at serial port" liefert wahrheitsgemäß "0" und die Lesefunktion liest dementsprechend auch 0 Bytes!
Beispiel-Rechnung: übliche 9600baud/1 StoppBit benötigen 9/9600s oder 0.94ms pro Byte(!) - und da muss erst mal der Befehl zum Gerät geschickt werden, dann das Gerät "arbeiten" und dann die Antwort geschickt werden. Da kommen ruckzuck 20ms zusammen!
Anders ausgedrückt: Wenn Du z.B. beim Bäcker 10 Brötchen kaufst, dann muss Du der Verkäuferin auch Zeit lassen, damit sie die Brötchen aus der Theke holen kann in eine Tüte packt und Dir über den Tresen gibt. Da sagst Du auch nicht "10 Brötchen bitte" und hast sie schon im gleichen Augenblick in der Tasche.
Gruß Markus
Der Nachteil dieser Konfiguration ist, daß die Wartezeit aus Sicherheitsgründen deutlich größer gewählt werden muß als rein rechnerisch nötig. Um das zu vemeiden, gibt es diese Möglichkeiten, wobei das "Delay befor read" dann entfällt:
a) Es wird TermChar verwendet. VisaRead wartet und liest erst, wenn Termchar eingetroffen ist.
b) Wenn man weiß, wie viele Bytes als Antwort kommen müssen, dann schließt man einfach diesen Wert als Konstante an VisaRead an. VisaRead wartet dann, bis diese Anzahl von Bytes alle im Buffer sind und liest dann alles aus.
Danke für die schnellen Antworten
Hab ich verstanden und nehm ich mal so mit.
Nun stell ich mir die frage ob es einen unterschied macht, wenn ich das delay nichtin LabVIEW sondern beim Mikroprozessor reinprogrammier. Das heißt ich sende meine Datenrauf und mache delay, daten, delay, daten, delay, daten, delay ...sollte eigentlich so auch funktionieren?
Hallo manu,
wie sollte ein Delay beim µP helfen?
Du brauchst den Delay auf PC-Seite, um die Antwort deines Gerätes abzuwarten!
Alternativ kannst du Luckis Vorschläge verwenden. Oder du fragst die "bytes at serial port" in einer Schleife ab, um jedes einzelne Byte zu empfangen und zu speichern. Wobei du dann auch wieder eine Wartefunktion in die Schleife packen solltest...