![]() |
Epson TM-T70 USB Kassenschublade öffnen
Hallo,
gibt es eine Möglichkeit eine am Epson TM-t70 USB angeschlossenen Kassenlade per button click zu öffnen, ohne dass der Belegdrucker druckt. Vielen dank für die Hilfe schon mal |
AW: Epson TM-T70 USB Kassenschublade öffnen
Verwendest Du einen OPOS-Treiber? Damit sollte das gehen.
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Ja.
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Momentan benutze ich die Win. Treiber und drucke den Beleg ganz einfach über "wrieln"
wie funtioniert das mit dem opos Treiber ? Wie binde ich das in Delphi ein ? |
AW: Epson TM-T70 USB Kassenschublade öffnen
Zitat:
Zitat:
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Zitat:
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Funktioniert das nur über die opos Treiber ober gibt es auch eine andere Möglichkeit ?
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Es wird doch sicherlich eine Virtuelle Serielle Schnittstelle installiert oder?
Dann gehts auch per Serieller Anbindung mit dem passenden ESC Befehl. |
AW: Epson TM-T70 USB Kassenschublade öffnen
Zitat:
Zitat:
Ich habe im Büro zufällig gerade einen TM-295P rumzustehen, dem ich beibringen muss, das Papier zu greifen bzw. freizugeben. ESC-Sequenz zum Freigeben hab ich gefunden, die zum Greifen nicht (trotz Handbuch). Ich habe das OPOS-OCX genommen und damit geht es teilweise. Aber der 'release' klappt nur mit ESC-Sequenz. Bestimmt gibt es hier richtige Programmierer (wie das vagtler z.B.) die innerhalb von 25 Sekunden gegoogeln und ein funktionierendes Beispielprojekt erstellen. Zum Thema: Installiere OPOS, richte den Drucker ein (SetupPOS.EXE starten). Der bekommt einen bestimmten Namen 'TM-170' vermutlich. Dann öffnest Du Delphi und installierst die ActiveX-Komponente (Im Komponenten-Menü, glaube ich). Danach schaust Du dir die Beispielprojekte an, die grauenvoll sind. Du musst mit dem OPOS-Teil deinen Drucker Claimen, aktivieren und enablen (oder öffnen). Hab den Code nicht hier, es sind aber drei aktionen in der richtigen Reihenfolge. Danach solltest Du den Drucker und die Schublade vermutlich kontrollieren können. Ach, drucken geht auch. Ich habe eben im TM-170 Manual geschaut, aber auf die Schnelle auch keine ESC-Sequenz gefunden, aber die wird es geben, keine Frage. So: Und wenn jetzt alle Beteiligten mit dem Klugscheißern aufhören, wird das vielleicht noch was, gell? |
AW: Epson TM-T70 USB Kassenschublade öffnen
Hallo,
ich mache das über den Windows-Druckertreiber so:
Delphi-Quellcode:
Funktioniert - mit teilweise anderen Kommando (acmd) mit eigentlich allen Bondruckern.
function RawDataToPrinter(szPrinterName:PChar; lpData:PByte; dwCount:Word) : Boolean;
Var hPrinter : THandle; DocInfo : DOC_INFO_1; dwJob : Word; dwBytesWritten : Cardinal; Begin Result:=False; if NOT OpenPrinter( szPrinterName, hPrinter, NIL ) then Exit; DocInfo.pDocName := 'RAWJOB'; DocInfo.pOutputFile := NIL; DocInfo.pDatatype := 'RAW'; dwJob := StartDocPrinter( hPrinter, 1, @DocInfo ); if (dwJob = 0 ) Then begin ClosePrinter( hPrinter ); Exit; end; if not StartPagePrinter( hPrinter ) then begin EndDocPrinter( hPrinter ); ClosePrinter( hPrinter ); Exit; end; if not WritePrinter( hPrinter, lpData, dwCount, dwBytesWritten ) then begin EndPagePrinter( hPrinter ); EndDocPrinter( hPrinter ); ClosePrinter( hPrinter ); Exit; end; if not EndPagePrinter( hPrinter ) then begin EndDocPrinter( hPrinter ); ClosePrinter( hPrinter ); Exit; end; if not EndDocPrinter( hPrinter ) then begin ClosePrinter( hPrinter ); Exit; end; ClosePrinter( hPrinter ); Result:=dwBytesWritten = dwCount; End; function SwitchPrinter(const APrtName : string):string; var Device, Driver, Port: array[0..255] of Char; DevMode: THandle; begin with Printer do begin PrinterIndex := Printers.IndexOf(APrtName); GetPrinter(Device, Driver, Port, DevMode); SetPrinter(Device, Driver, Port, 0); result:=Printers[printerindex]; end; end; procedure Tfrmmain.opendrawer(nr:integer); Var FH:THandle; Buff: array[0..5] of char; RetW:DWORD; port:string; cmd:string; acmd:ansistring; p:pansichar; begin // Anderer Code acmd:=#27#112#48#250#250; if dm.steuertext='Epson2' then // 2. Schubladenanschluss acmd:=#27#112#49#250#250; p:=AnsiStrAlloc(length(acmd)); p:=StrPCopy(p,acmd); switchprinter(dm.Steuertextdrucker); //Druckername rawdatatoprinter(pwidechar(dm.Steuertextdrucker),pbyte(p),length(acmd)); end; |
AW: Epson TM-T70 USB Kassenschublade öffnen
Zitat:
![]() 2. Link |
AW: Epson TM-T70 USB Kassenschublade öffnen
Get doch. Hast zwar 40 Minuten benötigt und keine 20 Sekunden, aber immerhin. Hauptsache gespurt.
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Hallo
eventuell ja mit dem EPSON Advanced Printer Driver.
Delphi-Quellcode:
Uwe
Printer.BeginDoc;
Printer.Canvas.Font.Name:='control'; Printer.Canvas.Font.Size:=1; //paper cut Printer.Canvas.TextOut(x,y,'P'); //drawer Printer.Canvas.TextOut(x,y,'a'); Printer.EndDoc; |
AW: Epson TM-T70 USB Kassenschublade öffnen
@ol1uw:
Das funktioniert zwar, aber leider druckt der Drucker dann einen etwa 1 cm langen Papierschnipsel. |
AW: Epson TM-T70 USB Kassenschublade öffnen
Hallo,
habe nun mal den opos Printer in delphi importiert. Zum Testen folgendes...
Delphi-Quellcode:
Leider druckt der Drucker nicht.
PosPrinter.Open('TM-T70U');
POSPrinter.ClaimDevice(5000); POSPrinter.DeviceEnabled := True; POSPrinter.PrintNormal(PTR_S_RECEIPT, String('TEST PRINT OPOS\n')); POSPrinter.DeviceEnabled := False; POSPrinter.ReleaseDevice; POSPrinter.Close; end; Um die Kassenlade öffnen zu können muss dan auch der cashdrawer. ocx in Delphi importiert werden ? |
AW: Epson TM-T70 USB Kassenschublade öffnen
Das Thema mit der Lade gab es
![]() Das Modell war zwar nicht exakt das Gleiche, sollte aber eigentlich keine Rolle spielen und wurde über die Steuerbefehle erledigt. |
AW: Epson TM-T70 USB Kassenschublade öffnen
Zitat:
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Mit "Print BeginDoc..." druckt der Drucker dann einen etwa 1 cm langen Papierschnipsel.
Dies soll natürlich nicht passieren. Deshalb möchte ich es ml über die OPOS Treiber testen. 1. Drucken 2. Kassenlade über einen Button öffnen. zu 1. s.o. Leider druckt der Drucker nicht. ZU 2. Muss der Cashdrawer.ocx auch in Delphi importiert werden oder kann ich die Lade direkt über den Printer.ocx öffnen. Aber erst mal soll der Drucker drucken :-) |
AW: Epson TM-T70 USB Kassenschublade öffnen
Den Control-Font muss man nicht extra installieren, er ist sozusagen in dem Drucker eingebaut und steht immer dann zur Verfügung, wenn der Drucker ausgewählt wird, z.B. in Wordpad. Leider bleibt dann wie gesagt das Problem mit dem Papierstreifen wenn man den Befehl so wie oben an den Drucker sendet.
Was ich vorher gepostet habe funktioniert ohne Druck von Papierstreifen und bei sehr vielen Bondruckern (Epson, Star, Bixolon usw.). |
AW: Epson TM-T70 USB Kassenschublade öffnen
Bekomme deine Funktion leider nicht zum laufen.
Hast du zufallig eine Demo Souce der funktioniert. Wenn ich die Funktionen einbinde ... undeklarierte Bezeichner usw. Wie rufe ich sie genau auf ? Danke für deine Hilfe |
AW: Epson TM-T70 USB Kassenschublade öffnen
Das ganze Programm kann ich hier nicht veröffentlichen.
Delphi-Quellcode:
Einfach die Kommentare beachten und ein bischen umschreibenfunction RawDataToPrinter(szPrinterName:PChar; lpData:PByte; dwCount:Word) : Boolean; Var hPrinter : THandle; DocInfo : DOC_INFO_1; dwJob : Word; dwBytesWritten : Cardinal; Begin Result:=False; if NOT OpenPrinter( szPrinterName, hPrinter, NIL ) then Exit; DocInfo.pDocName := 'RAWJOB'; DocInfo.pOutputFile := NIL; DocInfo.pDatatype := 'RAW'; dwJob := StartDocPrinter( hPrinter, 1, @DocInfo ); if (dwJob = 0 ) Then begin ClosePrinter( hPrinter ); Exit; end; if not StartPagePrinter( hPrinter ) then begin EndDocPrinter( hPrinter ); ClosePrinter( hPrinter ); Exit; end; if not WritePrinter( hPrinter, lpData, dwCount, dwBytesWritten ) then begin EndPagePrinter( hPrinter ); EndDocPrinter( hPrinter ); ClosePrinter( hPrinter ); Exit; end; if not EndPagePrinter( hPrinter ) then begin EndDocPrinter( hPrinter ); ClosePrinter( hPrinter ); Exit; end; if not EndDocPrinter( hPrinter ) then begin ClosePrinter( hPrinter ); Exit; end; ClosePrinter( hPrinter ); Result:=dwBytesWritten = dwCount; End; function SwitchPrinter(const APrtName : string):string; var Device, Driver, Port: array[0..255] of Char; DevMode: THandle; begin with Printer do begin PrinterIndex := Printers.IndexOf(APrtName); GetPrinter(Device, Driver, Port, DevMode); SetPrinter(Device, Driver, Port, 0); result:=Printers[printerindex]; end; end; procedure Tfrmmain.opendrawer(nr:integer); // Muss keine Methode sein, einfache Procedure geht auch Var FH:THandle; Buff: array[0..5] of char; RetW:DWORD; port:string; cmd:string; acmd:ansistring; p:pansichar; begin // Anderer Code acmd:=#27#112#48#250#250; if dm.steuertext='Epson2' then // 2. Schubladenanschluss dm.steuertext kann man durch Konstante ersetzen acmd:=#27#112#49#250#250; p:=AnsiStrAlloc(length(acmd)); p:=StrPCopy(p,acmd); switchprinter(dm.Steuertextdrucker); //Druckername, so wie er in Windows angezeigt wird rawdatatoprinter(pwidechar(dm.Steuertextdrucker),pbyte(p),length(acmd)); end; |
AW: Epson TM-T70 USB Kassenschublade öffnen
Delphi-Quellcode:
Habe den Code angepasst leider reagiert der Drucker überhaupt nicht.
procedure TForm4.opendrawer(); // Muss keine Methode sein, einfache Procedure geht auch
//procedure TForm4.opendrawer(nr:integer); // Muss keine Methode sein, einfache Procedure geht auch Var FH:THandle; Buff: array[0..5] of char; RetW:DWORD; port:string; cmd:string; acmd:ansistring; p:pansichar; begin // Anderer Code acmd:=#27#112#48#100#100; // if dm.steuertext='Epson2' then // 2. Schubladenanschluss dm.steuertext kann man durch Konstante ersetzen // acmd:=#27#112#49#250#250; p:=AnsiStrAlloc(length(acmd)); p:=StrPCopy(p,acmd); switchprinter('EPSON TM-70'); //Druckername, so wie er in Windows angezeigt wird rawdatatoprinter(pwidechar('EPSON TM-70'),pbyte(p),length(acmd)); end; in der funktion RawDataToPrinter sprigt er in exit. if NOT OpenPrinter( szPrinterName, hPrinter, NIL ) then Exit; Muss ich vorher noch etwas beachten. |
AW: Epson TM-T70 USB Kassenschublade öffnen
Ist der Drucker in Windows installiert?
Druck er Testseite oder aus Wordpad? |
AW: Epson TM-T70 USB Kassenschublade öffnen
Ja, er ist installiert und druckt auch über wordpad.
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Dann sollte es eigentlich gehen. Kann der Druckername falsch sein? Um da zu prüfen, kann man die Funktion Switchprinter benutzen. Ist der Druckername falsch, liefert diese den Namen des Standarddruckers zurück.
|
AW: Epson TM-T70 USB Kassenschublade öffnen
Bei der function RawDataToPrinter springt er ins exit.
Delphi-Quellcode:
Bei der SwitchPrinter Funktion wird der Epson angezeit.
if NOT OpenPrinter( szPrinterName, hPrinter, NIL ) then
Exit; Habe ich was vergessen ? Muss ich den Printer noch extra "open" Wenn ja wie ? |
AW: Epson TM-T70 USB Kassenschublade öffnen
Funktioniert doch !!!
Habe beim Druckernamen einen Buchstaben vergessen. Wer lesen kann ist klar im Vorteil :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz