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
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
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..
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
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..
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.
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..
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.