Hallo, ich versuche, einen Epson-Nadeldrucker direkt anzusteuern. Dazu benutze ich die sogenannten ESC/P-Sequenzen. Das funktioniert soweit auch. Nur das absolute horiz. Positionieren des Druckkopfes ignoriert er einfach. Was könnte ich übersehen? Getesteter Beispielcode: #define ESC 27 #define CR 13 print(ESC); // print() ist die Fkt. zum Zeichensenden an LPT print('@'); // Druckerreset print(ESC); print(36); // 36=='$'==Befehl zum absolutsetzen d. Kopfes print(55); // ->55" * (1/60) nach rechts (erster Parameter) print(0); // ->0" * (256/60) nach rechts (zweiter Parameter) print('A'); print(CR); // Druckt brav ein 'A'. Leider ganz links :-( Vielleicht hat ja jemand ne Idee (Jumper vom Drucker hab ich schon überprüft) Thx & Gruß - Frank
Nachtrag: Läuft unter reinem DOS und Ziel ist, den Drucker quasi als Analogschreiber laufen zu lassen.
Hmm. Nicht jeder Epson-Nadeldrucker verwendet exakt den selben Befehlssatz - auch wenn Epson das hochtrabend "ESC/P" nennt. Hast Du "ESC $ n m" dem Druckerhandbuch Deines Druckers entnommen oder kommt diese Information aus einer anderen Quelle? Welcher Drucker ist's überhaupt? Ich habe im Büro noch Unterlagen von sehr alten Epson-Druckern, MX/RX/FX-80 und könnte da morgen mal 'reinsehen.
Hey Rufus, der Drucker ist derzeit ein alter FX-85 und "ESC $ n m" stammt aus dem Handbuch für den FX-85/FX-105. Allerdings wird später dann ein neuer "ESC/P-kompatibler" zum Einsatz kommen. Ich werde den Versatz nach rechts vielleicht besser durch Leerzeichen erzeugen und auch sonst möglichst wenig Befehle nutzen, wenn der Befehlssatz erfahrungsgemäß nicht so verlässlich ist.... Danke & Gruß Frank
Mit was für einer Art von Programmiersprache machst Du das? Vielleicht kann die ja beispielsweise keine 0 an den Drucker senden .. Probier' mal aus, statt 0 1 zu senden: (mir ist klar, daß dann der Versatz zu breit ist) 0x1b 0x24 0x36 0x01 27 37 55 1 Diese Codesequenz könntest Du auch mal mit 'nem Terminalprogramm an den Drucker senden und sehen, was dann passiert. (die 1 wird mit Ctrl+A erzeugt) Ansonsten: Wie steht der Dip-Schalter SW1-4? (Ja, ich hab' hier das FX85/105 Manual)
Mach auch mal eine Pause zwischen Reset an Drucker und Versatz Vielleicht überliest er wegen Reset die ESC-Sequence Wenn alles nicht Hilft: Greif mal im Grafikmodus zu Gruss
Hallo, ich codiere in C, GNU-Compiler ist DJGPP (mit Allegro-Library für Grafik und DZCOM-Library für serielle Schnittstelle und FIFO-Queues). Proggi läuft im protected-mode. Die Daten für den Drucker werden in einen FIFO geschrieben und dieser an die im BIOS als ECP eingestellte par. Schnittstelle gegeben, sofern die Daten aufnehmen kann (Drucker bereit bzw. der 16 Byte-ECP-Puffer nicht voll. ECP verhält sich dem Drucker gegenüber wie ne normale SPP-LPT) und die Software gerade Zeit dafür hat. An einer Pause wird es leider net liegen, denn Sequenzen (Schriftart einstellen, Text ausgeben) vor der Absolutwertsetzung funktionieren. Der DIP SW1-4 steht auch auf ESC/P (vorsichtshalber beide Stellungen probiert) Als Parameter hab ich auch mal 0x1b 0x23 0x01 0x01 27 36 1 1 probiert. Allerdings hast Du "27 <b>37</b> n1 n2" geschrieben. In meinem Buch steht dort "27 <b>36</b> n1 n2" ?!?! Grafik kann ich ausgeben, aber ebensowenig positionieren. Schon komisch, sonst macht der Drucker alles was man ihm sagt... Dank Euch für Eure Ideen - falls ich's hinkriege, poste ich die Ursache. Gruß Frank :-)
37 statt 36 wird ein Typo gewesen sein - ich denke nicht in Dezimalzahlen. Versuch nochmal ESC $ Ctrl-A Ctrl-A also 0x1b 0x24 0x01 0x01 an den Drucker zu senden; ESC # macht sicherlich was anderes. Meinen Tip mit dem Terminalprogramm kannst Du nicht ausprobieren, weil der Drucker an der Parallelschnittstelle hängt. Trotzdem ist ein Test recht einfach: Datei mit einem Hexeditor erzeugen und mit copy datei /b prn: an den Drucker senden. (Notfalls statt prn lpt1 oder lpt2 angeben.) Allerschlimmstenfalls kannst Du Dir behelfen, in dem Du "weiss" druckst, also Drucker in Graphikmodus stellen und n "leere" Bytes drucken. ESC * Ctrl-@ n1 n2 [n * Ctrl-@] (Ctrl-@ steht für 0x00) 8-Bit-Graphikmodus mit 60 Punkten/Zoll n1 = n % 256 n2 = n / 256 Für 4 Bytes also 0x1b 0x2a 0x00 0x00 0x04 0x00 0x00 0x00 0x00 n1 n2 Die "native" Auflösung des Druckers ist übrigens 1/72", damit ist der horizontale Punktreihenabstand gleich dem durch den Druckkopf fest vorgegebenen vertikalen. Statt ESC * Ctrl-@ ist dann ESC * Ctrl-E zu verwenden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.