Laden...

ZVT-Protokoll

Erstellt von marv100 vor 14 Jahren Letzter Beitrag vor 2 Jahren 21.313 Views
M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren
ZVT-Protokoll

Hallo zusammen,

ich wollte mal fragen, ob hier schon mal jemand mit dem ZVT-Protokoll gearbeitet hat?

ZVT = Zahlungsverkehrsterminal Link

Gruß, marv100

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo marv100,

schreib doch schon mal, was deine eigentliche Frage ist, wenn jemand deine obige Frage mit ja beantwortet.

herbivore

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

ich bin momentan noch nicht im Projekt drin aber ich soll eine Schnittstelle zwischen dem Kassensystem aus unserer Software und dem ZVT-Protokoll herstellen.
Bin grad dabei mir das "Handbuch" dazu durch zu lesen aber ich blick da gar nicht durch.

Deswegen wollte ich wissen, ob jemand schon mal damit gearbeitet hat und mir evtl ein paar Tipps geben könnte wie genau ich da vorgehen muss.

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo marv100,

je konkreter du fragst, desto höher ist die Wahrscheinlichkeit einer Antwort. Was ist dein Problem? Wo hängst du? Was ist unklar? Was für Tipps stellst du dir vor?

herbivore

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

wie gsagt momentan hab ich erst noch die Doku vor mir liegen. Bekomm ein Testgerät irgendwann nächste Woche.
Würde gerne wissen wie man mit dem Protokoll vorgeht.*Terminal anmelden *Karte lesen *PIN ok? *Geldbetrag buchen *Kassenbon drucken *Tagesabschlussrechnung *uns was sonst noch dazu gehört

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo marv100,

hm, aber genau das steht doch in der Spezifikation. Im Wesentlichen musst du Bytefolgen zum Gerät senden und vom Gerät empfangen. Ich verstehe leider immer noch nicht, wo dein Problem liegt.

herbivore

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

Ich denke ich schreibe das genau Problem nächste Woche mal, wenn ich das Testgerät hier stehen habe.

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

So.... ich habe nun endlich mein Test-Terminal bekommen. Habe alles angeschlossen und Passwort und TerminalID eingegeben.

Jetzt steh ich schon vor dem ersten Problem. Ich muss das Gerät an meiner Kasse registrieren. Was in der Doku dadrüber steht, versteh ich nicht ganz. Ich weiß nicht, wie mein String aussehen muss, den ich übergebe.

Könnt ihr mir vielleicht mal helfen?
Hier der link zur Doku (Seite 14) klick

Ich denke wenn ich weiß wie der String aussehen muss dann werden die nächsten Schritte etwas einfacher gehen (hoffe ich zumindest)

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

1.815 Beiträge seit 2005
vor 14 Jahren

Hallo!

Also in der Doku steht doch genau drin, was gesendet werden muss. Zumal es sich nicht um einen String, sondern - wie auch herbivore schon bemerkte - um eine Folge von Bytes handelt, welche in der Doku auch bei Bedarf bitgenau erklärt sind.

Um zu wissen, was gesendet werden soll, musst du natürlich erstmal die Informationen zusammentragen, und dafür dann die entsprechenden Werte in der Doku nachschlagen.

Nobody is perfect. I'm sad, i'm not nobody 🙁

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

Mache das in VB aber das ist ja für den Übergabewert uninteressant. Hab den so zusammengebastelt, funktioniert aber nicht 😦

MSComm1.Output = "06 00 ** ** ** 0000 0010 [09 78[03 00]]"

Wobei ** ** ** das pw ist. Was mach ich falsch?

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo marv100,

leider ist wohl eine weitere Wiederholung fällig:

Zumal es sich nicht um einen String, sondern - wie auch herbivore schon bemerkte - um eine Folge von Bytes handelt.

herbivore

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

und wie mach ich das?
habs versucht den string als byte umzuwandeln, funtkioniert aber auch nicht.

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo marv100,

äh, das sind doch Grundlagen. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1. Wenn du den String so wie er ist in Bytes umwandeln würdest, würde vermutlich was ganz anderes als erwartet herauskommen. Es ist einfacher direkt die Bytes zu senden, also z.B. 0x06.

herbivore

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

ich krieg den scheiß mit VB nicht hin....

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

Ich habe mich jetzt über eine Woche mit dem Problem beschäftigt und habe es immer noch nicht geschafft, das Terminal an der Kasse anzumelden.

Kann mir nicht irgendjemand mal dabei helfen? Vielleicht ein kleines Beispiel wie ich das machen muss.
Ich bin momentan echt überfordert damit und weiß nicht mehr weiter.

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

O
1 Beiträge seit 2009
vor 14 Jahren
crc xmodem berechnung

Hi liebe leute,

ich wurde beauftragt, ein Warenwirtschaftssystem für eine Boutique zu schreiben, kein Problem soweit, die Anbindung an das EC Terminal hat auch funktioniert.

Zum Testen und vergleichen, habe ich einfach den Code verwendet, welcher durch andere EC-Software am Seriellen Port erzeugt worden ist.

