LabVIEWForum.de - Problem alle Bytes aus Empfangspuffer auszulesen

LabVIEWForum.de

Normale Version: Problem alle Bytes aus Empfangspuffer auszulesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo!
Habe folgendes Problem, vll. kann mir ja jemand weiterhelfen:
Ich empfange auf der Seriellen Schnittstelle (RS232) eine handvoll Bytes (270) und möchte diese in einem String weiterverarbeiten. Der Eigenschaftsknoten verrät mir dass wirklich 270 Bytes im Eingangspuffer liegen, das "Visa Lesen" Modul erfasst aber nur 103 (ermittelt durch Ausgabezählwert). Wie kommt das?! als Timeout habe ich 10k eingegeben.
Über Antworten würde ich mich sehr freuen.

PS: wenn man versucht den Inhalt über eine While Scheilfe permanent auszulesen bis man alle Bytes erwischt hat (das klappt) bekommt man den Fehler 1073807339, ich weis nicht was ich noch probieren könnte..)

mfg

HPT

Edit:
Noch etwas: Wenn ich in einer Sequenz den Puffer 3 mal nacheinander auselesen lasse, lese ich in Summe die 270 Bytes aus, erhalte dann aber die Fehlermeldung "Fehler -1073807339 ist bei VISA: Lesen in Komunikationstest 14.vi aufgetreten"...
Wenn da 270 drinnenstehen, sollten auch 270 herauskommen. Hmm

Ich könnte mir vorstellen, dass die Baudrate (oder eine andere Einstellung) nicht passt (daraus könnte auch der Fehler -1073807339 folgen), in folge derer es dann zu einem Fehler in der Übertragung kommt. "Bytes at port" zeigt zwar die tatsächlich empfangene Zahl Bytes an. Die beinhaltet aber auch die Anzahl der Bytes mit Übertragungsfehler. Mit Read bekommst du aber nur die fehlerfrei übertragenen Bytes.

Was soll eigentlich das "Ressource sperren" vor dem Lesen? Sowas hab ich noch nie gemacht.
' schrieb:Wenn da 270 drinnenstehen, sollten auch 270 herauskommen. Hmm

Ich könnte mir vorstellen, dass die Baudrate (oder eine andere Einstellung) nicht passt (daraus könnte auch der Fehler -1073807339 folgen), in folge derer es dann zu einem Fehler in der Übertragung kommt. "Bytes at port" zeigt zwar die tatsächlich empfangene Zahl Bytes an. Die beinhaltet aber auch die Anzahl der Bytes mit Übertragungsfehler. Mit Read bekommst du aber nur die fehlerfrei übertragenen Bytes.

Was soll eigentlich das "Ressource sperren" vor dem Lesen? Sowas hab ich noch nie gemacht.

Hallo!
Zunächst danke für deine Antwort!
Das sperren hat keinen Einfluss, wenn man die Bauelemente weglässt tritt der Fehler auch auf. Ich habe sie nur mal testweise eingebaut weil ich nicht sicher war ob LV vll den exklusiv Zugriff verliert (ich hatte im hintergrund einen Sniffer laufen). Dem ist aber nicht so. Baudrate und alle anderen Parameter passen! Wenn man in einer Sequenz, und das ist das merkwürdige, den Inhalt nacheinander 3 mal auslesen lässt erhalt man in Summe die 270 Bytes! (durch den Sniffer konnte ich prüfen welche Bytes im Eingangspuffer liegen, diese waren dann identisch, auch die Reihenfolge passt dann) nur wen ich 3 mal Nacheinander auslese, tritt der Fehler mit der Zeitüberschreitung auf, obwohl er dann alle Bytes erwischt, in Summe (ich lasse ihn in jeder Sequenz nur einen Teil der 270 Bytes lesen).
Also einen Übertragungsfehler kann man denke ich ausschließen, ich weis zudem was übertragen werden soll, konnte also wert und reihenfolge der Bytes auf Richtigkeit prüfen, passt alles. Wie schon gesagt schaffe ich es einfach nicht alles auf einen schlag auszulesen und wenn ich es nacheinander versuche erhalte ich die oben genannte Fehlermeldung, bin am verzweifeln Pccrash
Welchen Wert hast du denn beim Timeout bei "Visa konfigurieren" angegeben? Stell da mal 0 ein.

