Forum: Mikrocontroller und Digitale Elektronik Signale eines USB-Druckers (Alarm / Meldedrucker) abgreifen


von Darkwolf (Gast)


Lesenswert?

Hallo liebe µC-Freunde,

ich möchte gerne einen "Datagrabber" entwickeln, welcher die Druckdaten 
abgreift, welche von einem PC an einen Alarm/Meldedrucker gesendet 
werden.

Dieser Drucker wird über die USB Schnittstelle angesprochen.

Ich bin schon einige Zeit am überlegen, wie man das realisieren könnte.
Über den Parallelport wäre ja nicht so schwer, aber USB...

Die gesammelten Daten sollen über ein Netzwerk-Modul (evtl. 
Fertigbaustein) herausgegeben werden, zunächst würde aber RS232 reichen.

Gibt ja einige µC mit USB Funktionalität, aber irgendwie fehlt mir ein 
Ansatz, ich will nämlich nicht in den PC eingreifen (Software oder 
Treiber einspielen)

Ideen:
1.) Signale D+ / D- einfach abgreifen:
Meiner Meinung nach nicht ralisierbar, da die Daten zu schnell 
durchrauschen, und keine Signale wie beim Parallelport zum Bremsen 
vorhanden sind (ACK,BUSY). Außerdem sind die Datem NRZI kodiert und 
haben einen erheblichen Protokoll-Overhead (nicht so rein wie bei LPT).
Der µC würde bestimmt nicht schnell genug reagieren. (Interruft Response 
Time) und der Buffer...

2.) Vom PC in den µC, dort die Daten verarbeiten (RS-232), und wieder 
raus zum Drucker über USB Hostcontroller Board Z-USB v3.0, welches vom 
µC angesteuert wird.
Problem: Der µC gibt sich nicht als Drucker gegenüber des PC´s aus 
(Vendor ID), somit wird der Druckertreiber wohl meckern...

Jemand eine Idee? Muss ja nicht unbedingt ein µC sein...

Darkwolf

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Darkwolf schrieb:
> 2.) Vom PC in den µC, dort die Daten verarbeiten (RS-232), und wieder
> raus zum Drucker über USB Hostcontroller Board Z-USB v3.0, welches vom
> µC angesteuert wird.

Das wäre ein gangbarer Weg.

> Problem: Der µC gibt sich nicht als Drucker gegenüber des PC´s aus
> (Vendor ID), somit wird der Druckertreiber wohl meckern...


Allerdings kannst Du auch dieses Problem umgehen, indem Du einen µC 
verwendest, der einen USB-Device-Controller enthält. Auf diesem 
implementierst Du die Standard-USB-Geräteklasse für Drucker und 
verwendest (etwas frei am Standard vorbeiimplementiert) die 
PID/VID-Kombination des Druckers, den Du über einen separaten 
USB-Host-Controller wie den Vinculum ansteuerst.

Wenn Du Dein Gerät geschickt aufbaust, verbindet es sich erst dann mit 
dem Host-PC, wenn es vom eigenen Hostcontroller mitgeteilt bekommen hat, 
daß ein Drucker angeschlossen ist, und meldet dessen VID/PID an den PC 
weiter. Das wäre etwas eleganter, als die VID/PID-Kombination fest in 
Deine Firmware einzubauen, denn die müsste geändert werden, wenn der 
Drucker geändert wird.


Was Du jedoch beachten musst, bevor Du anfängst, Dinge zu entwickeln: 
Wird der Protokolldrucker denn überhaupt mit einem zeichenorientierten 
Protokoll angesteuert oder ist das ein "Windows-Drucker", der Text als 
Vollgraphik druckt?

In letzterem Falle wird die Auswertung von im Druck enthaltenen Texten 
erheblich komplizierter, weil Du dann auch "mal eben" eine OCR in 
Deinem µC implementieren müsstest.

Was ist das für ein Drucker und was ist das für ein System, an dem der 
Drucker betrieben wird?

von STK500-Besitzer (Gast)


Lesenswert?

Den Drucker über einen USB-Printerserver umleiten und den Printerserver 
entsprechend manipulieren.
Oder den Drucker manipulieren...

von Thomas (Gast)


Lesenswert?

nun der einfachste Weg wäre wohl einen kleinen Filtertreiber zu
installieren und die Daten direkt dort abzugreifen.
Das setzt allerdings Kenntnisse in der Treiberprog. vorraus.
MS hat ein Beispiel im DDK wie das geht.

Vorteil:
kommt ganz ohne HW aus.
Nachteil:
ohne Erfahrung mit dem DDK wohl unmöglich in annehmbarer Zeit zu
realisieren.

Thomas

von Darkwolf (Gast)


Lesenswert?

Das mit dem Filtertreiber wäre eine Möglichkeit, aber ich will nicht in 
das system eingreifen.

Außerdem habe ich mit der Windows Treiberprogrammierung keine Erfahrung.

@Rufus t. Firefly
Der Drucker ist ein übrigens EPSON EPSON LX-300+II.

Das System ist ein HP Computer mit CANBUS Karte, sonst Standard.

Suche gerade, was für ein Protokoll der Drucker spricht.
OCR kannst du natürlich vergessen :-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> EPSON LX-300+II.

Das ist ein 9-Nadel-Drucker. Der wird mit hoher Wahrscheinlichkeit nicht 
im Vollgraphikmodus drucken (das würde ewig dauern), sondern tatsächlich 
nur Text drucken.

Das aber vereinfacht die Angelegenheit ganz erheblich, da der Drucker 
auch über andere Schnittstellen als USB verfügt.

Für Dein Projekt benötigst Du nur noch ein USB-zu-Paralleldrucker-Kabel, 
das Du mit dem Parallelport ("Centronics-Schnittstelle") des Druckers 
verbindest. Dazwischen klemmst Du einen einfachen "Mithörer", der an 
folgenden Leitungen der Schnittstelle angeschlossen werden muss:

D0-D7 (Datenleitungen), Strobe und Masse.

Der µC wertet Flanken auf der Strobe-Leitung aus (kann 
interruptgesteuert erfolgen) und liest an einem Port den aktuellen 
Zustand der Datenleitungen ein.

Et voilà, da sind die Druckdaten. Für jedes übertragene Byte wird einmal 
an der Strobe-Leitung gewackelt, so daß Du in Deinem µC problemlos die 
Daten auswerten kannst.

Die in den Drucker eingebaute USB-Schnittstelle unterscheidet sich nicht 
essentiell von einem USB-zu-Paralleldruckeradapter; sofern es sich um 
ein Windowssystem handelt, wird man nur in den Druckereigenschaften 
einmal einstellen müssen, daß der Anschluss jetzt halt anders heißt.

von Frederik K. (n0ll4k)


Lesenswert?

Kommen die Daten die an den Drucker gehen zufälligerweise über den CAN 
Bus rein?

Wäre evtl auch noch eine Möglichkeit...

von Darkwolf (Gast)


Lesenswert?

Nein, dadurch wird der PC mit den Unterstationen der Anlage verbunden.

Diese melden nur die aktuellen Werte, ob Alarm oder nicht, wird im PC 
entschieden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.