Hi Leute!
An meinen PC ist der Barcode-Scanner Datalogic Matrix 200 über RS232 angeschlossen. Dieser ist zusätzlich mit einer Anlage verbunden und wird durch diese getriggert und liest in regelmäßigen Abständen einen Barcode. Mein Programm soll nun erkennen, dass der Scanner einen Barcode gelesen hat und diesen als String ausgeben.
Mein Programm spuckt im "Run continously"-Modus gar nichts aus und im langsameren Debug-Modus zwischendurch immer mal "v" oder ein "y" mit Dach. Ich habe mir sämtliche RS232-Programme durchgelesen und und versucht den Fehler bei mir zu finden, ich komme allerdings auf keine Lösung. Die Anlage erhält den Barcode vom Scanner einwandfrei.
Die leere Stringkonstante war nötig, um etwas zu haben, dass im 0-Modus der Case-Struktur das "read buffer" füttert. Im 0 Modus macht er übrigens nichts.
Hallo bienee,
Zitat:Ich habe mir sämtliche RS232-Programme durchgelesen
Das glaubt man kaum... Dein Bild lässt jede Ähnlichkeit mit dem fast immer gut zu nutzenden Beispiel "Basic Serial Read and Write" missen. Hast du das mal ausprobiert?
Was macht dein VI, falls mal mehrere Bytes im Buffer anstehen? (Obwohl das bei deiner CPU-Heizschleife nicht zu befürchten ist...)
Gutgemeinte Tipps:
- Um Daten in einer Schleife zu Sammeln gibt es Schieberegister. (Da du keines benutzt, funktioniert dein VI nicht - unter anderem!)
- In der String-Palette gibt es eine "Leerer String"-Konstante...
- Nutze das oben genannte Beispiel-VI!
Das Basic Serial Read and Write habe ich ausprobiert und es macht genau das gleiche.
Bytes at Port gibt eigentlich immer nur 0 oder 1 aus. Selten gibt es mal 2 oder gar 4 aus und dann steht im readbuffer eben "vyyv". Beim Basic Serial Beispiel genau das gleiche.
Ich habe die while-Schleife nun rausgenommen und das Programm um ein VISA Close am Ende und ein VISA Configure Serial am Anfang erweitert. Beim Configure Serial sind die default-werte glaub ich in ordnung. Ändert allerdings nichts an der Ausgabe des VI's.
Hallo bienee,
ok, die Examples verwenden auch keine Schleife, um Daten zu sammeln. Mein Fehler...
Solange du die Daten vom Scanner nicht sammelst (Tipp: Schieberegister!), wirst du nie einen vollständigen Datensatz erhalten und dich immer über die einzelnen Zeichen wundern... Was sagt denn die Doku des Scanners aus über die versandten Strings? Irgendwelche Endekennzeichen? Anzahl der Zeichen? Irgendeine bestimmte Kodierung?
Noch ein Tipp:
Hier im Forum gibt es viele Threads zum Thema "Lesen von der seriellen Schnittstelle". Viele von denen haben sehr gute Erläuterungen von Lucki. Lese diese bitte!
(16.08.2011 09:07 )jg schrieb: [ -> ]Du musst schon selber alle Teilstrings in einer Schleife zusammensetzen.
Beispiele hierzu sollte es genug im VISA-Unterforum geben.
Oder schau mal hier: http://www.labviewforum.de/Thread-RS232-Terminal
Gruß, Jens
Ja ok...mein größeres Problem ist allerdings gerade, dass er anstatt des Codes diese Sonderzeichen übermittelt. Es nutzt mir leider nichts die Sonderzeichen aneinander zu hängen. DIesem Problem wollte ich mich annehmen, wenn ich die gewünschten Zeichen übermittelt bekomme. Der Barcode, den ich lesen möchte ist Code 39. Muss man den Code irgendwie erst noch übersetzen?
Eine spezielle Terminierungssequenz habe ich an sich nicht gefunden. Die Manual ist in dieser Hinsicht nicht besonders Aufschlussreich habe ich das Gefühl. Aber das Angehängte Bild zeigt einen Teil der Einstellungen zu diesem Thema.
Hallo GerdW,
die Ascii-Sonderzeichen meinte ich nicht. Er gibt in scheinbar willkürlicher Reihenfolge "v", "V" oder "´y"(y mit Strich oben drüber, weiß gerade nicht aus welcher Sprache das kommt) aus. Wenn ich im Read-Buffer tatsächlich den Code 39 erhalten würde, wäre ja alles in Ordnung. "vV´yv`y" war jetzt nicht das was ich erwartet hatte. Mit übersetzen meinte ich, ob das jetzt vllt. irgendein Übersetzungsproblem von Labview ist. v, V und y kommen in dem Barcode nämlich gar nicht vor.
Hallo bienee,
Zitat:ob das jetzt vllt. irgendein Übersetzungsproblem von Labview ist.
Nein. Hast du schon mal das ganze mit Hyperterminal ausprobiert?
Zitat:die Ascii-Sonderzeichen meinte ich nicht.
Woher soll ich wissen, was du
meinst?
Ich würde mir mal den empfangenen String im HEX-Code anzeigen lassen...
Gruß, Jens
EDIT: Und wenn ich deinen Screenshot richtig interpretiere, dann ist die Zeichenfolge Carriage-Return + Newline (0x0D + 0x0A) der Abschluss einer Nachricht.