tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
4413
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    andree112 andree112 ist offline Grünschnabel
    Registriert seit
    Mar 2007
    Beiträge
    1
    Hallo Zusammen,

    ich komme bei einem Problem nicht weiter.
    Ich habe ein Gerät (EC Cash Gerät) und möchte dies, über seriell, an mein VB Programm anbinden. Das Problem ist, das das Gerät immer innerhalb von 500 ms eine Antwort vom Computer fordert, sonst gibt es eine Fehlermeldung heraus.
    Die Kommandos bestehen aus verschieden langen HEX Zeichen. Sie fangen immer mit 10 02 an und hören immer mit 03 ( ist CRC Prüfsumme) auf.
    Ich habe es einfach so gemacht, das ich im OnComm Ereigniss jedes einzelnes Zeichen abfange und solbald ein definiertes Zeichen kommt sende ich die definierte Antwort.

    Private Sub MSComm1_OnComm()


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





    'If ted1 = "33" Then
    'MSComm1.Output = Chr(6)
    'MSComm1.Output = Chr(16) + Chr(2) + Chr(128) + Chr(0) + Chr(0) + Chr(16) + Chr(3) + Chr(245) + Chr(31)
    'End If

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

    'If ted1 = "7D" Then
    'MSComm1.Output = Chr(6)
    'MSComm1.Output = Chr(16) + Chr(2) + Chr(128) + Chr(0) + Chr(0) + Chr(16) + Chr(3) + Chr(245) + Chr(31)
    'End If

    'If ted1 = "F2" Then
    'MSComm1.Output = Chr(6)
    'MSComm1.Output = Chr(16) + Chr(2) + Chr(128) + Chr(0) + Chr(0) + Chr(16) + Chr(3) + Chr(245) + Chr(31)
    'End If
    'End Sub



    Dies hat auch soweit funktioniert, aber es gibt halt das Problem, das es Kommandos gibt die als letztes Zeichen zwar die gleichen haben, aber die vorhergehenden anders sind. (CRC Prüfsumme)
    Nun habe ich versucht immer alle Zeichen in einer Buffer$ zu speichern und dann immer mit einem String zu vergleichen, sobald der richtige String komplett ist soll er dann die Antwort senden. Dies hat aber nicht geklappt, weil das Programm dazu scheinbar zu langsam arbeitet.
    Als weiterer Nachteil der ersten Lösung ist, das ich aus einem String Werte herauslesen möchte um die weiter zu bearbeiten. Wenn ich aber immer nur auf ein Zeichen reagiere habe ich den kompletten String nicht zur verfügung.

    Als letzten Weg habe ich mir überlegt, das ich einfach eine Anforderung sende, und dann mit einer DO UNTIL LOOP Schleife darauf warte bis die Antwort kommt.

    MSComm1.Output = Chr(16) + Chr(2) + Chr(6) + Chr(0) + Chr(4) + Chr(0) + Chr(0) + Chr(0) + Chr(252) + Chr(16) + Chr(3) + Chr(LB) + Chr(HB)

    Do
    DoEvents
    buffer$ = buffer$ & MSComm1.Input
    Loop Until InStr(Hex(Asc(buffer$)), "0610028000001003F51F" & vbCrLf)
    .
    MSComm1.Output = Chr(6)
    buffer$ = ""
    buffer$ = buffer$ & MSComm1.Input
    Do
    DoEvents
    Loop Until InStr(Hex(Asc(buffer$)), "1002060F001003C633" & vbCrLf)
    MSComm1.Output = Chr(6)
    MSComm1.Output = Chr(16) + Chr(2) + Chr(128) + Chr(0) + Chr(0) + Chr(16) + Chr(3) + Chr(245) + Chr(31)

    MSComm1.PortOpen = False


    Selbst das hat nicht funktioniert.

    Vielleicht hat jemand von euch eine Idee wie das funktionieren könnte. Mit Beispiel währe super.

    PS: Es ist nicht einfach mein Problem zu beschreiben, falls Ihr eine Frage habt einfach antworten. Was noch dazu kommt, das ich noch nicht soviel Erfahrung im programmieren habe.

    PPS: Falls jemand von euch Fragen zur Programmierung von der Schnittstelle allgemein hat kann mir die gerne Stellen. Die Schnittstelle heißt im Fachbegriff ZVT Schnittstelle.
     

  2. #2
    marv100 marv100 ist offline Grünschnabel
    Registriert seit
    May 2009
    Beiträge
    1
    Hallo andree,

    sitze gerade vor dem selben Problem. Ich weiß, dein Beitrag ist schon etwas älter aber ich versuche es trotzdem.
    Hast du das Problem lösen können? Ich bin soweit, dass ich Daten erfolgreich an das Terminal senden kann, aber habe Probleme bei dem auslesen der Antwort.
    Ich erwarte einen Wert, der z.B. so aussieht:
    0610028000001003F5F1
    erhalte allerdings immer nur 10F1.
    Hast du oder jemand anders eine Lösung dafür?

    Hier mein Quellcode zum auslesen der Antwort:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    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

    Wobei das mir nur bedingt weiterhilft.

    Gruß, marv100
     

Ähnliche Themen

  1. Auslesen der Seriellen Schnittstelle
    Von DerHorst im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 02.06.08, 21:31
  2. Arbeiten mit der seriellen Schnittstelle
    Von Huemler im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 25.05.07, 17:15
  3. Arbeiten mit der seriellen Schnittstelle
    Von Huemler im Forum Linux & Unix
    Antworten: 0
    Letzter Beitrag: 25.05.07, 13:38
  4. Serielle Schnittstelle / MSComm bzw Rs232-Klasse
    Von Nervensache im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 07.10.05, 19:18
  5. Antworten: 2
    Letzter Beitrag: 07.09.04, 14:41