ReadChar problem...

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    ReadChar problem...

    Hallo Leute, und danke fürs reinschauen. habe eine frage:

    habe einen microcontroller der mir zustand einer Lichtschranke sendet. gesendet wird in char. entweder 0 oder 200 als char. (was auch immer das für ein buchstabe ist.)

    jetzt habe ich zwei programme zum testen. eins ist vom hersteller, da kommen diese 0 und 200 an. und das andere von mir in vb. und bei mir kommt entweder 0 oder 63 an. was habe ich falsch verstanden an readchar?

    hier ist mein code falls es hilft:

    VB.NET-Quellcode

    1. Public Class HintergrundProzess Dim comport = New IO.Ports.SerialPort("COM1") Private owner As Form1 = Nothing Private thr1 As New Threading.Thread(AddressOf hintergrundProzessRoutine) Private zeichen As Integer
    2. Private Delegate Sub funktion1(ByVal wert As Double) Public Sub New(ByVal ownerForm As Form1) Me.owner = ownerForm comport.Baudrate = 9600 comport.Databits = 8 comport.stopbits = 1 comport.parity = IO.Ports.Parity.None comport.ReceivedBytesThreshold = 1 comport.open() If thr1.IsAlive = False Then thr1.Start() End Sub
    3. Private Sub hintergrundProzessRoutine() Dim status As New funktion1(AddressOf owner.status) Threading.Thread.Sleep(1000) While True zeichen = comport.Readchar owner.Invoke(status, zeichen) End While
    4. End Sub
    5. End Class


    was ist das denn? wie kriege ich das richtig formatiert?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class HintergrundProzess
    2. Dim comport = New IO.Ports.SerialPort("COM1")
    3. Private owner As Form1 = Nothing
    4. Private thr1 As New Threading.Thread(AddressOf hintergrundProzessRoutine)
    5. Private zeichen As Integer
    6. Private Delegate Sub funktion1(ByVal wert As Double)
    7. Public Sub New(ByVal ownerForm As Form1)
    8. Me.owner = ownerForm
    9. comport.Baudrate = 9600
    10. comport.Databits = 8
    11. comport.stopbits = 1
    12. comport.parity = IO.Ports.Parity.None
    13. comport.ReceivedBytesThreshold = 1
    14. comport.open()
    15. If thr1.IsAlive = False Then thr1.Start()
    16. End Sub
    17. Private Sub hintergrundProzessRoutine()
    18. Dim status As New funktion1(AddressOf owner.status)
    19. Threading.Thread.Sleep(1000)
    20. While True
    21. End While
    22. zeichen = comport.Readchar
    23. owner.Invoke(status, zeichen)
    24. End While
    25. End Sub
    26. End Class

    Ein serielles Port sendet Bytes, keine Chars.
    Chars ist dann das, was wir dann lesen wollen.
    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!

    EugenIS schrieb:

    jetzt habe ich zwei programme zum testen. eins ist vom hersteller, da kommen diese 0 und 200 an. und das andere von mir in vb. und bei mir kommt entweder 0 oder 63 an. was habe ich falsch verstanden an readchar?
    Ich sehe das Problem gerade nicht. Es ist doch total egal, was du zurück bekommst. Es kann doch auch 0 und 1 sein. Hauptsache, du kannst die Zustände unterscheiden!?

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    VB.NET-Quellcode

    1. Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    2. Dim ToRead As Integer = SerialPort1.BytesToRead
    3. Dim Buffer(ToRead - 1) As Byte
    4. SerialPort1.Read(Buffer, 0, ToRead)
    5. End Sub
    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!
    RodFromGermany ich habe die Methode ausprobiert und bekomme irgend was zurück, womit ich garnichts mehr anfangen kann.

    ich habe das problem noch nciht gelöst. Also ich empfange nur werte zwischen 0 und 128. das heist alles was drüber ist wird nicht erkannt. gibt es nicht eine möglichkeit einen integer zu lesen? warscheinlich ist bei vb char halt so definiert...


    Jetzt habe ich es. ist erledigt. danke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EugenIS“ ()

    Wenn, dann 0 ... 127.
    Es sieht so aus, als wäre SerialPort1.DataBits bei Dir auf 7 statt 8 eingestellt.
    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!