Delphi-PRAXiS

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.

alzaimar 5. Apr 2006 09:49

Re: Barcode-Scanner und USB
 
Also wenn zwei Scanner angeschlossen werden sollen, dann nimm doch einfach RS-232. Das ist die sauberste und imho beste Lösung. Da die Scanner (laut Robert) nicht immer die USB-spezifikation unterstützen, würde ich da nicht weiter machen.

Ich bin kein USB-Experte (im Gegensatz zu Robert), aber soweit ich ihn verstanden habe, kannst Du zwar versuchen, über die HID-Schnittstelle die Scanner anzusprechen, aber dann machst Du dich auch abhängig vom Scannerhersteller. Metrologic ist zwar solide und gut, sind aber in der Handhabung manchmal nervig (automatisches Auslösen von Scanvorgängen über Distanzsensor). Was ist, wenn 2D-Barcodes gelesen werden sollen? Was hat Metrologic im Programm? Ist Datalogic nicht besser? Etc. Etc.

Geht es nicht mit RS-232?

Und was die Vermischung der Präambel-Sequenzen anbelangt, würde ich vermuten, das alles total durcheinanderverwurstet wird. Es gibt in der Keyboard-Schnittstelle ja keine Frames, insofern sind alle Tastendrücke isoliert und nicht zuordenbar...

jan_derer 5. Apr 2006 10:03

Re: Barcode-Scanner und USB
 
Hi Robert!

Prinzipiell ist die Herkunft (Firma) des Barcode-Scanners vollkommen egal.

Super wären folgenden Eigenschaften:
1. Sollte über USB angeschlossen werden können (an einem Computer sollen bis zu 10 Scanner hängen)
2. Die Scanner sollen eindeutig erkannt werden können mittels einer festen bzw. konfigurierbaren ID
3. Die Scanner sollten "Datenpakete" verschicken in der Art: ID+Gescannter_Wert. Das Datenpaket sollte nicht durch andere Datenpakete von andere Scanner beeinflusst werden können.

Im schlimmsten Fall würde wahrscheinlich auch RS232 gehen ...

Greetz
Jan

alzaimar 5. Apr 2006 10:31

Re: Barcode-Scanner und USB
 
Noch einmal will ich mich einmischen: Wir installieren ständig irgendwelche Scanner mit Arbeitsstationen, aber 10 Scanner hab ich noch nie an eine WS angeschlossen. Warum? Weil man ein Feedback zum Scan benötigt. Nur weil der Scanner IRGENDWAS liest, heisst das noch nicht, das der Barcode korrekt gelesen wurde. Oder das der gelesene Artikel in der Datenbank ist. Oder Oder Oder. Ich frage mich, wie man das bei 10 Scannern hinbekommen will...

Wenn die Scanner allerdings z.B. an einem Förderband installiert sind, würde ich RS-485 oder Siematic, CanBus etc. verwenden, das sind die in der Industrie üblichen Protokolle, oder ist USB inszwischen Standard?

jan_derer 5. Apr 2006 10:41

Re: Barcode-Scanner und USB
 
Hi alzaimar!

Du liegt vollkommen richtig. Es ist eine Förderband-Anwendung. Hierbei sollen einfach nur Kartons eingescannt werden von verschiedenen Arbeitsstellen. Und das warst fast schon. Daher sollen mehrere an einem Rechner hängen.

Das ganze muss nicht unbedingt mit USB laufen (ist halt Kundenwunsch). Mit RS485 oder Siematic habe ich noch nie gearbeitet, kannst du mir ein paar Worte zu sagen?

Greetz
Jan

Robert Marquardt 5. Apr 2006 10:51

Re: Barcode-Scanner und USB
 
Na da ist doch schon viel mehr Info da.
Wie weit sind die Barcode-Scanner vom PC weg?
USB kann maximal 25 Meter ueberbruecken und das nur mit mehreren Hubs dazwischen von denen die Haelfte eigenen Strom brauchen.
Insgesamt klingt das nach Industrieeinsatz und da sollte man doch eine zuverlaessigen Industrie-Bus einsetzen.

alzaimar 5. Apr 2006 11:00

Re: Barcode-Scanner und USB
 
Na, ja Siematic ist eine ziemlich geile Angelegenheit: Du brauchst aber spezielle Controller. Die kann man programmieren, sodass man die ganze Steuerungslogik dort abwickeln kann. Zum PC kommen dann nur bestimmte Daten (die man wieder programmtechnisch selektieren kann). 10000000 fach im Einsatz und erprobt. Aber man hat immer einen Overhead von 1-2k Euro. Und man muss sich vorher schon damit beschäftigt haben.

RS-485 ist sowas wie abgeschirmetes 3-Draht RS-232 , wobei die Geräte eine eigene ID besitzen. Die wird immer mitgeschickt, sodaß man genau weiss, von wem was kommt. Ich habs nicht mehr im Kopf, aber ich glaube, sobald ein Gerät etwas senden will, blockiert es für die anderen Geräte die Leitung. Du bekommst also automatisch auf der RS-485 Schnittstelle sowas wie'ID-Data' Pakete.

