COM-Münzprüfer ansprechen und Daten empfangen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von WI'ler.

    COM-Münzprüfer ansprechen und Daten empfangen

    Hallo liebe Gemeinde,

    ich beschäftige mich seit längerem mit Münzprüfern. Dabei ist es mir nach harter Arbeit gelungen, LPT und CCTalk Münzprüfer erfolgreich zum Laufen zu bringen.

    Nun will ich mich mal an die serielle Schnittstelle herantasten. Nur leider weiß ich nicht wo ich anfangen soll.

    Ein COM-Münzprüfer ist bei mir am Rechner richtig angeschlossen (anderes Programm für den Test benutzt).

    Habe ich irgendwie die Möglichkeit die möglichen Parameter direkt beim Gerät abzufragen?

    Bin dankbar für jeden Tipp ;)

    Schöne Grüße
    Kannst du mir eventuell einen Beispielcode schreiben, mit dem ich den Münzprüfer erwecken kann und Daten abfrage (praktische Sachen bringen mich eher zum Lernen :)

    EDIT: Hab selber mal etwas zusammengestellt. Funktioniert auch soweit. Nun bekomme ich aber
    bei jeder Münze die selbe Antwort ("Hallo :)"). Wie kann ich Byte-Antwort auslesen?

    Quellcode

    1. Public Class Form1
    2. Private comOpen As Boolean
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. SerialPort1.PortName = "COM1" 'Name der RS-232festlegen.
    5. SerialPort1.Handshake = IO.Ports.Handshake.None 'Kein Handshake
    6. SerialPort1.BaudRate = 9600 'Übertragungsrate
    7. SerialPort1.Parity = IO.Ports.Parity.Even 'Keine Paritätsprüfung
    8. SerialPort1.DataBits = 8 '8 Datenbits
    9. SerialPort1.StopBits = IO.Ports.StopBits.One '1 Stoppbit
    10. SerialPort1.RtsEnable = False 'RTS-Signal deaktivieren
    11. SerialPort1.DtrEnable = False 'DTR-Signal deaktivieren
    12. With SerialPort1
    13. If Not .IsOpen Then
    14. Try
    15. .Open()
    16. comOpen = SerialPort1.IsOpen
    17. Catch ex As Exception
    18. MessageBox.Show(ex.Message, "Fehler beim Open", _
    19. MessageBoxButtons.OK, MessageBoxIcon.Error)
    20. Exit Sub
    21. End Try
    22. End If
    23. End With
    24. TextBox1.ReadOnly = True
    25. End Sub
    26. Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    27. Me.Invoke(Sub() read())
    28. End Sub
    29. Private Sub read()
    30. TextBox1.Text = "Hallo"
    31. End Sub
    32. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    33. SerialPort1.Close()
    34. End Sub
    35. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „WI'ler“ ()

    WI'ler schrieb:

    Funktioniert auch soweit.
    Ich denke mal, es funktioniert die SerialPort-Klasse von .NET.
    Wenn Du mit ieinem Gerät über SerialPort kommunizieren willst, benötigst Du die Befehle, mit denen Du es ansprechen kannst.
    -----
    Jesli ja goworju po russki ty nitschewo ne ponimajesch.
    Wenn ich in russisch rede, verstehst Du nix.
    -----
    Hast Du also eine Liste der Befehle, ihre Struktur und die der Antworten?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    um 1 Byte zu lesen verwende ich z.B. :
    Dim Receive as Integer
    Receive = serialport.ReadByte
    If Receive = &H3F Then
    und so weiter ^^

    mfg
    Mit der Serielle Schnittstelle? Was hast du für Hardware auf dem Münzprüfer?...

    mfg

    WI'ler schrieb:

    liegt wohl
    Das ist wohl ein bisschen wage.
    Kannst Du Dir einen RS232-Listener installieren und beim Original nachsehen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    teste doch einfach was ankommt wenn du eine aktion durchführst das ist so zielmlich die einfachste
    möglichkeit um dann die Daten zum schluss richtig auswerten zu können :)

    MFG BlackNetworkBit
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Ich erhalte das selbe Byte beim Einwurf verschiedener Münzen. Somit kann ich ausschließen, dass der Münzprüfer den Münzwert per Byte-Antwort zurückgibt.

    Ich denke mal, dass sich der Softwarehersteller meines benutzten Programmes sich ein eigenes Protokoll entworfen hat, womit er die Datenübergabe durchführt.

    Komischerweise handelt es sich bei diesen Münzprüfern um LPT-Münzprüfer, die nun auf einmal über die serielle Schnittstelle angeschlossen werden müssen. Deshalb habe ich keine andere Erklärung.

    Münzprüfer:
    EMP 800.00 v4
    NRI G-13

    Auch ein Versuch, die Münzprüfer über die parallele Schnittstelle anzuschließen, schlug fehl.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „WI'ler“ ()

    Ich weiß nicht, warum es gestern nicht geklappt hat, aber nun läuft es ;)

    Kanal 1 = empfangene Byte-Zahl 1
    Kanal 2 = empfangene Byte-Zahl 2
    Kanal 3 = empfangene Byte-Zahl 4

    usw.

    Einfacher als gedacht :)

    Danke an alle Mitwirkenden!

    EDIT: Kurze Ergänzung - Und zwar muss der Münzprüfer dauerhaft senkrecht stehen. Wenn ihr den Münzprüfer wie meine schlaue Person in der Hand haltet und damit dauernd rumwackelt, macht ihr euch das Leben schwer. In einer fixen Stellung bleiben auch die Werte fix!

    Quellcode

    1. Public Class Form1
    2. Private comOpen As Boolean
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. SerialPort1.PortName = "COM1" 'Name der RS-232festlegen.
    5. SerialPort1.Handshake = IO.Ports.Handshake.None 'Kein Handshake
    6. SerialPort1.BaudRate = 9600 'Übertragungsrate
    7. SerialPort1.Parity = IO.Ports.Parity.Even 'Keine Paritätsprüfung
    8. SerialPort1.DataBits = 8 '8 Datenbits
    9. SerialPort1.StopBits = IO.Ports.StopBits.One '1 Stoppbit
    10. SerialPort1.RtsEnable = False 'RTS-Signal deaktivieren
    11. SerialPort1.DtrEnable = False 'DTR-Signal deaktivieren
    12. With SerialPort1
    13. If Not .IsOpen Then
    14. Try
    15. .Open()
    16. comOpen = SerialPort1.IsOpen
    17. Catch ex As Exception
    18. MessageBox.Show(ex.Message, "Fehler beim Open", _
    19. MessageBoxButtons.OK, MessageBoxIcon.Error)
    20. Exit Sub
    21. End Try
    22. End If
    23. End With
    24. TextBox1.ReadOnly = True
    25. End Sub
    26. Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    27. Me.Invoke(Sub() read())
    28. End Sub
    29. Private Sub read()
    30. TextBox1.Text = SerialPort1.BytesToRead
    31. End Sub
    32. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    33. SerialPort1.Close()
    34. End Sub
    35. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „WI'ler“ ()

    UPDATE:

    Der EMP Münzprüfer scheint mit dem Code zu funktionieren. Der NRI leider nicht. Erhalte gar keine Bytes.

    Kann aber auch sein, dass er defekt ist. Berichte dann morgen Abend, wie es ausgegangen ist. Länger werde ich mich damit auch nicht mehr beschäftigen.