Ich habe drei verschiedene Transaktionsstring ausgelesen und habe diese zum testen in mein VB Porgamm verbaut, die Kommunikation und übergabe der Werte klappt auch soweit.

0,01 cent = "10 02 06 01 07 04 00 00 00 00 00 01 10 03 2F 0D" (checksumme: 2F0D)

0,10 cent = "10 02 06 01 07 04 00 00 00 00 00 10 10 10 03 66 81" (checksumme: 6681)

1Euro cent = "10 02 06 01 07 04 00 00 00 00 01 00 10 03 2B 4E" (checksumme: 2B4E)

Mein Problem beginnt mit der Übergabe von beliebigen beträgen,.. und der CRC CCITT xmodem Prüfsumme ich komme einfach nicht auf den Wert (siehe oben),...

Ich habe den Quellcode von "terminalhersteller.de" verwendet, doch mein ergebnis ist immer falsch und wird somit nicht vom Terminal akzeptiert.

Das Polynom ist angeblich: X16 + X12 + X**5 + 1

in einer anderen doku findet man allerdings auch dieses Polynom: x ^ 16 + x ^ 15 + x ^ 10 + x ^ 3

Quellcode:


  Dim CRCT(0 To 255) As Long       ' Codetabelle für CRC-16-Check
  Dim CRC As Long                  ' Kurzzeitige Verwendung
  Dim i As Integer                 ' Schleifenvariable
  Dim j As Integer                 ' Schleifenvariable
  Dim HB As Long                   ' CRC-Highbyte
  Dim LB As Long                   ' CRC-Lowbyte
 
  ' * Codetabelle erzeugen (CRC-16) *
  ' Dieses braucht nur 1x gemacht werden.
   For i = 0 To 255
      CRC = i
      For j = 1 To 8
         If (CRC And 1) = 1 Then
            CRC = Fix(CRC / 2) Xor 33800
         Else
            CRC = Fix(CRC / 2)
         End If
      Next j
      CRCT(i) = CRC
   Next i
   Debug.Print CRC
  
 
   ' CRC über den String "Daten$" berechnen.
   ' Werte von CRC-Highbyte ist dann in HB, CRC-Lowbyte ist dann in LB.
   'CRC = 0
   For i = 1 To Len(daten$)
      HB = Fix(CRC / 256)
      LB = CRC - (256 * HB)
      CRC = CRCT(LB Xor Asc(Mid$(daten$, i, 1))) Xor HB
   Next i
   HB = Fix(CRC / 256)    ' CRC-High-Byte
   LB = CRC - (256 * HB)  ' CRC-Low-Byte
Debug.Print "LB="; "hex--"; Hex(LB); "--dezimal"; LB
Debug.Print "HB="; "hex--"; Hex(HB); "--dezimal"; HB

Welche Bytes muss ich verwenden? Ich habe es so verstanden, dass beispielsweise bei "10 02 06 01 07 04 00 00 00 00 00 01 10 03 2F 0D"(0,01cent) nur die 06 01 07 04 00 00 01 03(also alle Dle Etx und STX nicht miteinbezogen in die CRC berechnung,.. habe auch beliebig viele anderekombinationen versucht, doch nie komme ich auf den Wert in den drei beispielen oben,...

ich denke es liegt an der 33800 in der ersten For-Schleife (Tabellen erzeugung) ich denke diese Berechnung (der Wert "33800) ist für ein anderes Polynom,...

doch ich habe schon alles versucht wo ist der Fehler, das Projekt ist fertig und es hapert an der Prüfsumme,...

Was mache ich falsch? Über hilfe oder einen Tipp würde ich mich sehr freuen.

im voraus dankend atilla

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

So... nach langem hin und her habe ich eine Kommunikation herstellen können. Allerdings habe ich noch Probleme beim auslesen der Daten.
Ich bekomme immer nur eine 10 F1 zurück wobei es laut Dokumentation so aussehen sollte:
06 10 02 80 00 00 10 03 F5 1F

Was mach ich falsch?


Private Sub MSComm1_OnComm()
    Dim antwort As String

    antwort = Hex(Asc(MSComm1.Input))
    Text1.Text = Text1.Text & " " & antwort
    'If antwort = "15" Then
    '    MsgBox "Es ist ein Fehler bei der Kommunikation aufgetreten !", vbCritical, "EC Cash"
    '    Exit Sub
    'End If


    'If antwort = "1F" Then
    '    MSComm1.Output = Chr(6)
    'End If

End Sub


hoffentlich darf ich bald wieder c# programmieren

Gruß, marv100

**"Niemand wird je mehr als 640KB RAM benötigen!" **

Bill Gates, 1981

L
34 Beiträge seit 2005
vor 2 Jahren

Hallo die Frage ist bereits etwas älter aber ich habe dazu ein Projekt auf GitHub gefunden das sich sehr Intensiv mit dem Thema auseinandersetzt.
Es gibt dort auch eine Test Software mit der du verschiedene Funktionen ausprobieren kannst.

https://github.com/Portalum/Portalum.Payment.Zvt