lesen von der seriellen schnittstelle
Hi roman,
ich verstehe dein Problem so:
Du sendest einen Befehl an dein Gerät. Dieses antwortet immer mit 19 Zeichen. Nie mit 18 oder mit 20 - richtig?
Um einer Fehlerhaften Übertragung vorzubeugen, hast du nun versucht eine Abbruchbedingung einzubauen, die auslöst, wenn dreimal kein Zeichen kam. Richtig?
Davon ausgegangen habe ich folgendes zu ergänzen:
Was Buhrz meint (das Zeitliche Problem) kommt schon hin, bedenkt man, das jedes Gerät selbst eine gewisse Zeitbenötigt, um die Antwort zu schicken - von der Übertragungsrate mit 1200 Baud mal ganz abgesehen.
Ich würde aber zum erkennen eines Fehlers die VISA Optionen nutzen, die dir geboten werden:
- sendet dein Gerät (ganz zufällig) ein Endezeichen mit (z.B. n, rn oder ähnliches)??? Dann solltest du dies in der Initialisierungs Funktion auch einstellen.
Folglich brauchtest du nur noch sagen "ließ 100 Zeichen" und LabVIEW stoppt die read Funktion automatisch bei erkanntem Endezeichen.
- existiert kein Endezeichen, so sollte diene Anweisung lauten "lese 19 Zeichen" sind 19 Zeichen angekommen, so werden sie dir ausgegeben - ohne Fehlermeldung. Fehlen aber noch Zeichen, so wird dir nach der eingestellten Timeout Zeit eine Fehlermeldung ausgegeben.
- Sind wir also beim einzustellenden Timeout: Teste aus, wie lange deine Verarbeitung und darstellung braucht. Nehme einen Sicherheitszuschlag dazu und den Rest zu einer Sekunde kannst du als Timeoutwert setzen.
Deine 19 Zeichen benötigen mind. 16ms bei 1200 Baud zusätzlich der Reaktionszeit des Gerätes. Dies muß natürlich (wird es schon) innerhalb deiner eingestellten Timeout Zeit liegen.
- Um fehlerhaften oder verstümmelten Übertragungen vorzubeugen, solltest du vor jedem senden deines Befehles einmal den Eingangsbuffer der Schnittstelle leeren. Sonst konntest du (ohne genutztem Endezeichen) ev. aus deinem Rahmen laufen und deine Auswertung wäre schlicht falsch.
So genug geschrieben - nun kannst du ans umsetzen gehen.
Solltest du dazu noch Fragen haben wende dich einfach wieder an uns.
Gruß
Oliver
|