Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ZVT-Protokoll & APRO Comport (https://www.delphipraxis.net/140710-zvt-protokoll-apro-comport.html)

masterchris_99 24. Sep 2009 10:09


ZVT-Protokoll & APRO Comport
 
Hallo,

ich bin gerade dabei mich ein wenig mit dem ZVT Protokoll und Delphi auseinander zu setzen nur leider bekomme ich es nicht ganz hin.
Ich kann mir ja das Log von APRO angucken ober da steht nur das ich was gesendet habe also gehe ich mal davon aus dass das EC-Terminal nicht geantwortet hat, oder?

Code:
APRO v4.06
Compiler : Delphi 7
Operating System : Windows XP 5.1 Service Pack 2
Device: COM1
Date/time: 24.09.09, 11:04:01
Time     Type     SubType      Data     OtherData
--------  --------  ------------  --------  ---------
0000.002  TrDatChg Avail        00000001 
0000.003  TrgHdAlc Window       000E03A4 
0000.003  Dispatch WriteCom     0000000B [10][02][06][00][04]([00][10][03]
                                            [1C][A2]
Mit diesem Konstrukt probiere ich mich am EC-Terminal anzumelden:

Delphi-Quellcode:
  strBefehl := Chr(16) + Chr(2) + Chr(6) + Chr(0) + Chr(4) + Chr(40) + Chr(0) + Chr(16) + Chr(3) + Chr(28) + Chr(162);
  try
    com_ec.ComNumber := 1;
    com_ec.InitPort;
    try
      com_ec.PutString(strBefehl);
    finally
      com_ec.DonePort;
    end;
    Result := True;
  except
    Result := False;
    Raise Exception.Create ('HP-(1) ' + Exception(ExceptObject).Message);
  end;
Sogar wenn der übergebene String falsch ist müsste doch wenigstens das Terminal antworten, oder?

mfg Chris

Sir Rufo 24. Sep 2009 11:50

Re: ZVT-Protokoll & APRO Comport
 
Also wenn die Variable strBefehl vom Typ string ist, dann ist nach
Delphi-Quellcode:
strBefehl := Chr(16) + Chr(2) + Chr(6) + Chr(0) + Chr(4) + Chr(40) + Chr(0) + Chr(16) + Chr(3) + Chr(28) + Chr(162);
der Inhalt von strBefehl = #16#2#6
und der Rest ist weg, da die strings Nullterminiert sind.

Also wird nicht alles an das Terminal übermittelt.

cu

Oliver

edit: hmmm, seltsam, dass da doch anscheinend die #0 übermittelt werden, hätte ich jetzt nicht gedacht

masterchris_99 25. Sep 2009 08:12

Re: ZVT-Protokoll & APRO Comport
 
Also wenn ich den Port öffne bekomme ich vom Terminal auch ein 00 zurück. Dieses sagt mir das alles okay ist.

mfg Chris

Klaus01 25. Sep 2009 08:27

Re: ZVT-Protokoll & APRO Comport
 
Guten Morgen,

Delphi-Quellcode:
try
  com_ec.ComNumber := 1;
  com_ec.InitPort;            // Port öffnen
  try
    com_ec.PutString(strBefehl); // etwas senden
  finally
    com_ec.DonePort;             // Port schließen
  end;
  Result := True;
.. und wie empfängst Du Daten , geht das überhaupt
wenn der Port geschlossen ist?

Grüße
Klaus

masterchris_99 25. Sep 2009 08:35

Re: ZVT-Protokoll & APRO Comport
 
Hi,

ja das hatte ich gestern schon geändert. Der Port wird erst geschlossen wenn das Prog beendet wird.
Und Daten lese ich mit einem Extra Tool was den Port überwacht und mir alles ausgibt.

Laut der Antwort: http://www.vb-magazin.de/forums/foru...129.aspx#20129

Müsste das Terminal so ansprechbar sein:

Code:
Kasse ® ZVT      10 02 06 00 04 28 00 11 38 10 03 1C A2     das unterstrichen ist der Befehl von Oben

ZVT ® Kasse      06

ZVT ® Kasse      10 02 80 00 00 10 03 F5 1F

Kasse ® ZVT      06
 

ZVT ® Kasse      10 02 06 0F 00 10 03 C6 33

Kasse ® ZVT      06

Kasse ® ZVT      10 02 80 00 00 10 03 F5 1F

ZVT ® Kasse      06
Aber bei mir kommt keine Antwort...

Der Quellcode sieht jetzt so aus:

Delphi-Quellcode:
var daten, strBefehl: String;
begin
  daten := Chr(6) + Chr(0) + Chr(4) + Chr(0) + Chr(0) + Chr(0) + Chr(56);
  strBefehl := Chr(16) + Chr(2) + daten + Chr(16) + Chr(3) + Chr(28) + Chr(162);

  //strBefehl := Chr(16) + Chr(2) + Chr(6) + Chr(1) + Chr(10) + Chr(4) + Chr(0) + Chr(0) + Chr(0) +
  //Chr(0) + Chr(21) + Chr(0) + Chr(73) + Chr(9) + Chr(120) + Chr(16) + Chr(3) + Chr(160) + Chr(116);

  try
    com_ec.PutString(strBefehl);
    Application.ProcessMessages;
  except
    //com_ec.DonePort;
    Application.ProcessMessages;
  end;
end;

Klaus01 25. Sep 2009 08:54

Re: ZVT-Protokoll & APRO Comport
 
Hex: 10 02 06 00 04 28 00 11 38 10 03 1C A2
Dez 16 02 06 00 04 40 00 17 56 16 03 28 162

du schickst aber:
Dez 16 02 06 00 04 40 00 16 56 16 03 28 162

Grüße
Klaus

masterchris_99 25. Sep 2009 09:01

Re: ZVT-Protokoll & APRO Comport
 
Hallo,

hier ein offizielles Log für die Anmeldung am Terminal:
Code:
Anmeldung:
Send: 10 02 06 00 06 12 34 56 BA 09 78 10 03 24 C3  ---- ......4V..x..$.
Recv: 06  ---- .
Recv: 10 02 80 00 00 10 03 F5  ---- ........
Recv: 1F ---- .
Send: 06  ---- .
und hier mein Log:

Code:
Port geöffnet durch Vorgang "Project1.exe" (PID: 3440)

Answer: 25.09.2009 10:04:42.38864 (+308.5000 seconds)

 00                                                .              

Request: 25.09.2009 10:04:43.18564 (+0.7969 seconds)

 10 02 06 00 06 12 34 56 BA 09 78 10 03 24 C3      ......4Vº.x..$Ã
Wenn ich die beiden jetzt vergleiche sehe ich keinen Untershcied:

Code:
10 02 06 00 06 12 34 56 BA 09 78 10 03 24 C3 <-- orig
10 02 06 00 06 12 34 56 BA 09 78 10 03 24 C3 <-- meiner
und sogar wenn er falsch ist müsste ich doch ein NAK bekommen?!?

Hier noch das Log von APRO:

Code:
APRO v4.06
Compiler : Delphi 7
Operating System : Windows XP 5.1 Service Pack 2
Device: COM1
Date/time: 25.09.09, 10:06:43
Time     Type     SubType      Data     OtherData
--------  --------  ------------  --------  ---------
0000.004  TrDatChg Avail        00000001 
0000.004  TrgHdAlc Window       0001059E
0000.006  Dispatch ReadCom      00000001  [00]
0000.006  Trigger  Avail        00000001 
0000.774  Dispatch WriteCom     0000000F [10][02][06][00][06][12]4V[BA]
                                            [09]x[10][03]$[C3]
mfg Chris

Klaus01 25. Sep 2009 09:28

Re: ZVT-Protokoll & APRO Comport
 
So langsam wird es schwierig..

Stimmen denn die Einstellungen des Comports.
Ist die APRO richtig eingestellt (Baudrate, DataBits, StopBits, Handshake(none, Software, Hardware))?

Auf dem Kassensystem kannst Du nicht schauen was da so ankommt?

Grüße
Klaus

masterchris_99 25. Sep 2009 09:35

Re: ZVT-Protokoll & APRO Comport
 
Zitat:

Zitat von Klaus01
Stimmen denn die Einstellungen des Comports.
Ist die APRO richtig eingestellt (Baudrate, DataBits, StopBits, Handshake(none, Software, Hardware))?

Also ich habe eingestellt
Baud = 9600
DataBits = 8
StopBits = 2
Handshake = None

So ist es mir vorgegeben

Zitat:

Zitat von Klaus01
Auf dem Kassensystem kannst Du nicht schauen was da so ankommt?

Mit Kassensystem meinst du das EC-Terminal? Da passiert gar nichts und einen Monitor oder so gibt es leider nicht. Ich denke aber das die Verbindung an sich steht denn sobald ich ja den Port öffne bekomme ich über den Port als Antwort 00

Edit: Der Hersteller meint dass das Gerät richtig eingestellt ist. Also müsste der Fehler ja bei mir liegen?!?

mfg Chris

z3bu 29. Feb 2012 13:34

ZVT-Protokoll & APRO Comport
 
Hallo,

ich habe ein ähnliches Problem mit der Ansteuerung über ZVT. Habe ein EC-Cash-Gerät ("Artema Hybrid") über die Ethernetschnittstelle in mein lokales Netzwerk eingebunden - bekomme auch ohne Probleme einen Ping, sowie eine TelNet-Verbindung realisiert. Mit dem Tool "T-Manager", ein Programm mit dem man ein solches EC-Cash-Gerät ansteuern kann, funktioniert z.B. das Initiieren eines Zahlungsvorgangs oder die einfache Anmeldung an das Gerät. Seitens der Konfiguration und Funktionsfähigkeit der Hardware bestehen somit keine Probleme. Nun möchte ich den hier ebenfalls erwähnten Befehl - "Chr(6) + Chr(0) + Chr(4) + Chr(0) + Chr(0) + Chr(0) + Chr(56)" - für die Anmeldung an das Gerät absetzen. Allerdings läuft die Anwendung auf einen Socket Error. Was mache ich falsch?

Code:
procedure BefehlSenden;
var
  lSBefehl : String;
begin
  lSBefehl := '';

  IdTCPClient1.Host := 'xxx.xxx.xxx.xxx'; // IP des EC-Cash-Gerätes
  IdTCPClient1.Port := 22000;

  IdTCPClient1.Connect; // funktioniert

  if IdTCPClient1.Connected then
    ShowMessage('Verbunden!');

  lSBefehl := Chr(6) + Chr(0) + Chr(4) + Chr(0) + Chr(0) + Chr(0) + Chr(56);
  lSBefehl := Chr(16) + Chr(2) + lSBefehl + Chr(16) + Chr(3) + Chr(28) + Chr(162);

  IdTCPClient1.SendCmd(lSBefehl); // nach Ausführung dieser Zeile kommt es zu dem Socket Error
end;
Würde mich über hilfreiche Antworten sehr freuen


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