Hast du irgendwo explizite Angaben über Puffergrößen gemacht?
Du hast beim Konfigurieren der Schnittstelle das Termination Char nicht ausgeschaltet. Wenn in diesen 270 Bytes zufälligerweise das Term. Char vorkommt, wird das Lesen der Schnittstelle an dieser Stelle abgebrochen.
Also Termination ausschalten und so sollte es dann klappen.

Gruß
@IchSelbst
Habe schon mit verschiedenen Timeout Zeiten experimentiert, schien keinen Einfluss darauf zu haben ob da 0 oder 100k gegebnen war.. Was würde mir 0 bringen? An der Puffergröße habe ich keine veränderungen vorgenommen, es wird ja auch alles empfangen..

@eg
*schluck* Termination Char?!?! Schande.. das könnts gewesen sein! werd das später gleich mal probieren, erstatte dann Bericht ^_^
' schrieb:Welchen Wert hast du denn beim Timeout bei "Visa konfigurieren" angegeben? Stell da mal 0 ein.

Sowas würde ich niemals raten, kannst du deinen Vorschlag erklären? Warum 0?

Ich würde umgekehrt -1 vorschlagen, wenn das erlaubt wäre. Aber VISA unterstützt leider keinen unendlichen Timeout.
Offtopic2

' schrieb:Sowas würde ich niemals raten, kannst du deinen Vorschlag erklären? Warum 0?
Weil ich immer nur soviele Zeichen auslese, wie auch da sind. Respektive warte ich solange, bis genau die erwartete Anzahl in "Bytes im Puffer" vorhanden sind. Ein Timeout beim Lesen brauche ich also nicht. Beim Schreiben auch nicht: Da die Übertragung zwischen Endgerät und Applikation (oft) als Master/Slave abläuft, kann man den Puffer so groß einstellen, dass der immer groß genug ist - und also das VISA-interne Timeout nicht notwendig wird.

Ob ich jetzt das Timeout-Management selbst mache und vor dem Lese/Schreib-VI abzweige oder ob ich das Timeout-Management nach dem Lese/Schreib-VI mache, bleibt sich prinzipiell gleich. Hauptsache es wird gemacht.
' schrieb:@IchSelbst
Habe schon mit verschiedenen Timeout Zeiten experimentiert, schien keinen Einfluss darauf zu haben ob da 0 oder 100k gegebnen war.. Was würde mir 0 bringen? An der Puffergröße habe ich keine veränderungen vorgenommen, es wird ja auch alles empfangen..

@eg
*schluck* Termination Char?!?! Schande.. das könnts gewesen sein! werd das später gleich mal probieren, erstatte dann Bericht ^_^

Okay der Termination Char Enable steht ja standardmäßig auf 0, hab ihn jetzt nochmal explizit disabled (siehe screenshot) das lößt aber das porblem immernochnicht. Beim ersten lesen bricht das visa read nach 103 bytes aus, beim 2. bei 22 und beim 3. bei 142 und beim 4. nach 3 ab (Summe 270), immer. Noch andere vorschlägeWink?


EDIT:
Ich muss mich korrigieren: Es hat durchaus etwas mit dem Term Char zu tun,leider verstehe ich es nicht ganz: Wenn ich im Eigenschaftsknoten "ASRL End out" im Dropdown "Term Char" anschliße, alle anderen Einstellungen wie im Screenshot auf false und als TermChar explizit ein Sybol eingebe das in meiner Bytefolge nicht vorkommt, klappts. Wie kann ich denn das Term Char generell deaktivieren?!
' schrieb:Noch andere vorschläge
Noch viele!Cool

Der eine, der auf den drei fehlenden Zeichen, die jetzt plötzlich beim vierten Lesen rauskommen, basiert, hat sich ja erledigt. Tongue

Bevor ich auf ein Handle-Problem tippe, müsste ich folgendes Abfragen: Kann es sein, dass das SubVI parallel aufgerufen wird? Kann es sein, dass parellel zu diesem VI irgendwer irgendwie auf COM4 zugreift bzw. zugreifen will?

Kannst du ein abgespecktes SubVI erstellen, bei dem dieser Fehler immernoch auftritt?
Seiten: 1 2
Referenz-URLs