Du benötigst dazu eine RS-485-Karte, das ist eigentlich Alles.

Alternativ kannst Du dir auch RS-232-LAN Converter zulegen und die Scanner per RS-232 einfach ins LAN hängen. Die Identifizierung erfolgt über die zugewiesene COM-Schnittstelle oder (noch nicht probiert), wenn man direkt mit dem Converter redet, über die IP-Adresse.

RS-485 wäre die Lösung für Elektroniker der alten Schule, RS-232/LAN Converter was für IT-Spezis.

Beides ist imho sehr sauber.

jan_derer 5. Apr 2006 12:35

Re: Barcode-Scanner und USB
 
Sorry, das ich manchmal Infos vergesse hin zuschreiben :) ...

So spontan ist die RS232/LAN Variante nicht schlecht ... muss nur mal preislich schauen ... so spontan habe ich einen für 140 € gefunden. Kann man auch Daten zurücksenden, damit der Barcode-Scanner ein Beep von sich gibt? Bin mit Barcode-Scannner nicht sooo bewandt.

Gibt es alternativ auch eine WLAN Variante?

Greetz
Jan

ken_jones 5. Apr 2006 12:38

Re: Barcode-Scanner und USB
 
Zitat:

Zitat von Robert Marquardt
Was ich auf der Metrologic-Webseite gelesen habe ist nicht ermutigend. Es scheint keine USB-Scanner zu geben.

Hab jetzt nicht auf der Webpage geschaut, aber wir haben eben den Voyager Scanner als USB Version von Metrologic im Einsatz. Geben tut es sie schon.

Zitat:

Zitat von Robert Marquardt
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.

Leider 2x Ja. Mit Preambel unterscheidet man komplette Scans. 2 gleichzeitige Scans können sich leider vermischen. Häufig sendet ein Scanner den Code in 2 Paketen. Also nicht tauglich für deine Anforderung.

Robert Marquardt 5. Apr 2006 13:11

Re: Barcode-Scanner und USB
 
Jetzt sollte geklaert werden ob es mit USB ueberhaupt geht.
Die Laengenbegrenzung fuer ein USB-Kabelsegment ist 5 Meter. Es muss dann ein Hub kommen der weitere 5 Meter Segment bereitstellt.
Es sind maximal 5 Hubs erlaubt wobei der Roothub mitzaehlt. Damit kommt man auf maximal 25 Meter.
Da der Roothub ueblicherweise 500 mA bereitstellen kann, muessen dann noch Hubs 3 und 5 mit eigener Stromversorgung sein.
Die Laengenbegrenzung auf 5 Meter kommt nicht von elektrischer Signalqualitaet sondern von fehlender Terminierung des Busses.
5 Meter sind so gewaehlt das man ohne Echocancellation auskommt. Es ist also eine Begrenzung der Signallaufzeit.

Alles in allem glaube ich nicht das USB geeignet ist.

jan_derer 5. Apr 2006 13:17

Re: Barcode-Scanner und USB
 
Man könnte in der aktuellen Ausbaustufe zwar schon solch einen Baum erzeugen. Nur wenn es vollausgebaut ist, wäre es ein Problem (das soll auch das Ziel sein).
Die LAN Variante klingt verlockend, da viele Maschinen vor Ort ebenfalls über das Ethernet verbunden sind und die Infrastruktur vorhanden wäre.

greetz
Jan

Union 5. Apr 2006 17:34

Re: Barcode-Scanner und USB
 
Hallo,

die einzigen Möglichkeiten bei so vielen Scannern sehe ich entweder in RS422/RS485 mit Versenden von IDs der einzelnen Scanner als Präambelk der Datenpakete. Dadürch können die Daten auch bei bis zu 99 oder 255 Scannern (je nach Implementation des Protokolls) nicht durcheinander geraten. Innerhalb eines bestimmten Zeitfensters muss man dem Scanner ein ACK zurückschicken. Es gibt auch welche mit Display, so dass man über Herstellerspezifische Protokolle Texte, Töne, LED etc. am Scanner steuern kann.

Technisch wird so ein Netz dann über einen Konverter dann an RS232 eines PC angeschlossen. Ich habe sowas bei einem Automobilzulieferer im Lager realisiert. Dabei kam die Dragon Serie von DL zum Einsatz mit Funkrelais. Dort gibt es sogar zwei IDs: Eine des Scanners und eine des gerade aktiven Access Points.

Es gibt aber in zwischen auch Scanner, die sich als Web-Clients über WLAN an einen Server wenden.

jan_derer 6. Apr 2006 08:12

Re: Barcode-Scanner und USB
 
Hallo Union!

Nun kommt eine bescheidene Frage. Gibt es RS485 Scanner oder hängt man RS232 Scanner einfach an einem RS485 Controller?

Grüße
Jan

Union 6. Apr 2006 10:56

Re: Barcode-Scanner und USB
 
Das waren in dem Fall Funkscanner. Die Access points waren über RS485 in einem Bus vernetzt. Am Ende des Bus hing dann der Konverter RS232.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.

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