Thermo Drucker Wincor Nixdorf TH200 Self Test

Moin Ihr Lieben!

Ich habe folgendes Problem:
Ich möchte einen Thermal Drucker ansteuern dessen Informationsseite drucken.

Mir fehlt es jedoch an Verständnis.

Die Kommunikation zu dem Drucker findet statt. Text usw. kann gedruckt werden.

Ich verstehe nur ein Befehl nicht.

Hab nun Sämtliche Programmers Guides durchgelesen und bin zu dem entschluss gekommen, dass dieser Befehl bei fast jedem Thermal Drucker gleich ist.

(Seite 91)

(Seite 14)

(Seite 111)

Die Seiten sind alle identisch

Hat da jemand schon Erfahrung mit gemacht und kann mir vllt. ein Beispielcode geben bzw. mir das erklären?

Danke im Voraus

Was verstehst du nicht?

zwieblum:
Was verstehst du nicht?

Achso sorry hab das garnicht reingeschrieben :smiley:
Ich verstehe nicht genau wie PL, PH und n und m sich zusammensetzen.
Welche Werte (in DEC) ich bei der Übermittlung übergeben soll.

Das sind ASCII Zeichen. Die 1. Spalte ist das Zeichen in Klartext, die 2. das Zeichen als DEC-Wert.

zwieblum:
Das sind ASCII Zeichen. Die 1. Spalte ist das Zeichen in Klartext, die 2. das Zeichen als DEC-Wert.

Ok n und m verstehe ich, dann fehlt mir noch das Verständniss für pL und pH (Ich verstehe nicht welche Werte da rein kommen).

pL and pH specifies the number of the parameters such as n, m to (pL + (pH x 256)) bytes

Weil n und m insgesamt 2 Bytes sind, wären pL und pH wohl:
pL = 2
pH = 0

Edit:
Beispiel für "Paper roll" und "Printer status print" sollte also wahrscheinlich so aussehen (ungetestet):

       GS   (   A  pL  pH   n   m
ASCII:  GS   (   A   2   0   1   2
HEX:    1D  28  41  02  00  01  02 
DEC:    29  40  65  50  48  49  50

Edit2:
Achtung, wie von wno158 in #9 ausgeführt ist die letzte Zeile oben falsch und müsste wohl wie folgt lauten:

DEC:    29  40  65   2   0   1   2

pL und pH geben zusammen die Länge der Payload der Nachricht an (low und high byte). In diesem Fall ist das 2, weil mit den Parameter n und m nur zwei weitere Byte folgen.
Also wie angegeben pL = 2 und pH = 0 setzen.

uxomm war schneller :wink:

Ok beim Drucker kommt was an aber er führt es nicht aus.

29  40  65  50  48  49  50

Das ist der code den ich verwende, der Drucker rührt sich jedoch nicht.
Beim nächsten Druck (nicht die Test Seite!) wird dann 012 mitgedruckt.

Die Informationsseite wird leider nicht gedruckt.

Ich habe deine Hardware nicht und kann das deshalb nicht testen.
Allerdings habe ich einen anderen kleinen Themoprinter. Die Steuersequenzen meines Druckers sehen im Detail etwas anders aus, aber das Prinzip ist gleich.

Wie sendest du die Sequenz?
Ich würde das etwa so machen:

...
SoftSerial.write(29);
SoftSerial.write(40);
SoftSerial.write(65); 
SoftSerial.write(50);
SoftSerial.write(48);
SoftSerial.write(49); 
SoftSerial.write(50);

Edit:
Achtung, wie wie von wno158 in #9 ausgeführt ist die Sequenz oben wohl falsch und müsste wie folgt lauten:

...
SoftSerial.write(29);
SoftSerial.write(40);
SoftSerial.write(65); 
SoftSerial.write(2);
SoftSerial.write(0);
SoftSerial.write(1); 
SoftSerial.write(2);

@uxomm: Ich bin nicht ganz einig mit Dir. pL, pH und die Parameter sind m.E. keine ASCII-Zeichen, sondern tatsächlich direkte anzugebende Byte-Werte.
Also würde ich das mal versuchen:

        GS   (   A  pL  pH   n   m
ASCII:  GS   (   A   2   0   1   2
HEX:    1D  28  41  02  00  01  02
DEC:    29  40  65   2   0   1   2

Wie ich drauf komme: Seite 92 im ersten verlinkten Dokument beschreibt Set Print Density. Da braucht es Werte 250...255, 0...6 und die kann man wohl nur als Byte angeben.

wno158:
@uxomm: Ich bin nicht ganz einig mit Dir. pL, pH und die Parameter sind m.E. keine ASCII-Zeichen, sondern tatsächlich direkte anzugebende Byte-Werte.

Du hast völlig recht - ich bin gerade auch darauf gestoßen, als ich mir einen Beispielcode für meinen Drucker genauer angeschaut habe!

Edit:
Habe meine Beiträge #5 und #8 entsprechend ergänzt.
Danke wno158!

Ihr seid meine Helden, danke!

Jetzt funktioniert es.
Das ist der richtige Code:

29  40  65   2   0   1   2

Danke euch allen, mein Problem ist damit erledigt.

Super, dass es jetzt funktioniert.
Ein Hoch auf das Teamwork!

Yep, dem ist nix hinzuzufügen!
Gruß Walter

(außer vielleicht ein “solved” im Titel des ersten Beitrags)

Hallo ihr Lieben,
Ich habe da noch eine Frage, bzw. eine Bitte an euch.

Der TH200 ist nun soweit fertig und redet mit mir, bzw. nimmt von mir Befehle an.

Jetzt fehlt mir noch der TH230.
Ich möchte nun den Drucker, genauso wie in den oberen Posts über die Com Schnittstelle konfigurieren.

Nehmen wir mal jetzt als Beispiel "Print density"
https://www.manualslib.com/manual/1122152/Wincor-Nixdorf-Th230.html?page=110&term=density&selected=14#manual

Wie müsste nun der code aussehen um density auf z.B. 50% zu stellen?

Lieben Dank im Voraus!

Ich habe Dir hier mal das originale Programmierhandbuch gefunden.
Print density in der Form wie beim TH200 kann ich darin nicht finden.

Es geht mir um die seite 102 und diesen Befehl:
0x1D 0x28 0x45 pLpH 0x05

ich verstehe nicht ganz wie sich PL und PH zusammensetzt

Wie müsste der Befehl dann aussehen wenn ich die print density auf 50% setzen möchte?

Ahh - das ist tricky.
Wenn ich das richtig interpretiere ist das die Anzahl der "payload" Bytes +1, die nach der 0x05 noch folgen.
Im Fall Print Density (5) wären das 3+1, also die Mindestzahl 4.
PL = 0x04
PH = 0x00
Dann sollte aber nach der 5 noch der neue zu setzende Wert kommen - Funktion "a" wäre wieder 5, dann aus der Tabelle auf Seite 103 für 50% der Wert -10 (65526).
a = 0x05
nL = 0xF6
nH = 0xFF

Insgesamt komme ich dann auf:
0x1D 0x28 0x45 0x04 0x00 0x05 0x05 0xF6 0xFF