Barcode Scanner mit Etiketten Drucker

  • Hallo zusammen,

    Einsatzziel wäre es beim Scannen des Auftrages direkt die passenden Etiketten drucken zu können.

    Auftragsblätter besitzen einen Barcode:

    Dieser wird per Scanner gesannt. Wie jeder dieser einfachen billigen Scanner haben die einen USB Anschluss und werden als HID Keyboard erkannt und tippen das gescannte einfach in das offene Fenster.

    Die Etikette wird über einen Brother Drucker gedruckt mit der Software P-Touch Editor.

    Die ist so fortgeschritten das sie Datenbanken und Excel dokumente unterstützt.


    Mein eigentlicher plan ist:

    Ich schreibe einen überwacher der im Hintergrund immer auf Spezialtasten kombination CTRL+ALT+1 (oder so ähnlich) achtet, dann bei eingabe die P-Touch Software öffnet und ein eingabefeld für den Barcode öffnet.

    Alles kein Problem. Ausser das man nun entweder vorher eine Tastenkombination eintippen muss oder einen zweiten Barcode abscanen der die Tastenkombi auslöst.

    Nun kommt meine geniale Idee.

    Da der Barcode IMMER mit TZProduktion- anfängt müsste es doch eigentlich möglich sein sobald der Scanner die Tasteneingabe "TZproduktion-" erkennt den resten zu speichern, P-Touch Editor zu öffnen, Suche nach Barcode in der Datenbank, Etikette drucken. Fertig.

    Und nun erkennt ihr sicher auch mein Problem.

    Es findet sich beinahe nichts dazu wie ich auf eingabe von String XYZ warte und dann den zweiten Teil davon zwischenspeichere.

    Hat vielleicht jemand Tipps dazu was das einfachste vorgehen wäre? oder vorlagen wo sowas ähnliches schon läuft?


    mfg

  • Moin.

    Bitte einmal das Skript posten, so weit Du es fertig hast.
    Dann geht es evtl. besser mit dem helfen !!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Warum so kompliziert?

    Also am einfachsten wäre, du hast eine GUI mit nur einem Input, wo du "reinscannst", davon abhängig läuft dann der Rest.

    Würde da etwas dagegen sprechen?

  • Also am einfachsten wäre, du hast eine GUI mit nur einem Input, wo du "reinscannst", davon abhängig läuft dann der Rest.

    Das ich somit auf dem PC an dem der Drucker hänget IMMER das Inputfenster offen und fokusiert haben muss damit es funktioniert.

    Da der Scanner eine USB Basisstation hat aber selber Wireless ist und somit NICHT immer direkt neben dem PC steht, könnte das evtl probleme geben.

    Aber ja... eigentlich ein gutes Argument.

    Wenn ich das andere nicht hinbekomme wirds wohl auf das heraus laufen.

  • Alternativ wäre eine art keylogger (alle Zeichen der Tastatur mitloggen (TAB/Leertaste macht ein Reset der Daten) und immer prüfen ob der eingegebene String deiner Erwartung entspricht) aber ob das Sinnvoll und im Unternehmen erlaubt ist, sei mal dahin gestellt.

  • Aber blöde Frage: Wie arbeitet der Scanner?

    Wir haben das beim Zebra (gleiches Setup), das der Scanner erst die gescannten Datenüberträgt, wenn er in die Station gesteckt wird.

    Oder überträgt der DeLock diese kontinuierlich?

  • Natürlich Kontinuierlich.

    Ist ja schliesslich ein WIRELESS Scanner. Wenn du abdrückst kommt der Input so gut wie ohne verzögerung.

    Für das wenig geld echt ein cooles ding. Nur wie gut der Akku hält müssen wir noch testen.

  • Hi,

    vor nicht allzu langer Zeit hatte jemand eine ähnliche Anfrage. Das wurde dort von Oscar mit einem Keyboardhook gelöst. Der Code kann relativ einfach auf dein Problem umgebaut werden. Einfach das Fenster weglassen und in der _KeyProc die Tasten erfassen. Dabei immer weiter in eine Variable schreiben, bis der Inhalt von dem gewollten Pattern abweicht. Bei einer Abweichung den Anfang wegnehmen, bis zum nächsten möglichen Anfang des Patterns.

    Den Code findest du hier: RE: Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    Falls du das selbst nicht anpassen kannst, meld dich gerne wieder.

    MfG, Kanashius

  • Ohhh danke für den Hinweis!

    Ich sehe schon das Oscar hier eine wundervolle Vorlage erstellt hat.

    Gehe ich korrekt in der Annahme dass das alles darauf basiert das der Scanner (hier in diesem falle mit F2 und Enter) sämtliche Scans einkapselt?

    Ich sehe zwar noch nicht wie das GUI aufgerufen wird, aber so wies ausschaut sollte ich mit der "Func _StatusSave($sBuffer)" eigentlich an den Barcode rankommen.

    Werde das morgen in aller Frische mal versuchen! Hab iwo noch ne fette anleitung des Scanners, wenn probieren nicht hilft sollte vielleicht da noch stehen welche Pre/Postfix der verwendet.


    Danke.

  • Hi,

    Ich hatte gerade Zeit und fand das ganze interessant, also hab ich das mal mit Pattern-Matching umgesetzt.

    Das Fenster ist optional, ich habs nur zum Anzeigen und Testen drin.

    In der Funktion _barcodeFound kannst du dann mit dem Code machen, was du möchtest. (Also auch dein Programm öffnen,...).

    Ich lese alle 0-9, A-Z und - Zeichen ein und füge sie zum Buffer hinzu. Wird eine andere Taste gedrückt, wird der Buffer zurückgesetzt, oder der Barcode als erkannt gemeldet (je nachdem, ob das Pattern passt oder nicht).

    Das betrifft auch Tasten wie SHIFT. Falls dein Scanner Groß/Klein-schreibung beachtet musst du evtl. den Code für SHIFT ignorieren, um nicht zurückzusetzen (Zeile 55). Dementsprechend ignoriert der Code auch Groß/Klein-Schreibung beim Pattern.

    Der Buffer hat max. 200 Zeichen, das ganze Funktioniert also nur, wenn dein Code weniger als 200 Zeichen hat. Ggf. musst du den Buffer anpassen, bis es für dich passt.

    Ich hab dabei auch festgestellt, dass man nicht einfach den KeyCode zum vergleichen verwenden sollte. Ich nutze eine Tastatur mit US-Layout und das - hat dort den vkCode 189 und nicht 45. Deshalb nutze ich die _WinAPI_MapVirtualKey um den Virtuellen Keycode auf den eigentlichen KeyCode umzuwandeln. Sollte man also immer machen; man weiß ja nie, was für eine Tastatur grad angeschlossen ist.

    Ich hoffe das hilft dir weiter :)

    MfG, Kanashius

  • Das betrifft auch Tasten wie SHIFT. Falls dein Scanner Groß/Klein-schreibung beachtet musst du evtl. den Code für SHIFT ignorieren, um nicht zurückzusetzen (Zeile 55). Dementsprechend ignoriert der Code auch Groß/Klein-Schreibung beim Pattern.

    Scheint so als würde er mit Shift machen und mit Tab beenden.

    Shift wird VORHER getriggert, also wenn ich nur nach "Produktion" suche findet er dies...

    "FOUND: PRODUKTION-22103748-101"

    Okay... ich seh ich hab wesentlich weniger Ahnung als ich gedacht habe^^

    Irgendwie muss da also im Else der Ignore Shift befehlt eingebaut werden....

    Grossklein schreibung ist zum glück eh irrelevant.

  • Natürlich Kontinuierlich.

    Ist ja schliesslich ein WIRELESS Scanner. Wenn du abdrückst kommt der Input so gut wie ohne verzögerung.

    Für das wenig geld echt ein cooles ding. Nur wie gut der Akku hält müssen wir noch testen.

    Naja, das kommt auf den Anwendungsfall wie man Wireless definiert an.

    Beispiel 1:

    Der Scanner ist per Basis, Dongle, BT mit dem PC/Kasse/Smartphone,... verbunden und überträgt die gescannten Daten direkt.

    Beispiel 2:

    Du gehst zum Scannen außerhalb der Reichweite (anderes Lagerhaus, Keller,...), scannst Kartons etc. (die gescannten Daten werden dann im Scanner gespeichert) und packst ihn dann zum Auslesen in die Station, wo diese dann vom PC verarbeitet werden müssen. Das wäre auch eine Form von Wireless arbeiten.

    Aber an die schon existierende (Teil)-Lösung von Oscar hatte ich garnicht mehr gedacht. Gut das Kanashius das noch wusste ;)

  • Okay... ich seh ich hab wesentlich weniger Ahnung als ich gedacht habe^^


    Irgendwie muss da also im Else der Ignore Shift befehlt eingebaut werden....

    In Zeile 51 findest du den Aufruf der Methode Chr(). Wenn du die Hilfe dazu öffnest (anklicken und F1), dann Findest du unter "Remarks" einen Link zur ASCII Character Code table. Da stehen die Zahlen zu allen Zeichen drin.

    Ansonsten kannst du auch einfach nach Zeile 47 ein ConsoleWrite($iKeyCode&@crlf) einfügen. Dann bekommst du die Ausgabe des Zahlencodes, wenn du die Taste drückst und kannst einfach ausprobieren ;)

    In diesem Fall würde ich einfach das Else in Zeile 55 (Zeile 9 in dem Ausschnitt, den du gepostet hast) abändern zu ElseIf $iKeyCode<>0 Then. Damit sollten alle Tasten, die nichts ausgeben (wie SHIFT, ALT,...) keinen Unterschied mehr machen.

  • Ansonsten kannst du auch einfach nach Zeile 47 ein ConsoleWrite($iKeyCode&@crlf) einfügen.

    Ohhh.... Das ist eine geniale idee.

    Das mit den ASCI -> Char hab ich im internet gefunden für 0-9 und A-z aber Shift war da nicht dabei.

    Macht ja auch sinn wenn das 0 ist.

    Die Methode mit ElseIf hat funktioniert!

    Tausend dank.


    Ich kann eigentlich das ganze P-Touch mit ControlClicks steuern. Machts recht bequem.