Ok mir ist nun folgendes aufgefallen:
Wenn mein SubVI so ist wie bisher, dann wird mir doch nicht die Ausgabeanzeige gelöscht wenn ich Bilddaten anfordere. Stattdessen bekomme ich ASCII-Schnipsel mit seeehr vielen Zeilenumbrüchen dazwischen. Daher ist meine Anzeige bis auf das Prompt scheinbar leer. Wenn ich aber mal scrolle finde ich wie gesagt einige (wenige) Schnipsel.
Setze ich eine Wartezeit vor mein Bytes at Port (10ms), dann sind die Schnipsel größer. Noch größer werden sie, wenn ich 100ms Wartezeit vor dem auslesen ansetze. Der Anzeigezähler läuft wie gewohnt runter (ca. 100 Bytes/s) bis auf 0.
Offensichtlich habe ich dann wohl ein Timingproblem?! Aber wie bekomme ich jetzte eine gescheite, vollständige Ausgabe hin. Das Problem habe ich wie gesagt nur, wenn es sich um hohe Datenmengen handelt. Bei einfachen Statusabfragen etc. tritt kein entsprechender Effekt auf...
mfg
Dann solltest Du die Timing-Zeit so hoch wählen, dass definitiv alles übertragen wird (da Du ja keine definierten Terminierungszeichen hast, wenn ich Dich richtig verstanden habe).
Gruß Markus
Dass die Schnipsel größer werden, wenn du länger wartest, ist doch logisch
Das Gerät bzw. die Kommunikation zwischen Gerät und Rechner hat halt nur ne gewisse Baud-Rate, mit der es übertragen kann, und bei ner Baudrate von z.b. 9600 schafft es halt nur etwa 9600/8 also gut 1 Byte pro ms. Ich glaube, dein Problem liegt einfach an der Art, wie du die fertige Antwort zusammensetzt.
Von was für einer "Anzeigezähler" ist das eigentlich? Hat das Gerät hardwaremäßig eine Anzeige, wieviele Bytes es noch auf Lager hat?
@Kasi: Die Baudrate beträgt 115200. Mit dem Anzeigezähler meine ich nur den Knoten Bytes at Port. In der Debugausgabe kann ich mir ja die aktuelle Anzahl anzeigen lassen. Dort habe ich diese Beobachtung des ständigen Abfalls gemacht.
mfg
mhm... folgendes kapiere ich dann gerade nicht:
Warum zählt der "Bytes at Port" runter? Normalerweise müsste das ReadVI ALLE Bytes abholen, da du ihm genau diese Angabe ja reingibst. Könnte es sein, dass die Leseroutine ständig in ein Timeout rennt? Mal den Fehlerausgang beim Read ausgelesen?
Genau das kam mir ja auch komisch vor. Bekomme am Ausgang zwar keinen Fehler, aber eine Warnung (1073676294).
mfg
ich werd aus dem beschriebenen Verhalten leider nicht schlau. Aber ich geb noch nen Debug-Ansatz:
Einfach mal die Leseroutine bis zum Timeout laufen lassen, also mehr Bytes als Konstante für die Antwort veranschlagen, als geliefert werden, "Bytes at Port" also durch ... was weiß ich, 10000 ersetzen. Keine While-Schleife, keine Case-Strukturen. Trotz des Timeout-Fehlers sollte er dann die vollständige Antwort ausspucken. Und das dann auch mit aufeinanderfolgenden Befehlen versuchen.
Tja...habe jetzt mal in meinen While-Schleifen den Fehlercluster per Schieberegister durchgereicht. Außerdem habe ich fix ein SubVI gebastelt, welches meine Verbindung zum Gerät sauber trennt. Ich weiß nicht ob es daran liegt, jedenfalls kann ich jetzt vollständige Datensätze empfangen, wenn ich Bilddaten anfordere...
Könnte mir vorstellen, dass es an den Schieberegistern liegt. Da ich ja nur den VISA Resource Name (der sich ja nicht ändert) und den Fehlercluster aus der Whileschleife rausführe, machen mein VIs evtl. schon weiter bevor die Whileschleife durch ist. Die erforderlichen Daten würden ja bereits anliegen...bin da aber nicht ganz sicher. Muss mal schauen wie es sich jetzt mit der Verwendung des gleichen SubVIs nacheinander verhält.
Danke soweit erstmal für die tolle Unterstützung
Da ich grad am schreiben bin, gleich noch ne Frage: Gibt es ne Art Protokoll, wie man solche ASCII Bilddaten in ein Bild wandeln kann? Also wie bekomme ich aus dem empfangenen Bytes ein Bild?
mfg
Hallo Fidel,
Zitat:Gibt es ne Art Protokoll, wie man solche ASCII Bilddaten in ein Bild wandeln kann? Also wie bekomme ich aus dem empfangenen Bytes ein Bild?
? Gerätebeschreibung durchblättern, da sollte das doch drin stehen!