Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ecape-sequenz zum drucker (https://www.delphipraxis.net/163637-ecape-sequenz-zum-drucker.html)

khh 7. Okt 2011 19:32

ecape-sequenz zum drucker
 
hallo zusammen,
ich möchte aus lazarus heraus die esc-seq. zum Öffnen der Kassenschublade an den Drucker schicken.

mit:
Code:
stream := tfilestream.create(printerport,fmOpenWrite);
stream.Write(pchar(myText)^,length(myText));
schicke ich "normalen" Text (in mytext)zum Drucker, der dort auch brav gedruckt wird :-)

wie aber bekomme ich die esc-seq zum Drucker.
lt Manual soll folgende Sequenz geschickt werden:

Die ESC-Sequenzen "Geldlade öffnen"
1) Schubladen Öffnung: ESC p m t1 t2;
z. B. Chr(&H1B) + "p" + Chr(&H0) + Chr(&H64) + Chr(&H64)

Aus QBASIC heraus:
PRINT#1,CHR$(27);CHR$(112);CHR$(0);CHR$(50);CHR$(1 50);




wie funkt das in pascal?


ichdanke euch gewaltig für eure Ideen.


Gruss KHH

Hansa 7. Okt 2011 20:00

AW: ecape-sequenz zum drucker
 
Vorab 1), z.B., QBASIC das passt hinten und vorne nicht zusammen. 8-)

allgemein würde das so gehen :


Delphi-Quellcode:
var t : Textfile;

begin
  AssignFile (t,'LPT1');
  rewrite (t);
  write (t,chr (27)+ richtige ESC-Sequenz);
  close (t);

khh 7. Okt 2011 21:24

AW: ecape-sequenz zum drucker
 
mh, ich danke dir, aber das funktioniert wohl nicht mit ner seriellen Schnittstelle :-(

Gargoyl 7. Okt 2011 21:30

AW: ecape-sequenz zum drucker
 
Dann ersetzt doch einfach
Delphi-Quellcode:
AssignFile (t,'LPT1');
durch
Delphi-Quellcode:
AssignFile (t,'COM1');
oder statt COM1 den seriellen Port, den du benutzt.

omata 7. Okt 2011 21:31

AW: ecape-sequenz zum drucker
 
Also wenn schon AsignFile dann auch CloseFile.

Delphi-Quellcode:
var t : Textfile;
begin
  try
    AssignFile(t, 'LPT1');
    Rewrite(t);
    Write(t, chr(27) + richtige ESC-Sequenz);
  finally
    CloseFile(t);
  end;
end;

khh 7. Okt 2011 21:42

AW: ecape-sequenz zum drucker
 
Zitat:

Zitat von Gargoyl (Beitrag 1129232)
Dann ersetzt doch einfach
Delphi-Quellcode:
AssignFile (t,'LPT1');
durch
Delphi-Quellcode:
AssignFile (t,'COM1');
oder statt COM1 den seriellen Port, den du benutzt.

hab ich ja gemacht,
aber es kommt nix beim drucker an :-(

wie wird denn
Write(t, chr(27) + richtige ESC-Sequenz);
für die genannten seqenzen definiert?

danke gruss KH

himitsu 8. Okt 2011 00:18

AW: ecape-sequenz zum drucker
 
Zitat:

Zitat von khh (Beitrag 1129235)
wie wird denn
Write(t, chr(27) + richtige ESC-Sequenz);
für die genannten seqenzen definiert?

Sowas sollte man aber auch selber übersetzen können. (steht sogar alles Nötige in der OH und ganz am anfang eines ordentlichen Tutorials)

Zitat:

Chr(&H1B)
- das & ignorieren wir einfach
- H = Hexadezimal (und wie gibt man das in Delphi an?)
- genau, mit einem $, also $1B
- und statt über CHR kann man es auch direkt als CHAR-Konstante deklarieren, oder man läßt es so

Chr(&H1B) = Chr($1B) = #$1B

- und das " in Pascal ein ' sein soll, braucht man keinem zu sagen, oder?

"p" = 'p' = #$70 = #112 = CHR(112)

PS: #27 = #$1B = Escape

Zitat:

Delphi-Quellcode:
z. B. Chr(&H1B) + "p" + Chr(&H0) + Chr(&H64) + Chr(&H64)

Aus QBASIC heraus:
PRINT#1,CHR$(27);CHR$(112);CHR$(0);CHR$(50);CHR$(1 50);

Eines von Beiden kann nicht stimmen, denn $64 <> 50 bzw. 150.
$64 (Hexadezimal) = 100 (Dezimal)

Delphi-Quellcode:
#27'p'#0#100#100
(laut dem ersten Code)

Hansa 8. Okt 2011 01:32

AW: ecape-sequenz zum drucker
 
Ich glaube das Thema wird "etwas" unterschätzt. Siehe das :

Zitat:

Zitat von Gargoyl (Beitrag 1129232)
Dann ersetzt doch einfach
Delphi-Quellcode:
AssignFile (t,'LPT1');
durch
Delphi-Quellcode:
AssignFile (t,'COM1');
oder statt COM1 den seriellen Port, den du benutzt.

Damit ist es leider nicht getan. Einfach LPT1 durch COM1 ersetzen und gut ist ? Ne. :mrgreen: Ich sage nur mal : Baudrate. Das Betriebssystem muss auf gewisse serielle Parameter eingestellt werden und das eigene Programm muss diese GENAU nutzen. Sonst geht nichts. Jetzt wäre interessant zu wissen, warum denn der Drucker manchmal druckt. Bezüglich der Kassenschublade : wo ist das Kabel her ? Vielleicht selber gelötet ? Belegung falsch ? Dann kann man noch 1000 Jahre programmieren und es geht immer noch nichts.

@roter Kasten : schön, dass du da bist. :lol: Kein einziger Beitrag ist zu sehen. Nur das was momentan noch editiert wird. :shock:

Hansa 8. Okt 2011 02:39

AW: ecape-sequenz zum drucker
 
Himitsu hat ja den Hex-Kram quasi übersetzt. Was für solche Fälle immer nützlich ist, das ist das : www.asciitable.com

Na gut, da Ami mich warten lässt, und die Glaskugel heute neu poliert wurde noch hierzu was :

1) Schubladen Öffnung: ESC p m t1 t2

Diese Sequenz kommt mir sowieso bekannt vor. ESC ist klar, p könnte für "pay" stehen, also Kasse öffnen. Was soll das m ? Zunächst mal t1 und t2 (auch klar). Die zwei Zahlen stehen für ein Zeitintervall. Dieses bestimmt, wie lange der Schubladenstrom fliesst, damit der Öffnungsmechanismus das Ding aufmachen kann. Wenn ich mich recht entsinne ist in der ESC-Sequenz noch eine Schubladennummer vorgesehen. Das kann nur das m sein.

Also hätten wie z.B. so etwas :

Delphi-Quellcode:
write (t,chr(27)+'p'+chr(0)+chr(0)+chr(150));
Das wäre eine gültige ESC-Sequenz für die Schublade. Hinter 'p' steht die erste #0 für erste Schublade, weil vermutlich nur eine da ist. t1 steht auf 0, t2 auf 150, d.h. der Schubladenstrom fliesst für 150 ms. Gewähr wird sowieso keine übernommen, aber wenn das so richtig ist, dann geht das Teil auf. Ansonsten die 150 erhöhen. Kommt kein "Klack", dann ist Kabel falsch, Drucker aus oder die serielle Verbindung ist falsch eingestellt.

Sieht jetzt so aus, als bräuchte man den m und t1 Wert nicht, aber t1 ist sicherheitshalber und 2 Schubladen braucht man schon in Grenzgebieten, selbst im EUR-Zeitalter. Vielleicht gibts ja bald sogar wieder Engpass an Kassenschubladen. :lol:

turboPASCAL 8. Okt 2011 06:47

AW: ecape-sequenz zum drucker
 
Was ist es denn für eine Kasse ? Eine Bezeichnung wäre hilfreich und wie ist diese angeschlossen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.
Seite 1 von 5  1 23     Letzte »    

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