Migration von VB6.0-Code zu Visual Studio 2013 (Serielle Schnittstelle)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    Migration von VB6.0-Code zu Visual Studio 2013 (Serielle Schnittstelle)

    Hallo,
    ich bin neu hier in der Community und moechte kurz mein Anliegen schildern.
    Wir haben uns vor etlichen Jahren ein Messgerät zugelegt, daß aus dem eigentlichen Gerät und einem PC (486er) besteht und eine Einheit bildet.
    Die Kommunikation zwischen Gerät (irgendein Mikrokontroller) und dem PC findet über ein Programm das in VB6.0 geschrieben wurde statt. Der Quellcode liegt mir glücklicherweise vor.
    Nun habe ich die Idee entwickelt dieses Programm auf Visual-Studio 2013 zu migrieren.

    Ich bin ganz zuversichtlich, daß es gelingen koennte.
    Es stellt sich jedoch nach intensivem migrieren ein Problem ein das ich bislang nicht lösen konnte.
    Es geht um die Kommunikation beider Geräte über die serielle Schnittstelle.
    Im folgenden schildere ich das Problem. (Ich vermute es ist ein Kodierungs-Problem)

    Quellcode: VB6.0

    Private Sub Command3_Click()
    MSComm1.Output = "6" + Chr$(13)
    End Sub

    Ergebnis laut Portmonitor:
    ASCII HEX DEZ
    Ä<0> C4 00 196 0

    Quellcode: VS 2013

    Private Sub Command3_Click()
    MSComm1.Output = "6" + Chr(13)
    End Sub

    Ergebnis laut Portmonitor:
    ASCII HEX DEZ
    ey<0> 65 79 00 101 121 0

    .....mir gelingt es einfach nicht in VS 2013 den obigen VB6.0-Code über die serielle Schnittstelle zu senden.
    Über Hilfe und die Darstellung des Quellcodes (in VS 2013 oder später) wäre ich sehr dankbar.
    Ich habe etliche solcher kleinen Sequencen zu migrieren und hoffe, wenn ich es verstanden habe, etwas weiter zu kommen.
    Ihr habt sicherlich Spezialisten für solche Probleme.
    .....schon mal herzlichen Dank für Lösungsvorschläge.
    @yak mada Willkommen im Forum. :thumbup:
    Ich gehe mal davon aus, dass Du die Initialisierung des Ports im Griff hast.
    Allerdings sehe ich zwischen Deinem Code MSComm1.Output = "6" + Chr$(13) und den Monitorwerten (hex) C4 00 keinen Zusammenhang.
    "6" + Chr$(13) ist bei mir &h36, &h0D.
    =====
    Als Anhaltspunkt:
    bei der Initialisierung zusätzlich

    VB.NET-Quellcode

    1. SerialPort1.NewLine = Chr(13) ' Zeilenende für .WriteLine
    2. SerialPort1.Encoding = System.Text.Encoding.ASCII ' die Codierung der Gegenstelle, ggf. anpassen
    und dann einfach nur noch eine Zeile mit Endekennung senden:

    VB.NET-Quellcode

    1. SerialPort1.WriteLine("6")

    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!
    Zunächst einmal herzlichen Dank für die schnelle Antwort!
    Mit der Konfiguration des seriellen Ports gibt es keine Schwierigkeiten.
    Allerdings hast Du Recht mit der Angabe der HEX-Werte, ich bin in der Hektik in der Zeile verrutsch! Der exakte Wert ist HEX DD 00

    Vieleicht habe ich die Frage auch falsch gestellt!?
    Noch einmal aufs einfachste reduziert beginnend mit der Start-Sequenz des VB6.0-Programms (die oben angesprochenen sind andere Sequenzen die Später im Programm auftauchen)

    Wie muß der VS2013 -Code aussehen, wenn ich moechte das der Portmonitor mir ASCII Å<0> oder HEX C5 00 anzeigen soll.

    oder ASCII ý<0> HEX DD 00
    oder ASCII b<0> HEX 62 00
    oder ASCII Ä<0> HEX C4 00

    VS2013-Code den ich versucht habe für die Start-Sequenz ohne Berücksichtigung ( Chr(13) ' Zeilenende)

    'MSComm1.Write("Å") 'Ergibt laut Portmonitor HEX 60 00
    'MSComm1.Write(Chr(197)) 'Ergibt laut Portmonitor HEX 60 00
    'MSComm1.Write(&HC5) 'Ergibt laut Portmonitor HEX 67 63 64 00

    Ich kann mir sonst eigentlich ganz gut selbst helfen und bin auch sehr hartnäckig um eine Lösung zu finden, aber diesmal stehe ich völlig auf dem Schlauch.
    Wenn ich von der oben beschriebenen Start-Sequenz den Quellcode kennen würde (mit eventuell erforderlichen Import -Anweisungen) glaube ich mir selbst weiter helfen zu koennen.
    Ich habe inzwischen so viele Code-Tabellen und Hintergrund-Informationen gelesen das ich völlig den Überblick verloren habe.

    MSComm1.Encoding = System.Text.Encoding.ASCII
    habe ich eingebunden hat aber kein Einfluß auf das Ergebnis (Oder habe ich da etwas falsch verstanden?)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „yak mada“ ()

    @yak mada Die Hex-Daten reichen.
    Ich sehe kein 0D in Deinem Output, dafür ein 0.
    Ersetz mal

    VB.NET-Quellcode

    1. SerialPort1.NewLine = Chr(13)
    durch

    VB.NET-Quellcode

    1. SerialPort1.NewLine = Chr(0)
    und arbeite mit .WriteLine().
    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!
    Was euch beiden noch nicht aufgefallen zu sein Scheint ist, dass der eine die veraltete COM-Komponente verwendet(migriert aus VB 6) und der andere die aktuelle Serial-Port-Komponente die man in .Net verwenden sollte.
    Also @TE
    erstmal schmeiß die MSComm weg und füg dir den .Net SerialPort hinzu ist unter den .Net Controls im Designer zu finden...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---