Forum: PC-Programmierung Serieller Nadeldrucker


von mike (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von faustian (Gast)


Lesenswert?

Der Treiber hiess mal "Standard/Nur Text".

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?


von mike (Gast)


Lesenswert?

Hallo Rufus,

danke für die ausführlichen Informationen, ich mache mich gleich mal 
dran.

Gruß Mike

von mike (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von mike (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von mike (Gast)


Lesenswert?

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...

von mike (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von mike (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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?

von Peter II (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von mike (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

dann verbinde doch mal das Vista mit dem XP über das serielle kabel 
(crossover) und schau was das jeweilige rechner sendet.

von Karl H. (kbuchegg)


Lesenswert?

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.

von mike (Gast)


Lesenswert?

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)

von mike (Gast)


Lesenswert?

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

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.