Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Barcode-Scanner und USB (https://www.delphipraxis.net/66801-barcode-scanner-und-usb.html)

jan_derer 4. Apr 2006 14:21


Barcode-Scanner und USB
 
Hallo Zusammen!

Für eine Anwendung habe ich die Idee, mehrere Barcode-Scanner an einem PC anzuschließen (über USB).

Nun habe ich folgendes Problem. Wie erkenne ich, dass irgendwelche einkommenden Daten von einem bestimmten Scanner stammen. Gibt es eine Bibliothek, welche mir einkommende Daten (seitens des USB) mitteilt, die Daten zur Verfügung stellt und mir die ID des Geräts im USB-Baum mit gibt?

Alternativ ... Kennt jemand ein Barcode-Scanner der über entsprechende Bibliotheken verfügt?

Greetz
Jan

Robert Marquardt 4. Apr 2006 14:30

Re: Barcode-Scanner und USB
 
Das Problem hier ist das Barcode-Scanner meist als USB-Tastaturen auftreten statt als USB-Barcode-Geraete.
Als Tastatur gibt es nur die Moeglichkeit mit WM_INPUT zu operieren, aber da habe ich noch keine Experimente damit durchgefuehrt.
Siehe die MS-Hilfe zu WM_INPUT und RegisterRawInputDevices. Die noetigen Headerkonversionen sind im Modul win32api von http://jedi-apilib.sf.net zu beziehen.

Sollten die Barcode-Scanner als USB-Barcode-Geraete (aus der Unterklasse der HID-Geraete) auftreten koennen (manche sind umschaltbar) so lassen sie sich mit meiner HID-Komponente behandeln. Selbige ist als Teil der JVCL oder von http://www.soft-gems.net erhaeltlich.

Nachtrag:
Welches Geraet wo angeschlossen ist, laesst sich beim USB nicht eindeutig beantworten.
Man kann zwar mit Wissen aus dem Windows DDK (Stichwort USBVIEW-Beispiel) durchaus den Baum der USB-Geraete eruieren, aber die logische Numerierung der Ports eines Hubs muss nicht mit der physischen Portanordnung korrespondieren.

alzaimar 4. Apr 2006 14:34

Re: Barcode-Scanner und USB
 
Normalerweise verhält sich ein Barcodescanner so wie eine Tastatur. Obwohl, du sprichst ja von USB, das weiss ich das nicht. In der Industrie verwendet man typischerweise RS-232 Scanner, wenn man unterscheiden will, woher eine Eingabe stammt. Ich habe eine Komponente für RS-232 Scanner geschrieben, die einfach ein Ereignis feuert, sobald ein Scan vorliegt. Praktische Sache.

Es gibt einige Keyboard-wedge-Scanner, die schicken vor dem Barcode eine Preambel, also eine Tastensequenz, die man so auf einem Keyboard nicht simulieren kann. z.B. 3x hintereinander ein KeyDown. Das geht ja nicht per Tastatur, weil nach einem KeyDown immer ein Keyup erfolgt (bei ein und der selben Taste logischerweise). Ich habe dann einen KbdHook geschrieben, der auf die Preambel wartet. Sobald er die erkannt hat, liest er Alles bis zum Return ein und schickt dann eine Message an registrierte Fenster. Die wissen dann, das gerade jemand einen Barcode gescannt ht.

Aber was Robert Marquardt vorschlägt, wäre natürlich noch besser.

ken_jones 4. Apr 2006 14:50

Re: Barcode-Scanner und USB
 
Ich habe die Interfaces für eine Kassensoftware geschrieben und dort werden gleich alle 3 Arten von Scannern verwendet.
Aber ausser der RS232 Version kommunizierten alle anderen über das Keyboard Interface.
Dabei war es mir nicht möglich, einen USB Scanner von einem Scanner der direkt ins Keyboard Kabel geschlauft wurde zu unterscheiden. Brauchte ich auch nicht.

Wir verwenden die Voyager Scanner von Metrologic (USB) und die senden standardmässig ein SHIFT+CTRL+B+SHIFT+CTRL+B Keydown. (siehe Info alzaimar)

Dieser Code ist Programmierbar. Falls es also darum geht, 2 verschiedene USB Scanner zu unterscheiden, so können die Scanner unterschiedlich programmiert werden. (zB:ScannerA sendet SHIFT+CTRL+A, ScannerB SHIFT+CTRL+B)

Robert Marquardt 4. Apr 2006 14:55

Re: Barcode-Scanner und USB
 
USB-Barcode-Scanner melden sich traditionell als Tastaturen, damit sie als Ersatz fuer Keyboard-Wedge-Scanner dienen koennen.
Das ist Schuld der Kassensystem-Software-Anbieter, die zu faul waren ihre Programme auf USB anzupassen und stattdessen Druck auf die Barcode-Scanner-Hersteller ausgeuebt haben.
Eigentlich ist die Barcode-HID-Klasse sehr ausgefeilt und man koennte viel mehr Information ueber den Scanner erhalten als nur die ASCII-Zeichen der gescannten Codes.

Der Nachteil von WM_INPUT ist das es erst ab Windows XP vorhanden ist.

ken_jones 4. Apr 2006 16:02

Re: Barcode-Scanner und USB
 
Zitat:

Das ist Schuld der Kassensystem-Software-Anbieter, die zu faul waren ihre Programme auf USB anzupassen und stattdessen Druck auf die Barcode-Scanner-Hersteller ausgeuebt haben.
Es gibt sogar Treiber, die das Schubladenöffnungsflag invertieren, nur weil ein 3 Buchstaben Kassenhersteller ein Fehler in den Schubladen hatte. Aber das ist jetzt OT.

Also, wenn ich Robert richtig verstehe, so wäre WM_INPUT für die Abfrage der Tastatur bestimmt. Die Alternative dazu wäre dann ein Keyboardhook (a la SetWindowsHookEx(WH_KEYBOARD,@KeyboardHookProc,HIn stance,GetCurrentThreadId()); Das funktioniert auch unter W2K und anderen OS.

Robert Marquardt 5. Apr 2006 04:37

Re: Barcode-Scanner und USB
 
Ein Keyboard-Hook kann nicht erkennen woher die Daten kommen, da fuer ihn die Daten von der einzigen virtuellen Tastatur des Systems kommen.

alzaimar 5. Apr 2006 06:48

Re: Barcode-Scanner und USB
 
Hi Robert,

das stimmt, aber durch die Preambel, die der Scanner sendet, bekommt man doch den Unterschied mit. Von einer Tastatur kann die Sequenz 'A'-Down, 'A'-Down einfach nicht kommen. Ok, wenn ich zwei Tastaturen anschließe, schon :zwinker: .

jan_derer 5. Apr 2006 09:27

Re: Barcode-Scanner und USB
 
Hallo Zusammen!

Erstmal Dank für die vielen Infos und für die schnellen Antworten. Ich konnte nicht so schnell reagieren, da ich gestern Nachmnittag dauernd unterwegs war.

Das mit WM_INPUT geht leider nicht (weil wie schon gesagt erst ab XP), weil das System auf 2K laufen soll.

Das mit der programmierbaren Preamble klingt super. Das geht aber nicht für jeden Barcode-Scanner oder? Liefert Metrologic eine Software dazu?
Wird die Preamble zusammen mit den eingescannten Daten gesendet? Ist das ein Datenpaket? Wichtig ist für mich, falls die ungünstige Situation kommen sollte, dass zwei Barcode-Scanner gleichzeitig etwas einscannen, dass unterschieden werden kann von wem die Daten sind.

Greetz
Jan

Robert Marquardt 5. Apr 2006 09:45

Re: Barcode-Scanner und USB
 
Zitat:

Zitat von jan_derer
Das mit der programmierbaren Preamble klingt super. Das geht aber nicht für jeden Barcode-Scanner oder? Liefert Metrologic eine Software dazu?
Wird die Preamble zusammen mit den eingescannten Daten gesendet? Ist das ein Datenpaket? Wichtig ist für mich, falls die ungünstige Situation kommen sollte, dass zwei Barcode-Scanner gleichzeitig etwas einscannen, dass unterschieden werden kann von wem die Daten sind.

Metrologic? Keine Ahnung. Mal auf der Webseite nachschauen.
Ich glaube du solltest erst mal genau sagen welche Barcode-Scanner eingesetzt werden sollen. Ist das auf Metrologic begrenzt?
Was ich auf der Metrologic-Webseite gelesen habe ist nicht ermutigend. Es scheint keine USB-Scanner zu geben.

Die Praeambel ist Teil der gesendeten Daten und alles besteht aus WM_KEYDOWN- und WM_KEYUP-Messages, da es sich ja um eine Tastatur handelt.
Was passiert wenn jemand gleichzeitig mit zwei Barcode-Scannern scannt ist unklar. Vermutlich koennen sich die Sequenzen vermischen.
Die Scanner unterscheidet man dadurch das man ihnen unterschiedliche Praeambeln verpasst.

Mit echten HID-Barcode-Scannern hat man die Probleme nicht, da man diese direkt liest. Man weiss immer das die Daten von einem bestimmten Geraet sind.
Die Zuordnung zu einem physischen Geraet koennte allerdings schwierig werden. Man sollte darauf achten das die Geraete USB-Seriennummernstrings haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz