Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr.
Seite 2 von 4     12 34      

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