- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Quellcode von Visual Basic 6.0 nach Visual Basic .NET

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    27.02.2004
    Alter
    38
    Beiträge
    269
    Anzeige

    Praxistest und DIY Projekte
    rs232 kann man in .net einfach als "Variable" definieren

    z.B.

    Code:
    Dim FLASHER5_SerialPort() As SerialPort
    
    Dim x As Int16
    
       ReDim Preserve FLASHER5_SerialPort(0 To PRG_FLASHER5.GetUpperBound(0))
    
                For x = 0 To PRG_FLASHER5.GetUpperBound(0)
                    If FLASHER5_SerialPort(x) Is Nothing Then  ' Wenn Anschluss schon instanziert
                        FLASHER5_SerialPort(x) = New SerialPort(PRG_FLASHER5(x).PORT, 115200, Parity.Odd, 8, StopBits.One)
                        FLASHER5_SerialPort(x).Handshake = Handshake.None
                        FLASHER5_SerialPort(x).ReadBufferSize = 4096
                        FLASHER5_SerialPort(x).WriteBufferSize = 2024
                        FLASHER5_SerialPort(x).ReadTimeout = -1
                        FLASHER5_SerialPort(x).WriteTimeout = -1
                    End If
    
    ......
        Public Function open(ByVal ProgIndex As Int16) As Boolean
            Dim counter As Int16 = 0
            With FLASHER5_SerialPort(ProgIndex)
                Do Until .IsOpen
                    DoEvents()
                    Try
                        .Open()
                    Catch
                        If counter > 100 Then Return False
                        counter += 1
                    End Try
                Loop
                Return True
            End With
        End Function
    
        Public Function closeAll() As Boolean
            Dim x As Int16
    
            For x = 0 To PRG_FLASHER5.GetUpperBound(0)
    
                Dim counter As Int16 = 0
                With FLASHER5_SerialPort(x)
                    Do Until Not (.IsOpen)
                        DoEvents()
                        Try
                            .Close()
                        Catch
                            If counter > 100 Then
                                FLASHER5_MESSAGES.Enqueue("could not close " & .PortName)
                                Return False
                            End If
    
                            counter += 1
                        End Try
                    Loop
                End With
    
            Next x
            Return True
        End Function
    
     Public Function CmdSend(ByVal stringg As String, ByVal ProgIndex As Int16) As String
            With FLASHER5_SerialPort(ProgIndex)
                If .IsOpen Then
                    .WriteLine(stringg & vbCrLf)
                    'x = Chr(13)
                    Do While .BytesToWrite > 0
                        DoEvents()
                    Loop
                Else
                    FLASHER5_MESSAGES.Enqueue(.PortName & " not open")
                    Exit Function
                End If
    
                Dim x As String = ""
                Dim temp() As String
                Dim counter As Int16 = 0
                Do
    
                    Try
                        DoEvents()
                        System.Threading.Thread.Sleep(20)
                        x &= .ReadExisting
                        If x.Length < 1 Then counter += 1
                        If counter > 100 Then Return "timeout"
    
                    Catch ex As Exception
                        FLASHER5_MESSAGES.Enqueue(ex.Message)
                        Return ex.Message
                    End Try
    
                    If x.StartsWith("#NACK" & vbCr) Then Return "failure"
    
                Loop Until x.StartsWith("#ACK" & vbCr & "#") And x.EndsWith(vbCr)
    
                temp = x.Split("#")
                x = temp(2).TrimEnd(vbCr)
                Return x
    
            End With
    
        End Function
                Next x
    einfach maln bisschen Codefutter
    wenn ihr Fragen zu .net habt kann ich dienen...

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    27.02.2004
    Alter
    38
    Beiträge
    269
    Ach ja, falls vorhanden nehmt lieber 2005, 2003 ist zum Debuggen sch...
    man kann nicht mal den Code zur Laufzeit vernünftig ändern...
    2005er .net ist wirklich erste Sahne!
    Die Ports in den Codeschnipsel sind übrigens als Array definiert, zwecks Multithreading auf mehreren Schnittstellen gleichzeitig....


    MFG teslapower

  3. #13
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    75
    Beiträge
    703
    Danke teslapower. Der Code sieht ja sehr kompetent aus, ich werde das ausprobieren.

    Ich arbeite nur mit VB2005 Express, also der Freeware, darum fehlt mir etwas der Vergleich um ein solides Urteil abzugeben. Aber das Debuggen und das Arbeiten mit 2005 empfand ich auch als sehr komfortabel.
    Das Ding ist kostenlos und hat für normale Anwendungen keine merkbaren Einschränkungen.

    Netter Gruß
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  4. #14
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    75
    Beiträge
    703
    Hier habe ich noch was gefunden.
    http://www.gssg.de/net_serport.htm

    Das ist schon recht aufwendig und läuft unter VB2005

    übrigens mal nicht gegoogelt sondern mit www.ask.com
    Da gab es interessanter Weise andere Ergebnisse die ich noch nicht kannte.

    Netter Gruß
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2007
    Beiträge
    5

    Probleme mit RS232 und VB.NET

    Hallo

    Ich verfolge diesen Thread nun schon fast von Anfang an und habe ein ähnliches Problem. Ich möchte ein VB.NET 2005 (Version 8.0.5) und Framework 2.0, Program schreiben, das einen I2C-Bus über
    RN-I2C-RS232 Adapter ansteuert. Den VB Code kann man ja nach einigen wenigen Änderungen unverändert nutzen,(ja ich weiß kein guter Stil.....) nur die letzten Functionen die SDL und SDA lesen und setzten bereiten mir Kopfzerbrechen.

    Die erste test Function für sieht so aus.

    Code:
    Imports System.IO
    Public Class I2C
        Private Ob_Port As IO.Ports.SerialPort
        Private Int_Delay As Integer = 500
    
        Public Sub New()
            Ob_Port = New Ports.SerialPort("COM1")
            Try
                Ob_Port.Open()
                S_I2C_INIT()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    
        Public Sub S_I2C_INIT()
            S_I2C_STOP()
            S_Delay(Int_Delay)
        End Sub
        Public Function F_I2C_START() As Boolean
           Do
           
            Loop Until (get_sda() = True And get_scl() = True)
            set_sda(False)
            S_Delay(Int_Delay)
            set_scl(False)
            S_Delay(Int_Delay)
            Return True
        End Function
    
        Public Sub S_I2C_STOP()
            set_sda(False)
            set_scl(True)
            Do
                If get_scl() = True Then Exit Do
            Loop Until get_scl() = True
            set_sda(True)
        End Sub
    
        Public Sub S_I2C_ACK(ByVal Boo_ACK As Boolean)
            If Boo_ACK = True Then
                set_scl(False)
                S_Pullse()
            Else
                set_sda(True)
                S_Pullse()
                S_Delay(Int_Delay)
            End If
        End Sub
    
        Public Sub i2c_SendByte(ByVal wert As Byte)
            Dim i As Integer
            Dim bitmask As Byte
            bitmask = 128
            For i = 1 To 8
                set_sda(0)
                If (wert And bitmask) > 0 Then
                    set_sda(1)
                Else
                    set_sda(0)
                End If
                bitmask = bitmask / 2
                S_Delay(Int_Delay)
                S_Pullse()
            Next i
            S_Delay(Int_Delay)
        End Sub
      
        Public Function i2c_EmpfangeByte() As Byte
            Dim i As Integer
            Dim bitmask As Byte
            set_sda(1)
            i2c_EmpfangeByte = 0
            bitmask = 128
            For i = 1 To 8
                set_scl(1)
    empanga:
                If get_scl() = 0 Then GoTo empanga
                If get_sda() = True Then
                    i2c_EmpfangeByte = i2c_EmpfangeByte Or bitmask
                End If
                bitmask = bitmask / 2
                set_scl(0)
                S_Delay(Int_Delay)
            Next i
        End Function
    
        Public Function S_Pullse() As Boolean
            set_scl(True)
            Dim Timeoute As Integer = 0
            Do
                If Timeoute >= 999999999 Then
                    Return False
                    Exit Function
                Else
                    Timeoute = Timeoute + 1
                End If
                If get_scl() = True Then Exit Do
            Loop Until get_scl() = True
            set_scl(False)
            Return True
        End Function
    
        Private Sub S_Delay(ByVal int_Count As Integer)
            Dim int_Lauf As Integer
            For int_Lauf = 0 To int_Count
            Next
        End Sub
    
        Public Sub set_sda(ByVal Boo_zustand As Boolean)
            Ob_Port.DtrEnable = Boo_zustand
        End Sub
        Public Sub set_scl(ByVal Boo_zustand As Boolean)
            Ob_Port.RtsEnable = Boo_zustand
        End Sub
    
        Public Function get_scl() As Boolean
            Return Ob_Port.CtsHolding
        End Function
    
        Public Function get_sda() As Boolean
            Return Ob_Port.DsrHolding
        End Function
       
    End Class
    Nebenbei, es hat etwas gedauert, eine brauchbare Erklärung zu finden, die einem den Wechsel von MSComm.OCX auf die neuen Framework Funktionen erklären.

    Ich öffne also den Port mit
    Code:
    Private Ob_Port As IO.Ports.SerialPort
            Ob_Port = New Ports.SerialPort("COM1")
            Ob_Port.Open()
    und es geht um die Funktionen
    Code:
    Public Sub set_sda(ByVal Boo_zustand As Boolean)
            Ob_Port.DtrEnable = Boo_zustand
    End Sub
    Public Sub set_scl(ByVal Boo_zustand As Boolean)
            Ob_Port.RtsEnable = Boo_zustand
    End Sub
    Public Function get_scl() As Boolean
            Return Ob_Port.CtsHolding
    End Function
    Public Function get_sda() As Boolean
            Return Ob_Port.DsrHolding
    End Function
    Aber mir gelingt es nicht SDA oder SCL auf HIGH zu setzten, hat irgendjemand so etwas schon mal gemacht oder hat ne Idee???

    Schon mal Danke!!!!

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen