Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Serielle Kassenschublade ansteuern: Was bedeutet z.B "ESC p" (https://www.delphipraxis.net/59202-serielle-kassenschublade-ansteuern-bedeutet-z-b-esc-p.html)

King555 19. Dez 2005 12:17


Serielle Kassenschublade ansteuern: Was bedeutet z.B "E
 
Ich muss eine serielle Kassenschublade per Delphi ansteuern. Im Handbuch zur Schublade steht, ich muss den Befehl "ESC p" senden. Was genau bedeutet das? Ich habe eine Routine, mit der ich einzelne Chars senden kann. Ich habe folgendes versucht:

SerialXmit(FSerialConn, #27);
SerialXmit(FSerialConn, 'p');

Aber das scheint nicht zu funktionieren.

Hat jemand eine Ahnung, wie man diese Befehle eingeben muss?

Der_Unwissende 19. Dez 2005 12:48

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Hi,
hast du denn schon mal mit RS232 gearbeitet? Insbesondere gilt hier natürlich mit der Funktion die du hast. An sich ist es schon richtig, dass man in der Regel nur Bytes (häufig als Character) überträgt, gut mehr geht eh nicht. Wichtig bei RS232 ist es, dass dein FSerialConn auch verbunden ist und die Daten der Verbindung (Flusskontrolle, Datenbits, Parität, StoppBits, Baudrate) stimmen. Dann kann es auch schon am Kabel scheitern, einige Komponenten erwarten die Standardt Seriellen Kabel, andere Nullmodem oder oder oder. Bei ganz einfachen Kabeln ist häufig nur ein GND (glaube die 5 oder so?) und die 2 und 3 (TX & RX) verkabelt.

Und hat die Kasse noch eine Angabe über Antworten? Also kann es sein, dass die Kasse etwas antwortet? Ach als letzten Tipp mal soweit, schau mal nach ob das ganze über z.B. das Hyperterminal funktioniert. Häufig erwarten Programme noch ein Zeichen, um einen Befehl zu akzeptieren, sende einfach mal ein CR + LF nach.

Mehr fällt mir erstmal nicht ein,

Gruß Der Unwissende

King555 19. Dez 2005 13:00

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Ich habe schonmal mit der seriellen Schnittstelle gearbeitet, allerdings ist das schon länger her und besonders viel habe ich damit nicht gemacht.

Folgendes steht im Handbuch:

Zitat:

Drawer Kick-out connector ( optional module )
The pulse speficified by ESC P is output to this connector. The host can confirm the status
of the input signals by using the DLE EOT, ESC u, GS r commands.
To Pin assignments of the drawer kick-out connector refer to table below :
Pin No. Signal Name Signal Direction
1 GND -
2 Drawer kick-out drive signal Output
3 Drawer open/close signal Input
4 +24V -
5 - -
6 GND -
Drawer Kick-out Connector
Drawer kick-out drive signal
Output signal : Current : 1A (max 10 sec.) or less
The solenoid must be connected from pin 2 to pin 4 of Drawer Kick-out connector.
CAUTION : To avoid an overcurrent, the resistance of the drawer kick-out solenoid must be
24 W or more.
Output waveform : In the following figure is specified the drawer kick-out drive
solenoid current waveform.
t1 (ON time) and t2 (OFF time) are specified by ESC P
t1 x 2ms t2 x 2ms
In ON time phase (t1), output voltage is about 0v.
In OFF time phase (t2), the output signal is at high impedence.
Die Kassenschublade ist an einen Kassenbondrucker angeschlossen. Die Schnittstelle des Druckers ist RS232, die Schnittstelle der Kasse RJ12 (Westernstecker, wie beim Modem). Ich möchte also was an den Drucker senden, der dann die Schublade öffnen soll. Das Handbuch gehört zum Drucker.

Die Verbindung zur seriellen Schnittstelle besteht natürlich. Allerdings habe ich keine Möglichkeit gefunden, die Flußkontrolle einzustellen und ich hoffe einfach mal, das hier die Windows Einstellungen genommen werden (diese sind richtig).

Edit: Ach ja, die Schnittstelle steuere ich hiermit an: http://www.dynamo-software.de/serial/code.htm

marabu 19. Dez 2005 13:41

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Mit "ESC P" kannst du offensichtlich die Dauer des Stromstoßes für das Öffnen der Kassenschublade konfigurieren - Öffnen geht aber wohl anders.

Grüße vom marabu

franktron 19. Dez 2005 14:05

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Also meine Schubladen öffnen sich immer mit ESC A (gross A)

King555 19. Dez 2005 14:32

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
In der Command-Liste steht nichts, was ich zum Öffnen der Schublade senden muss. Es gibt da nur den Eintrag "ESCP p", der für "Generate pulse" steht.

Wären denn dann #27 und 'P' richtig? So funktioniert es zwar nicht, aber wenn das genau so gehen muss, dann liegt der Fehler wohl woanders.

marabu 19. Dez 2005 14:43

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Hast du bemerkt, dass in der Dokumentation "ESC P" geschrieben wird, aber du "ESC p" verwendest? Die Schreibweise ist manchmal kritisch. Vielleicht ist ja wirklich "ESC P" der Befehl zum Öffnen der Schublade, aber du musst noch die beiden Zeitwerte für Strom AN und AUS übergeben.

marabu


EDIT: Hast du ein EPSON-kompatibles POS-Terminal? #27'p025' hält den Strom 50 msecs, damit der Magnetverschluss öffnet. Die genau benötigte Zeit musst du aus deiner Dokumentation heraus lesen - eventuell aus einem Diagramm.

King555 19. Dez 2005 16:07

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Ja, das habe ich bemerkt. In der Doku steht das "P" einmal groß und einmal klein und ich habe natürlich beides einmal probiert.

Und ja, es ist ein Epson kompatibler POS-Drucker.

Da war ein Diagramm in dem Text, den ich auch gepostet habe, da muss ich morgen mal schauen, ob da eine Zeit steht (ich glaube ja).

Zu #27'p025':

Aber ich muss das doch Zeichen für Zeichen senden, oder? Also #27, p, 0, 2, 5.

marabu 19. Dez 2005 16:15

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Zeichen für Zeichen - wobei die letzten beiden Ziffern die Schaltzeit in Vielfachen von 2 msec bedeuten. Wählst du die Zeit zu klein, öffnet die Lade nicht zuverlässig.

marabu

maximov 19. Dez 2005 16:51

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Zitat:

Zitat von King555
...

Zu #27'p025':

Aber ich muss das doch Zeichen für Zeichen senden, oder? Also #27, p, 0, 2, 5.

Also ich glaube eher, daß du du die '025' als ein byte übertragen musst, da die esc-sequenzen ja eine art binärprotokoll sind. Dh. du hast jetzt evtl. immer 0 gesendet was auch erklärt warum nix passiert. Nur so als idee, denn mein epson verlangt das auch alles binär - logischerweise :)

marabu 19. Dez 2005 17:08

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Hallo maximov,

sicher nicht als ein einziges Byte - aber manchmal muss die Haltezeit binär und manchmal ASCII-codiert übermittelt werden: klick und klack

Freundliche Grüße vom marabu

Hansa 19. Dez 2005 17:29

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Guck mal hier :

Delphi-Quellcode:
IF NOT ComVar.InitCustom (Com1, 2400, EvenParity, 7, 2, 50,
                          50, DefPortOptions) THEN;
  ComVar.PutString ('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
  delay (OeffneSchublade);
  ComVar.Done;
Habe gesucht : ein Verrückter 8) hatte tatsächlich schon so eine Schublade. Mit dem Code ging die 3 Jahre auf. Ist AsyncPro.

King555 20. Dez 2005 09:32

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Ich habe im Handbuch nochwas gefunden:

Zitat:

ESC p m t1 t2
[Name] Generate pulse.
[Format] ASCII ESC p m t1 t2
Hex 1B 70 m t1 t2
Decimal 27 112 m t1 t2
[Range] m = 0, 48
0 £ t1, t2 £ 255
[Description] Outputs the pulse specified by t1 and t2 to connector pin m as follows :
m Connector Pin
0, 48 Drawer kick-out connector pin 2
[Notes] · The pulse ON time is [ t1 ´ 2 ms ] and the OFF time is [ t2 ´ 2 ms ].
· If t2 < t1, the OFF time is [ t1 ´ 2 ms ].
[Default]
[Reference] See Drawer kick-out connector described in the Chapter 1 of this manual.
[Example]
Mein aktueller Code, der noch nicht funktioniert, sieht so aus:

Delphi-Quellcode:
  function KasseOeffnen: Boolean;
  begin
    Result := False;
    try
      if SerialOpen(FSerialConn) = SER_OK then
      begin
        Result := (SerialXmit(FSerialConn, #27) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #112) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #0) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #48) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #0) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #255) = SER_OK);
        SerialStop(FSerialConn);
      end; {IF}
    except
      Result := False;
    end; {TRY}
  end;

Hansa 20. Dez 2005 10:08

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
War klar, daß das Ratespiel weiter geht. :lol:

Ein Fehler ist allerdings klar zu erkennen :

Zitat:

m = 0, 48
Das bedeutet #0 ODER #48 !! Du schickst aber beides hintereinander. Ist halt klassischer Fall für Try and Error. :mrgreen:

KrasserChecker 20. Dez 2005 10:10

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Bist Du sicher, dass Die richtigen Codes gesandt werden? Wenn ich das richtig verstehe steht das "m" in der Dokumentation für den Pin, an den das Signal geschickt werden soll.

Auserdem würde ich das "SerialOpen" & "SerialStop" mit try...finally absichern.

Demnach:

Delphi-Quellcode:
function KasseOeffnen: Boolean;
  begin
    Result := False;
    try
      if SerialOpen(FSerialConn) = SER_OK then
      try
        Result := (SerialXmit(FSerialConn, #27) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #112) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #2) = SER_OK); // <- Hier nicht #0 sondern #2 (Pin 2) senden
        Result := Result and (SerialXmit(FSerialConn, #48) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #255) = SER_OK);
      finally
        SerialStop(FSerialConn);
      end; {IF}
    except
      Result := False;
    end; {TRY}
  end;

marabu 21. Dez 2005 11:51

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Hallo,

hast du dir einmal angesehen, wie verunglückt die Handbuchinformationen aus Beitrag #13 aussehen? Hast du das mit Copy & Paste verbrochen oder steht die Information schon so kaputt im Originalhandbuch?

Nochmal zu meinem Beitrag #7 von neulich: m ist wahlweise binär 0 oder ASCII '0' (#48) - die beiden Werte müssen nicht hintereinander gesendet werden. Wenn du das [ PRE] Tag verwendet hättest, dann könnte man wahrscheinlich das hier lesen:

Code:
[Description]
Outputs the pulse specified by t1 and t2 to connector pin m as follows :

m      Connector                   Pin
0, 48   Drawer kick-out connector   pin 2

[Example]
Wo ist denn das Beispiel hier geblieben?
Die Information, dass beide Zeitintervalle im Befehl geschickt werden, hatte mir gefehlt. Ich bin sicher, dass aus dem Handbuch auch hervorgeht, welche Werte für t1 und t2 verwendet werden sollten. Bis du sie gefunden hast, könntest du mit einer kleinen Modifikation ein paar Werte testen:

Delphi-Quellcode:
function KasseOeffnen(t1, t2: byte): Boolean;
begin
  Result := False;
  try
    if SerialOpen(FSerialConn) = SER_OK then
    begin
      Result := (SerialXmit(FSerialConn, #27) = SER_OK);
      Result := Result and (SerialXmit(FSerialConn, #112) = SER_OK);
      Result := Result and (SerialXmit(FSerialConn, #48) = SER_OK);
      Result := Result and (SerialXmit(FSerialConn, Chr(t1)) = SER_OK);
      Result := Result and (SerialXmit(FSerialConn, Chr(t2)) = SER_OK);
      SerialStop(FSerialConn);
    end; {IF}
  except
    Result := False;
  end; {TRY}
end;
Grüße vom marabu

King555 21. Dez 2005 14:53

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Stimmt, ich habe das einfach per Copy & Paste aus dem Adobe Reader geholt. Mir war klar, dass es dann leicht anders aussieht, aber ich dachte mir, man erkennt trotzdem alles.

Das Handbuch gibt's übrigens hier: http://www.quad.de/ftp/data/custom/dpt282.pdf

marabu 21. Dez 2005 17:42

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Das Kommando ist so in Ordnung, wie ich es dir gegeben habe. Die alles entscheidende Frage ist eigentlich: funktioniert die Kommunikation überhaupt? Hast du schonmal ein paar Zeilenvorschübe geschickt und den paper cut ausprobiert?

marabu

King555 22. Dez 2005 08:45

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Ich war mir eigentlich sicher, dass die Kommunikation funktioniert, da ich per Windows-Druckertreiber einwandfrei auf dem Kassenbondrucker drucken kann. Allerdings reagiert der Drucker nicht auf direkte Befehle, wie z.B. "Paper Cut", etc.

Ich habe mal eine Mail an den Hersteller geschrieben, der sagte mir das hier:

Zitat:

did you connect the pin nr. 2 (nr.1 is the first on the left side) & number 4 of the RJ connector ?
In positive case, please try this to open it:


ESC POS COMMAND

ESC p m t1 t2
where :
ESC = 1 B hex (27 dec)
p= 70 hex (112 dec )
m= 00 hex (0 dec)
t1 = beetwen > 0 and < 255 ( t1 x 2 msec. = time "on " impulse )
t2 = " > 0 and < 255 ( t2 x 2 msec = " " off" impulse )

Exemple: 27, 112, 48, 150, 150 (decimal value )


Visual Basic:

Apertura_Cassetto=chr(27)+chr(112)+chr(00)+chr(128 )+chr(128)


MsComm1.CommPort=1
MsComm1.Settings="9600,n,8,1"
MsComm1.OutBufferSize=1024
MsComm1.InBufferSize=2048
MsComm1.Handshaking=HW
MsComm1.InputMode=comInputModeText
MsComm1.PortOpen=True
Apertura_Cassetto=chr(27)+chr(112)+chr(48)+chr(150 )+chr(150)
MsComm1.Output=Apertura_Cassettosequence to open it:
Ich habe es auch mal in Visual Basic probiert, aber ohne Erfolg. In Delphi habe ich außer dieser SerCom.pas Datei auch mal die ComPortLib benutzt, gleiches Ergebnis. Kann es daran liegen, dass ich die serielle Schnittstelle nur emuliere, da ich nur über USB Anschlüsse verfüge? Ich habe einen Konverter von Seriell auf USB angeschlossen.

marabu 22. Dez 2005 09:07

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Keine Ahnung wie dein Konverter funktioniert. Wenn du aber drucken kannst, dann sollten auch die fünf Zeichen zum Öffnen der Schublade ihren Weg zum Drucker finden. Falls der Konverter die Einstellungen selbst aushandelt und die von deinem Programm gar nicht empfängt, dann solltest du bei den timeout Werten einmal unter 128 bleiben - bei 7-bit transfer würde 128 als 0 empfangen und hätte keine Wirkung. Und wenn auch das keinen Fortschritt bringt, dann wirst du wohl mal einen Rechner mit serieller Schnittstelle zum Testen verwenden müssen.

Grüße vom marabu

PS: Woher weißt du eigentlich, welche Emulation der Drucker gerade fährt? Den Befehl "ESC p" gibt es ja im ESC POS und DPT Modus. Wäre der Drucker im DPT Modus, dann würde er auf "ESC p" garnicht mit dem Öffnen der Schublade reagieren. Und auch "ESC m" würde den cutter nicht aktivieren. In beiden Fällen müsstest du statt dessen eine Antwort vom Drucker erhalten, die du auslesen könntest.

franktron 22. Dez 2005 09:34

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Also der USB > RS232 Konverter könnte schuld sein hatte damit auch schon probleme.

Such doch mal einen PC der einen Com hat und versuchs da mal

King555 22. Dez 2005 10:47

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
So, ich habe es nun an einem PC mit "richtiger" COM-Schnittstelle getestet. Das Visual Basic Beispiel funktioniert, die Kasse geht offen. Aber mein Delphi Programm funktioniert immer noch nicht.

Mein aktueller Code:

Delphi-Quellcode:
  function KasseOeffnen: Boolean;
  begin
    Result := False;
    try
      if SerialOpen(FSerialConn) = SER_OK then
      try
        Result := (SerialXmit(FSerialConn, #27) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #112) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #48) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #150) = SER_OK);
        Result := Result and (SerialXmit(FSerialConn, #150) = SER_OK);
      finally
        SerialStop(FSerialConn);
      end; {IF/TRY}
    except
      Result := False;
    end; {TRY}
  end;
Bei dem VB Beispiel habe ich die ganzen Verbindungsparameter eingestellt (z.B. Parität, etc.). Das habe ich in Delphi mal gemacht und mal nicht, beides ging nicht. Vielleicht liegt es daran, dass ich bei dem Delphi-Code die Flußsteuerung nicht wählen kann (XON/XOFF in meinem Fall).

Hansa 22. Dez 2005 11:00

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Was ist denn das SerialXMit überhaupt ? Lade mal AsyncPro und da die Komponente ComPort. Stelle alles richtig ein und sende den ganzen string also chr (27)+ ... an die serielle. Das muß gehen !

King555 22. Dez 2005 12:12

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Mit AsyncPro geht es! :-D

Jetzt muss ich zwar eine 1,7 MB große DPL Datei mitgeben, aber immerhin funktioniert es nun.

Allerdings würde ich noch eins gerne wissen: Ist es möglich, dass AsyncPro, bzw. die COM-Komponente, die Anschlusseinstellungen des Ports selber ausliest? Also das, was ich in der Systemsteuerung gewählt habe (z.B. Parität, Datenbits, etc.)?

Hansa 22. Dez 2005 12:25

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Na also ! Ging aber fast zu schnell. Man muß eben anscheinend immer nur deutlich werden. :mrgreen: Das mit der DPL weiß ich nicht. Was soll das sein ? Normalerweise wird alles in die EXE eingelinkt. Kann gut sein, daß die Standardeinstellungen als Default Werte geneommen werden. Das würde auch Sinn machen. AsyncPro wäre das ohne weiteres zuzutrauen.

King555 22. Dez 2005 13:17

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
DPL deswegen, weil bei der Software nur Runtime-Packages benutzt werden dürfen, es darf nichts in das Programm reinkompileirt werden. Das liegt daran, weil es sich um viele einzelne Module (genauer gesagt DLL Dateien) handelt.

Danke an alle für eure Mühe!

King555 10. Jan 2006 07:32

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Ich habe nochmal eine Frage zu dem Thema:

Auf meinem PC funktionierte das Öffnen der Kasse, auf einem anderen Rechner, wo es eigentlich laufen soll, geht es nicht. ASyncPro gibt eine Exception aus. Leider sagt die Exception-Meldung garnichts aus ("AsyncPro Exception"). Woran könnte das liegen? Der Com-Port ist richtig eingestellt und die serielle Schnittstelle ist genau so konfiguriert, wie auf meinem PC.

marabu 10. Jan 2006 17:17

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Wenn du schreibst, welche Code-Zeile die Exception verursacht, dann habe ich eine reelle Chance ...

Grüße vom marabu

King555 17. Jan 2006 11:19

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Hier mein aktueller Code:

Delphi-Quellcode:
  function KasseOeffnen: Boolean;
  const
    strOpen = #27#112#48#150#150;
  begin
    try
      Application.ProcessMessages;
      if ComPort.ComNumber <> FKasseComPort then
      begin
        ComPort.ComNumber := FKasseComPort;
        Application.ProcessMessages;
      end; {IF}
      ComPort.InitPort;
      Application.ProcessMessages;
      try
        ComPort.PutString(strOpen);
        Application.ProcessMessages;
      finally
        ComPort.DonePort;
        Application.ProcessMessages;
      end; {TRY}
      Result := True;
    except
      Result := False;
    end; {TRY}
  end;
Bei "ComPort.InitPort;" springt er nach "Result := False;" im except-Block. Die Fehlermeldung (die natürlich in der jetzigen Konstruktion nicht sichtbar ist), lautet: "Apro exception" (mehr nicht).

King555 23. Jan 2006 07:33

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Jetzt weiß ich vielleicht, warum der Fehler kommt: Sobald der Druckertreiber für den Kassendrucker installiert ist, kann keine Anwendung mehr auf den entsprechenden COM-Port zugreifen. Auf meinem PC funktioniert es allerdings, nur nicht auf dem eigentlichen Zielrechner. Wenn ich den COM-Port im Druckertreiber auf einen anderen (ungültigen) stelle, dann geht es wieder. Der Hersteller des Druckertreibers konnte mir auch keine Antwort geben.

marabu 23. Jan 2006 08:37

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Noch nie habe ich Gelegenheit gehabt mit so einem POS-Terminal zu spielen. Aber, wenn da ein spezieller Druckertreiber installiert wird, der sich an einen COM-Port bindet und diesen dann für andere Programme sperrt, dann musst du wohl gar nicht mit der seriellen Schnittstelle direkt arbeiten, sondern musst deine Drucker-Befehle einfach im Raw-Mode an das character device senden (PRN, wenn es der Standarddrucker ist). Den Drucker kannst du dann einfach mit AssignPrn() und Write() ansprechen - denke ich.

Grüße vom marabu

King555 23. Jan 2006 13:24

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Zitat:

Zitat von marabu
Drucker-Befehle einfach im Raw-Mode an das character device senden (PRN, wenn es der Standarddrucker ist)

Den Satz verstehe ich leider nicht. Wie öffne ich den Drucker? Mit AssignFile? Und angenommen es ist nicht der Standarddrucker, gibt's dann auch eine Möglichkeit?

Ansonsten halte ich deine Idee für gut, das könnte klappen.

marabu 23. Jan 2006 20:26

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Dieser BDN Artikel beschreibt, wie du deine Steuerdaten an diesen Drucker schicken kannst, wenn der installierte Treiber die Durchleitung von Steuerdaten zulässt: klick

Stichworte: QueryEscSupport Escape PassThrough

marabu

King555 30. Jan 2006 10:56

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Ich habe es genau so gemacht, wie in dem BDN Artikel beschrieben. Die Kassenschublade öffnet sich, allerdings wird durch das BeginDoc und EndDoc (was aber beides unbedingt notwendig ist, damit es funktioniert) ein kleiner Abschnitt gedruckt. Der Abschnitt ist zwar leer, aber es wird immer ein ca. 2 cm langes Stück Papier rausgefahren und abgeschnitten. Bei 10 Kassenbons wären das schon 20 cm verschwendetes Papier und 10 Papierschnipsel. Also leider keine Lösung.

Der Tipp in deinem Posting davor (AssignPrn) geht leider auch nicht. Da öffnet sich die Schublade garnicht. Mir scheint, er druckt den String, der eigentlich eine Steuersequenz ist, auf das Papier (kann ich leider gerade nicht genau feststellen, da das Thermopapier alle ist, ist gerade normales Papier drin).

Kann man dem Drucker bei dem AssignPrn und Write vielleicht irgendwie sagen, dass das jetzt kein Text ist, sondern ein Steuercode? Ist so eine Art Raw-Modus aktivierbar?

marabu 30. Jan 2006 11:03

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Wird auch ein Papiervorschub erzeugt, wenn du zwischen BeginDoc und EndDoc keine Daten an den Drucker sendest?

marabu

King555 30. Jan 2006 11:12

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Ja, auch dann. Ich verstehe zwar auch nicht warum, weil ja das "Blatt" absolut leer ist, aber es ist leider so.

marabu 30. Jan 2006 11:20

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
In diesem Fall könnte es ein Konfigurationsproblem des Druckers sein. Eventuell kann man ihn so umstellen, dass der Vorschub unterbleibt.

PS: Konfiguriere den Druckertreiber mal um - von COM1 auf FILE - und hänge die erzeugte Datei an. Dann kann man mal analysieren, was über die Schnittstelle geht.

marabu

King555 30. Jan 2006 11:52

Re: Serielle Kassenschublade ansteuern: Was bedeutet z.B &am
 
Ich habe endlich eine Lösung gefunden!

Siehe hier...

Danke an alle für die Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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