Probleme beim Übertragen von Byte über die RS232 Schnittstelle

  • VB.NET

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

    Probleme beim Übertragen von Byte über die RS232 Schnittstelle

    Hallo Zusammen!

    Ich habe 2 Rechner über die RS232 Schnittstelle miteinander verbunden und versuche nun 1 byte mittels VB2008 an den anderen Rechner zu senden. Bis 127 also 0111 1111 funktioniert das einwandfrei bei 128 (1000 0000) kommt nur 63 (0011 1111) an. Manche Werte werden einfach falsch übertragen. Andere Werte über 128 funktionieren teilweise andere wiederum nicht. Beispielweise geht die 140 nicht aber 255 geht.

    Zur Initalisierung der Schnittstelle benutze ich:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. 'Initialisierung des COM1-Ports:
    3. 'Connect
    4. Try
    5. SerialPort1.PortName = ComboBox1.Text
    6. SerialPort1.BaudRate = ComboBox2.Text
    7. SerialPort1.Encoding = System.Text.Encoding.GetEncoding(28591) 'Bitweise Senden
    8. SerialPort1.Open()
    9. Catch ex As Exception
    10. MsgBox("Verbindung konnte nicht hergestellt werden. Bitte Baud-Rate und COM-Auswahl überprüfen!")
    11. End Try
    12. If SerialPort1.IsOpen = True Then ' nur Beiwerk
    13. Button2.Enabled = True
    14. Button1.Enabled = False
    15. ComboBox1.Enabled = False
    16. ComboBox2.Enabled = False
    17. End If
    18. End Sub


    Die Daten versende ich in dieser Form:

    VB.NET-Quellcode

    1. SerialPort1.Write(chr(128))


    Wär toll wenn mir jemand helfen könnte steh total auf dem Schlauch.
    Ich hoffe ich konnte mein Problem einigermaßen schildern.

    Gruß Michael E.

    Sehe gerade das ich ins falsche Forum gepostet habe. Bitte verschieben.... :D

    *Topic verschoben*

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

    Wenn Du Bytes übertragen willst, sende Bytes und nicht Chars!

    VB.NET-Quellcode

    1. Dim by As Byte() = {0, 1, 2, 3, 4, 5, 6, 128, 129, 254, 255}
    2. SerialPort1.Write(by, 0, by.Length)
    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!

    VB.NET-Quellcode

    1. Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    2. Dim by As Byte = 128
    3. SerialPort1.Write(by)
    4. End Sub



    Wenn ich es so mache kommt die 128 auch net richtig an.



    VB.NET-Quellcode

    1. Dim by As Byte() = {0, 1, 2, 3, 4, 5, 6, 128, 129, 254, 255}
    2. SerialPort1.Write(by, 0, by.Length)


    Überträgt man mit dem Befehlt das Bytearray nacheinander?
    1. Option Strict On
    2. es gibt 3 SerialPort.Write-Prozeduren:
    - Write(ByVal text As String)
    - Write(ByVal buffer() As Char, ByVal offset As Integer, ByVal count As Integer)
    - Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
    Das, was Du glaubst, programmiert zu haben, gibt es gar nicht.
    Also noch einmal:
    Option Strict On

    RodFromGermany schrieb:

    Wenn Du Bytes übertragen willst, sende Bytes und nicht Chars!

    VB.NET-Quellcode

    1. Dim by As Byte() = {0, 1, 2, 3, 4, 5, 6, 128, 129, 254, 255}
    2. SerialPort1.Write(by, 0, by.Length)
    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!
    Ja das hab ich ja verstanden aber wie sieht den der Befehlt für eine Variable aus und nicht für ein Array?
    Was bedeuten die Parameter in der Klammer?
    (zu versendende Variable, ........ ,......)

    Option Strict On produziert 95 fehler in meinem bisherigen Quelltext zb bei :

    VB.NET-Quellcode

    1. Dim zahl as double
    2. a = int(zahl)



    Vielen dank für deine Geduld Rod ^^

    VB.NET-Quellcode

    1. Dim zahl As Double
    2. Dim a As Integer = CInt(zahl)
    Da musst Du jetzt durch. Wenn Du es geschafft hast, meinen Glückwunsch verbunden mit der Hoffnung, dass Du Deinen Projekten immer Option Strict On gibst, das kannst Du im VS einstellen (für die alten musst Du es nachtragen).
    Gehe mit dem Cursor auf SerialPort1.Write und drücke auf F1 - Hilfe.
    buffer
    Typ: System.Byte[]
    Das Bytearray mit den Daten, die an den Anschluss geschrieben werden sollen.
    offset
    Typ: System.Int32
    Der nullbasierte Byteoffset im buffer-Parameter, ab dem Bytes in den Anschluss kopiert werden.
    count
    Typ: System.Int32
    Die Anzahl der zu schreibenden Bytes.

    VB.NET-Quellcode

    1. Dim by As Byte() = {0, 1, 2, 3, 4, 5, 6, 128, 129, 254, 255}
    2. SerialPort1.Write(by, 0, by.Length)
    schreibt also das Array by ab dem Index 0 uns 11 Zeichen. Alle Zeichen im Feld werden auf die Leitung geblasen. :D :D :D
    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!