EEPROM Daten lesen / schreiben

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    EEPROM Daten lesen / schreiben

    Hallo Community,
    nun hat es auch mich erwischt. Ich muss mein altes VB6 Projekt in das NET Zeitalter überführen.
    Da gibt es für mich, als NET Neuling, reichlich zu erlernen. Doch jetzt zu meinem Projekt.
    In meinem alten VB6 Projekt schicke ich folgenden String über die serielle Schnittstelle.

    TxD = Chr(&H23) & Chr(&H10) & Chr(&H0) & Chr(&H0) & Chr(&H0) & Chr(&H1)


    Der String ist folgende Format:
    1 Byte Steuercode
    2 Byte Adresse (Little Endian)
    2 Byte Daten (Little Endian)
    1 Byte Checksumme (Xor aller fünf Bytes)

    Der Antwortstring hat das gleiche Format wie der Sendestring.

    Ich verwende VS2010 Express und habe versucht diesen String wie folgt an die serielle Schnittstelle zu geben.

    Using com1 As IO.Ports.SerialPort = _
    My.Computer.Ports.OpenSerialPort(MySerialPort.PortName)
    com1.Write(TxD)
    ‘com1.WriteLine(TxD)
    End Using

    Weder "Write" noch "WriteLine" haben funktioniert. Könnt ihr mir hierbei weiterhelfen?

    Falsches Unterforum! Bitte beachten. Verschoben. ~fufu

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

    @Famore Willkommen im Forum. :thumbup:
    Unter VB6 werden wohl Chars (= 8-Bit-Zeichen) über das Port gesendet.
    VB.NET sendet per Default ASCII-Zeichen (= 7-Bit-Zeichen).
    Stelle das Encoding des Ports um auf einen 8-Bit-Zeichensatz, z.B.:

    VB.NET-Quellcode

    1. SerialPort1.Encoding = System.Text.Encoding.UTF8

    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Die Bytes erst umständlich in 'nen String zu packen, nur um den String wieder durch ein Encoding zu zwiebeln, und weiß Gott was da rauskommt, wenn arbiträre Daten durchgeschoben werden, ist auch irgendwie banane.
    Über die serielle Schnittstelle werden Bytes übertragen. Schreibe also einfach direkt Bytes rein:
    docs.microsoft.com/en-us/dotne…ystem_Int32_System_Int32_

    VB.NET-Quellcode

    1. Dim Txd As Byte() = New Byte() {&H23, &H10, &H0, &H0, &H0, &H1}
    2. com1.Write(Txt, 0, Txd.Length)
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hallo Community,
    zunächst einmal einen herzlichen Dank für eure super schnelle Hilfe.
    Der Port in meinem Projekt brauchte anscheinend irgendeine Encoding Angabe.
    Vielen Dank für eure Tipps.

    @ RodFromGermany und Eierlein
    Im Moment funktioniert das UTF8 Encoding, aber falls es in dieser Hinsicht doch noch zu Problemen kommen sollte, ist das Umstellen des Encoding auf Default in meinem Projekt schon vermerkt.
    @ Niko Ortner
    Der zusammengestellte String in meinem Hilferuf ist eine gekürzte Version aus meinem Projekt und diente nur der Verdeutlichung des zu sendenden Datenformates.
    Der Anwender trägt unterschiedliche Hex-Werte in meiner Anwendung ein, die dann zu einem String zusammengefasst und über die serielle Schnittstelle gesendet werden. Die Übertragung von Bytes funktioniert leider nicht so wie erwünscht. Hiermit bekomme ich 86 Bytes als Antwort, wohingegen ich beim Tip von RodFromGermany und Eierlein 6 Bytes als Antwort zurückbekomme. Diese 6 Bytes brauche ich dann nicht umständlich irgendwo durch zu zwiebeln da sie das gleiche Datenformat haben wie der Sendestring.
    Auch wenn dein Tipp, auf mein Projekt bezogen, nicht funktioniert hat, habe trotzdem vielen Dank für deinen Tipp.

    Niko Ortner schrieb:


    VB.NET-Quellcode

    1. Dim Txd As Byte() = New Byte() {&H23, &H10, &H0, &H0, &H0, &H1}
    2. com1.Write(Txt, 0, Txd.Length)



    Ich würde es testweise mal ohne Encoding aber mit BaseStream probieren und die Definition anders machen:

    VB.NET-Quellcode

    1. Dim Txd() As Byte = {&H23, &H10, &H0, &H0, &H0, &H1}
    2. com1.BaseStream.Write(Txt, 0, Txd.Length)


    Wenn es so funktioniert, dann ist es meiner Meinung nach sauberer.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Hariboo83“ ()

    Hariboo83 schrieb:

    VB.NET-Quellcode

    1. Dim Txd() As Byte = {&H23, &H10, &H0, &H0, &H0, &H1}
    2. com1.BaseStream.Write(Txt, 0, Txd.Length)
    Hast Du von @Niko Ortner ohne Quellenangabe abgeschrieben. X(
    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).
    VB-Fragen über PN / Konversation werden ignoriert!