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
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?
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
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 :-)
> 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.
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.