Hallo,
ich habe hier einen Nadeldrucker um Paketscheine zu beschriften. Mit
einigen Tricks habe ich den Drucker dazu gebracht im gewünschten
Zeilenabstand zu drucken und mit die Paketscheine richtig auszufüllen.
Das ganze läuft unter XP und mit einem Word Makro.
Jetzt habe ich versucht den Drucker unter Vista und Win7 zum laufen zu
bringen.
Der Drucker ist übrigends ein ND77 von Siemens Nixdorf (kompatibel zum
Epson TM-U950). Dafür habe ich Vista 32 bit und Win 7 32 und 64 bit
Treiber gefunden. Keine von den Treibern funktionieren, leider.
Da mich das langsam echt aufregt, und der NUR zwei Adressen drucken
soll, hab ich mir folgendes überlegt.
Ich nehme einen µC und schließen dessen UART an seine Serielle
Schnittstelle an, und der sorgt für die Fachauswahl, Formatierung, etc.
In den µC kommen nur die reinen Textdaten (also Name, Adresse...)
Nun stellen sich folgende Fragen:
-Welche Schnittstelle kann ich unter Windows 7 für den Output verwenden?
RS232 geht irgendwie nicht so recht (wobei ich meinen Programmer mit
neuinstallation des Comports mal zum laufen gebracht habe)
USB geht sicherlich irgendwie, bloß wie...
Dann welche Sprache soll ich verwenden? Ich kann bisher nur C (reine
Konsolenanwendungen und für µC's) und etwas VB, was aber für Win7 wohl
der Oberschwachsinn ist.
Wäre nett wenn mir jemand ein paar Tipps geben könnte.
Danke
wo ist das Problem? Du brauchst doch für so ein drucker keinen Treiber.
Schließe ihn einfach in den Comport oder einen USB zu Serial wandler an
und schicke die kommandos an diesen comport. Die Druckerbefehle sollte
im Handbuch zu drucker stehen.
mike schrieb:> Ich nehme einen µC und schließen dessen UART an seine Serielle> Schnittstelle an, und der sorgt für die Fachauswahl, Formatierung, etc.> In den µC kommen nur die reinen Textdaten (also Name, Adresse...)
Das ist unnötig viel Aufwand. Den Drucker kannst Du unter jeder
Windows-Version problemlos über die serielle Schnittstelle ansteuern. Du
darfst nur nicht versuchen, über einen Windows-Druckertreiber zu
drucken, Du musst die serielle Schnittstelle aus Deinem zu schreibenden
Programm direkt ansteuern und die für den Drucker relevanten
Steuerzeichen an den Drucker senden.
Diese Vorgehensweise ist seit etlichen Jahrzehnten die übliche.
Du musst allerdings eine Programmiersprache/-Umgebung verwenden, in der
Du mit der seriellen Schnittstelle kommunizieren kannst, Word-Macros
scheiden da eher aus.
Wobei Du --für erste Gehversuche-- die Sache auch zweiteilen kannst:
Erzeuge mit der Programmiersprache Deiner Wahl eine Datei, in der alle
Steuerzeichen etc. drin sind, die Du an den Drucker senden möchtest.
Diese kannst Du mit
1
copy datei.dat COM2 /b
an die serielle Schnittstelle ausgeben (statt COM2 natürlich den
richtigen Namen angeben; ist die Nummer der Schnittstelle größer als 9,
musst Du statt COM10 die Schreibweise \\.\COM10 verwenden).
Vorher musst Du mit
1
mode COM2
die Schnittstellenparameter so konfigurieren, wie sie der Drucker haben
will, also Baudrate, Handshake etc. einstellen.
Hilfe dazu gibts mit
1
mode /?
Wenn das klappt, kannst Du die Ansteuerung der seriellen Schnittstelle
auch direkt in Dein Programm integrieren, wie man serielle
Schnittstellen unter Windows programmiert, dürftest Du in etlichen
Threads hier im Forum finden können.
Ah ja, wie kommen denn die Zeichen in die *.dat Datei rein? Einfach als
Ascii code?
Also beispielsweiße 27 105 sollte das Papier schneiden?
Funktionier nämlich nicht so recht
mike schrieb:> Ah ja, wie kommen denn die Zeichen in die *.dat Datei rein? Einfach als> Ascii code?
nein als hex oder binary. also für die 27 darf nur ein byte mit dem wert
27 reingeschrieben werden - ein ESC. Notepad++ kann sotwas machen. Oder
jeder andere Hexeditor.
Ok, den zieh ich mir mal runter.
Denn wenn ich 27 105 eingebe, kommen total wirre zeichen raus (Vista 64
bit).
Find ich bisschen seltsam.
Jetz probier ich erst den hexeditor
mike schrieb:> Vista 64 bit
das ist zwar schön zu wissen, aber ziemlich egal. Es würde auch unter
DOS das gleich rauskommen, wenn man es als klartext in eine Datei
schreibt.
Ich dachte du kannst C Programmieren, dann sollte sotwas eigentlich klar
sein.
1B69 macht er mir aus ESCi (also ESC als Steuerzeichen, nicht in Ascii)
Nach dem speichern, mach ich copy zum Com Port, aber er durckt wieder
nur wirre zeichen...
Das hat nix mit Programmieren können zu tun oder nicht. Ich hab sowas
nunmal noch nie gemacht. Wenn ich mein 1B69 habe, und es speichere, ist
es doch immernoch als ASCII. Wie soll ich dass denn speichern, dass es
richtig interpretiert wird? Woher soll der rechner wissen, dass es HEX
ist?
0x1B0x69 klappt ebenfalls nicht
doch das hat sehr wohl mit den Grundlagen der Programmierung zu tun!!
speicher doch mal die 27 in einer Datei - diese Datei darf dann nur
1byte groß sein und dort muss mit dem hexeditor eine 1B drin stehen.
Ich weiß, dass das eine Ascii Zeichen sind und in hex Nunmal der Code
des ascii zeichen.
Zudem habe ich jetz gerade WinXP ausprobiert.
WinXP macht aus meinem 1B69 genau das was es soll.
Es schneidet das Papier ab. Und unter Vista 64 Bit druckt er mir auf den
BON eine Zeile mit irgendwelchen Zeichen.
Warum weiß ich nicht, aber das muss ich wissen.
mike schrieb:> Das hat nix mit Programmieren können zu tun oder nicht. Ich hab sowas> nunmal noch nie gemacht. Wenn ich mein 1B69 habe, und es speichere, ist> es doch immernoch als ASCII.
Ob etwas ASCII ist oder nicht, hängt davon ab, wer das File liest und
wie er Bytes interpretieren will.
Im File selbst stehen die Byte
1B 69
drinnen (zumindest hoffe ich das mal für dich).
> richtig interpretiert wird? Woher soll der rechner wissen, dass es HEX> ist?> 0x1B0x69 klappt ebenfalls nicht
Wie hast du das File erzeugt?
hast du auch mit der gleichen Datei gedruckt? Wenn es eine andere Datei
ist kann es sein das sie eventuell als unicode gespeichert wurde?
Es darf kein unterschied zwischen den Windowsversionen geben wenn man
den gleichen inhalt an den Drucker schickt.
mike schrieb:> Es schneidet das Papier ab. Und unter Vista 64 Bit druckt er mir auf den> BON eine Zeile mit irgendwelchen Zeichen.
Einstellung der Schnittstelle?
Baudrate richtig?
etc.
AUch Vista schickt eine Datei Byte für Byte auf die Schnittstelle. Und
zwar jedes Byte so, wie es in der Datei steht.
Also beide Einstellungen der Schnittstellen sind identisch.
Die Datei habe ich gerade per USB Stick kopiert, und rübergeschickt.
XP => Schneidet den Bon ab
Vista => druck wirre Zeichen
Ich verstehe es nicht
mike schrieb:> Also beide Einstellungen der Schnittstellen sind identisch.>> Die Datei habe ich gerade per USB Stick kopiert, und rübergeschickt.>> XP => Schneidet den Bon ab> Vista => druck wirre Zeichen>>> Ich verstehe es nicht
Was ich tun würde:
Anstelle des Druckers mal einen anderen PC anhängen, Terminalprogramm
starten und mir ansehen, was da vom Vista so daherkommt.
ALternativ:
Es gibt auch Port-Sniffer, die die serielle Schnittstelle überwachen
können und jedes Byte protokollieren, welches rein oder raus geht.
Aber eines ist sicher: wenn du das Rätsel lösen willst, dann musst du
dir Einblick verschaffen, was wirklich über die Leitung geht. Egal wie
du das machst.
Dasselbe File immer und immer wieder zum Drucker zu schicken bringt dich
nicht weiter.
Da kommt garnichts raus...?
Ich häng jetzt mal den logic Analyzer hin. Ich habe irgendwie das
gefühl, dass das Mainboard eine Makke hatte (macht noch so andere Krumme
Dinger, des komische AMD Teil)
Na super,
jetzt stellt sich raus, dass die Schnittstelle kontinuierlich Müll über
TD sendet... dann wundert mich nix mehr. Die Frage ist nur warum. Bord
kaputt oder sonstwas