Laden...

ESC an Barcodescanner senden

Erstellt von ..Heinz.. vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.751 Views
.
..Heinz.. Themenstarter:in
134 Beiträge seit 2009
vor 11 Jahren
ESC an Barcodescanner senden

Hallo,

ich habe ein kleines Problem und weiß absolut nicht weiter.

Ich habe eine Barcodescanner, er seriell angebunden ist.

Eingescannte Daten auslesen ist kein Problem. Nur würde ich gerne, nachdem ein Barcode gescannt wurde, auf das Display des Scanners einen Text senden bzw. die rote bzw. die gründe Kontrolleuchte aufleuchten lassen.

Der Code, um die grüne Leuchte einzuschalten ist

ESC [ 6 q

.
Ich sende die Daten wie folgt an den Scanner

public string Esc = ((char)27).ToString();
public void WriteDataToSerialPort(string data)
        {
            if (_serialPort != null && _serialPort.IsOpen)
            {
                byte[] buffer = Encoding.ASCII.GetBytes(data);
                _serialPort.Write(buffer, 0, buffer.Length);
                _serialPort.BaseStream.Flush();
            }
        }

public void Led()
        {
            WriteDataToSerialPort(Esc + "[ 6 q");
        }

Nur wird der Befehl vom Scanner nicht angenommen.

Habe ich vlt. etwas bei der Übertragung vergessen?

Gruß

Heinz

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo ..Heinz..,

bist du dir sicher, dass die Spaces in der Escape-Sequenz wirklich da reingehören? Ich würde es mal ohne probieren, also alle Zeichen direkt hintereinander.

herbivore

.
..Heinz.. Themenstarter:in
134 Beiträge seit 2009
vor 11 Jahren

Hallo herbivore,

habe ich auch schon versucht, aber genau das gleiche.

Wenn ich normalen Text hinschicke, wird dieser auch nicht angezeigt.

Das Lesen vom Scanner funktioniert ohne Probleme, nur beim Hinschicken will er nicht

Gruß

..Heinz..

888 Beiträge seit 2007
vor 11 Jahren

Hallo,

hier mal ein angepasster Ausschnitt aus meinen Quellen:


string data = "xxx" + "Hello World!";
byte[] buffer = new byte[data .Length];
buffer = System.Text.Encoding.ASCII.GetBytes(data);
buffer[0] = 22;
buffer[1] = 77;
buffer[2] = 13;
this.serialPort.Write(buffer, 0, buffer.Length);

Funktioniert hat das mit Scannern der Firma HandHeld.
Laut Scanner-Spezifikation musste immer noch ein Byte-Header (22,77,13) vor gesetzt werden.
Welche Bytes das waren und was diese bedeuteten stand in der Anleitung.

Ein BaseStream.Flush() war bei mir nicht nötig.

Gruß

Joe

.
..Heinz.. Themenstarter:in
134 Beiträge seit 2009
vor 11 Jahren

Hallo Joetempes,

ich benutze de Powerscan M8300 der Firma Datalogic. In der Anleitung habe ich nichts über einen Header gefunden. Habe deinen Code jedoch getestet, vllt. habe ich in der Anleitung etwas überlesen; aber es funktionierte leider nicht 😦

Text sollte man eigentlich direkt hin schicken können, mit einem "CR" am Ende, aber auch das nimmt er nicht an.

Trotzdem danke für die Antworten

..Heinz..

175 Beiträge seit 2010
vor 11 Jahren

Hi,

Ich habe das Gerät nicht selber, aber ein Blick ins Handbuch zeigt doch schon, dass man vor der Escape Sequenz noch eine kleine Einleitung schicken muss (siehe Kapitel 6.1, Messages From Host To Sender), zumindest unter gewissen Voraussetzungen (Zitat: "If you have enabled the the Scanner Address Stamping or the Scanner Delimiter, you must specify them in every Message").

Weiterhin ist ggf. nicht ganz unwichtig: "The scanner can only receive messages if two-way mode is enabled".

Bye,
Michael

P.S.: Und wie schon herbivore angemerkt hat: Die Leerzeichen haben in Escape-Sequenzen nichts verloren 😉

Debuggers don't remove Bugs, they only show them in Slow-Motion.

.
..Heinz.. Themenstarter:in
134 Beiträge seit 2009
vor 11 Jahren

Hallo m.knigge,

ich habe "Scanner Address Stamping" und "Scanner Delimiter" schon deaktiviert. Der "two-way Mode" sowie "ACK/NACK" sind aktiviert.

Antworten von der "Ladestation" bekomme ich angezeigt, von daher ist es richtig eingerichtet; nur das Schicken von Nachrichten vom PC zum Scanner funktioniert nicht. Deshalb bin ich mir sicher, dass es am Schreiben zum COM-Port liegt...

Die Leerzeichen habe ich inzwischen entfernt...g

Gruß

..Heinz..

175 Beiträge seit 2010
vor 11 Jahren

Hi,

aber lesen kannst Du vom COM-Port, oder? Wenn ja, dann stimmen auf jeden Fall die Einstellungen (Baudrate, XON/XOFF bzw RTS/CTS oder wie das ganze Zeuchs noch hieß... mann ist das lange her)....

Das Handbuch ist (finde ich) auf etwas inkonsequent. Einerseits wird gesagt, ein "CR" (also ein 0x0D) dient der Beendigung einer Message, auf den abgedrucken Beispielen (Lampe an - beep - lampe aus) fehlt es aber kosequent...

Ich würde trotzdem mal versuchen ein CR an die Sequenz anzuhängen...

Bye,
MK

Debuggers don't remove Bugs, they only show them in Slow-Motion.