Delphi-PRAXiS
Seite 6 von 9   « Erste     456 78     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kassenlade öffnen (https://www.delphipraxis.net/180831-kassenlade-oeffnen.html)

Natcree 25. Jun 2014 12:11

AW: Kassenlade öffnen
 
programming guide und die ganzen ASCII codes habe ich
um die kassenlade zu öffnen soll dieser ASCII code genommen werden ESC p m t1 t2

mkinzler 25. Jun 2014 12:13

AW: Kassenlade öffnen
 
Dann nimm besser eine Seriell-Komponente und kommuniziere direkt über den COM-Port des Druckers.

arnof 25. Jun 2014 12:58

AW: Kassenlade öffnen
 
Zitat:

Zitat von mkinzler (Beitrag 1263450)
Dann nimm besser eine Seriell-Komponente und kommuniziere direkt über den COM-Port des Druckers.

Das geht aber nicht mehr auf aktuellen Druckern, die meistens nur USB haben :wink:

Ich biete in meiner Kassensoftware an, direkte Ansteuerung von COM, Ansteuerung via separates Programm (liefern manche Ladenöffner mit), Ansteuerung via "ich drucke was aus" und die Lade öffnet sich via Druckertreiber, OPOS Ansteuerung und ich gebe direkt die Steuerbefehle via Druckertreiber an den Drucker (das ist was Natcree hier versucht -> hier im Forum gibt es aber einen guten Beitrag mit Beispiel von diesem Jahr, das genau das macht).

arnof 25. Jun 2014 13:03

AW: Kassenlade öffnen
 
Zitat:

Zitat von Natcree (Beitrag 1263449)
programming guide und die ganzen ASCII codes habe ich
um die kassenlade zu öffnen soll dieser ASCII code genommen werden ESC p m t1 t2

der String ist folgender:

s:=#27+'p'+#48'pz';

t1 und t2 sind Zeiten in msec die für Steuerung die die Schublade entriegelt wird, die Werte muss man ggf mal testen, je nach Hardware

Blup 25. Jun 2014 13:37

@Natcree

Der Record ist falsch deklariert.
Natürlich funktioniert das nur, wenn ein Druckertreiber für diesen Drucker vorhanden ist und dieser auch PassThrough unterstützt.
In deinem Beispiel muss der Drucker auch noch als Standard ausgewählt sein.
Delphi-Quellcode:
type
  TPassThroughData = record
    nLen : Word;
    Data : array[0..255] of Byte;
  end;

function PrinterSupport(APrinter: TPrinter; ACommand: Integer): Boolean;
begin
  Result := (Escape(APrinter.Canvas.Handle, QUERYESCSUPPORT, SizeOf(ACommand), @ACommand, nil) > 0);
end;

function DirectPrint(APrinter: TPrinter; const s: AnsiString): Boolean;
var
  PTBlock : TPassThroughData;
begin
  Result := (Length(s) < 256);
  if Result then
  begin
    PTBlock.nLen := Length(s);
    StrPCopy(@PTBlock.Data, s);
    Escape(APrinter.Handle, PASSTHROUGH, 0, @PTBlock, nil);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Printer.BeginDoc;
  try
    if PrinterSupport(Printer, PASSTHROUGH) then
      DirectPrint(Printer, {...hier Zeichenkette für den Drucker übergeben...});
  finally
    Printer.EndDoc;
  end;
end;

Natcree 25. Jun 2014 17:58

AW: Kassenlade öffnen
 
blup mit deinen code öffnet er Aber schiebt einen 2 cm streiffen aus dem thermaldrucker raus und cuttet ihn.

Natcree 25. Jun 2014 22:19

AW: Kassenlade öffnen
 
weiss den keiner weiter?

p80286 25. Jun 2014 23:12

AW: Kassenlade öffnen
 
Zitat:

Zitat von Natcree (Beitrag 1263484)
blup mit deinen code öffnet er Aber schiebt einen 2 cm streiffen aus dem thermaldrucker raus und cuttet ihn.

Und welche Daten hast Du übergeben?
(und Du bist sicher, daß er
Delphi-Quellcode:
DirectPrint
auch ausgeführt hat?)

Gruß
K-H

Natcree 25. Jun 2014 23:57

AW: Kassenlade öffnen
 
#27+'p'+#48'pz'

Habe ich übergeben

direktprint muss er doch ausgeführt haben die lade ist ja geöffnet worden nur das er einen schnippsel von der papierrolle ca. 2 cm auswirft und dann cuttet

Sir Rufo 26. Jun 2014 01:03

AW: Kassenlade öffnen
 
Auch wenn es eigentlich nichts Anderes ist, aber man sieht irgendwie klarer
Delphi-Quellcode:
const
  ESC = #27;
  GS = #29;

  { Commands }
 
  ESC_em = ESC + #33; { Select print mode } 
  ESC_p = ESC+#112; { Generate pulse }
  GS_V = GS + #86; { Select cut mode and cut paper }

  { Parameter }

  Lade1 = #48;
  Lade2 = #49;

  PulsDauer100ms = #050; {* 2ms}
  PulsDauer200ms = #100; {* 2ms}
  PulsDauer300ms = #150; {* 2ms}
  PulsDauer400ms = #200; {* 2ms}
  PulsDauer500ms = #250; {* 2ms}

function GetGeneratePulseSequence( m, t1, t2 : AnsiChar ) : Ansistring;
begin
  Result := Esc_p + m + t1 + t2;
end;

function GetDefaultGeneratePulseSequence : AnsiString;
begin
  Result := GetGeneratePulseSequence( {m} Lade1, {t1} PulsDauer200ms, {t2} PulsDauer200ms );
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 Uhr.
Seite 6 von 9   « Erste     456 78     Letzte »    

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