Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   cab Etikettendrucker Statusabfragen über USB (https://www.delphipraxis.net/186721-cab-etikettendrucker-statusabfragen-ueber-usb.html)

Andidreas 24. Sep 2015 13:36

cab Etikettendrucker Statusabfragen über USB
 
Hallo zusammen,

wir verwenden in unserer Firma zum Druck von Etiketten (z.B. Versandkartonetiketten) Drucker der Firma cab.
In einem neuen Projekt haben wir die Drucker über USB angeschlossen.
Der Druck funktioniert wunderbar über die folgenden Funktion:

Delphi-Quellcode:
function fnPrintviaComputerPrinter(slPrinterCommands : TStrings; sPrintername, sDocumentName : String) : Boolean;

var
  hPrinter   : THandle;
  kDocInfo   : TDocInfo1;
  i          : Integer;
  dwWritten  : DWord;
  sRec       : String;
  StringList : TStrings;

begin

  //Set Result
  Result := False;

  //Try with Printer from Function Call
  If Not WinSpool.OpenPrinter(PChar(sPrintername), hPrinter, nil) Then
  Begin
    //Try with Windows Default Printer
    Printer.PrinterIndex := -1;
     If Not WinSpool.OpenPrinter(PChar(Printer.Printers[Printer.PrinterIndex]), hPrinter, nil) Then Exit;
  End;

  //Spool Output Settings
  Try
    With kDocInfo Do
    Begin
      pDocName := PChar(sDocumentName);
      pOutputFile := nil;
      pDatatype := 'RAW';
      //pDatatype := 'TEXT'; --> only for FreePDF
    End;

    //Send Printer Commands to the Printer
    If (StartDocPrinter(hPrinter,1,@kDocInfo) = 0) Then Abort;
    Try
      For i := 0 to slPrinterCommands.Count -1 do
      Begin
        sRec := slPrinterCommands.Strings[i] + #13+#10;
        Result := WritePrinter(hPrinter,PAnsiChar(AnsiString(sRec)),Length(sRec),dwWritten);
        If Not Result Then Abort;
      End;
      Result := true;
    Finally
      EndPagePrinter(hPrinter);
    End;

  Finally
    EndDocPrinter(hPrinter);
    WinSpool.ClosePrinter(hPrinter);
  end;

  //Set Result
  Result := True;

end;
Nachdem Druck muss jetzt aber noch der Status des Druckers abgefragt werden.
Lt. Hersteller gibt es hierfür sogenannte ESC Kommandos...
Ein ESC Kommande sollte mir in einem String den genauen Status zurückgeben...

Aber wie kann ich über den USB Port diese Daten empfangen bzw. erhalten? Ich bin hier etwas ratlos wie ich das Thema angehen soll da ich sowas noch nie gemacht habe, auch meine Suchen ham mir bisher nicht auf die Sprünge geholfen...

HolgerX 25. Sep 2015 04:30

AW: cab Etikettendrucker Statusabfragen über USB
 
Google doch mal nach 'ExtEscape'..

Damit können ESC-Commandos direkt an den Drucker geschickt werden.
Angeblich mit Möglichkeit einer Rückgabe von Infos vom Drucker..

Andidreas 29. Sep 2015 14:16

AW: cab Etikettendrucker Statusabfragen über USB
 
Vielen Dank für den Tipp...
Ich hab heute ExtEscape ausprobiert und Escape, aber in beiden Fällen kommen die Escape Befehle am Drucker nicht richtig an!

Ich Versuche gerade mein Glück mit CreateFile ... Hat hier schon jemand Erfahrungen damit gemacht?

Andidreas 29. Sep 2015 15:45

AW: cab Etikettendrucker Statusabfragen über USB
 
Mittlerweile bin ich über den folgendne Beitrag im Internet gestolpert:

http://www.entwickler-ecke.de/topic_..._102755,0.html

Der CreateFile() Funktioniert...

Wenn dann der WriteFile() Befehl kommt dann seh ich am Display des Druckers das er Daten empfangen hat, führt aber nicht den Escape Befehl aus der gesendet wurde...

Lt. den Infos die in der Unit stehen sollte der Escape Befehl in Hexadezimal übergaben werden und hier vermute ich meinen Fehler... Wie übergibt man einen ESCAPE f als Hexadezimalen Wert?

HolgerX 29. Sep 2015 17:51

AW: cab Etikettendrucker Statusabfragen über USB
 
Hallo..

Die Unit benutzt einen STRING um die Befehle (wie ESC) an die Funktion zu Übergeben, anstelle von z.B. Array of Byte.

Das geht voll nach hinten los, wenn mal mehr Daten übertragen/empfangen werden, da die Konvertierung mit HEXToInt nunmal nur interger erzeugen kann, jedoch ein String beliebig lang sein kann ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz