-
        

Ergebnis 1 bis 8 von 8

Thema: Entfernungssensor auswerten mit vb express

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511

    Entfernungssensor auswerten mit vb express

    Anzeige

    Hallo Leute, habe mal ein kleines Problem, welches ich selbst nach längerer Suche nicht beheben konnte. Es geht um ein Programm welches über die serielle Schnittstelle Werte bekommt und diese dann in Progress Bars darstellen soll. Die Werte sehen so in etwa aus : 100,400
    Der 400 Wert soll als Wert für die Progress Bar sein. Der erste sagt mir welche Bar was anzeigen soll.

    Doch bekomme ich immer die Fehlermeldung : Index out of Range Exception wurde nicht behandelt ! Was soll das bedeuten ??

    Code:
    Public Class Form1
    
        Dim Buffer As String
    
        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            If SerialPort1.IsOpen = True Then
                SerialPort1.Close()
            End If     
        End Sub
    .
    .
    .
    .
    .
     Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
            Control.CheckForIllegalCrossThreadCalls = False
            Buffer = (SerialPort1.ReadExisting)
            'Die Textbox heißt Terminal und die Daten werden dort
            'hineinkopiert()
            'Terminal.AppendText(Buffer)
            'Terminal.ScrollToCaret()
            Dim Abc As Integer
            Abc = 10
            Dim TextArray() As String = Split(Buffer, ",")
            Abc = Val(TextArray(1))
            If (TextArray(0)) = "50" Then
                ProgressBar1.Value = Abc
            End If
            If TextArray(0) = "100" Then
                ProgressBar2.Value = Abc
            End If
            If TextArray(0) = "150" Then
                ProgressBar3.Value = Abc
            End If
        End Sub
    Ich hoffe ihr könnt und wollt mir helfen...
    Der Einsteiger

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.272
    Du schreibst vermutlich in das Value der ProgressBar einen Wert rein der größer als der Maximalwert oder kleiner als der Minimalwert ist.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.03.2004
    Alter
    69
    Beiträge
    487
    Habe nur Erfahrung mit VB6 und auch das ist schon sehr sehr sehr lange her.
    Vielleicht gibst Du in der Zeile

    Dim TextArray( ????? ) As String = Split(Buffer, ",")

    in den Klammern von TextArray statt meiner Fragezeichen mal einen geeigneten Zahlenwert (z.B. Buffer-Length) ein.
    Mein kleines - eben mühsam erinnertes - mit VB6 geschriebenes Testprogramm zeigt den gleichen Indexfehler, wenn ich der dimensionierten Array-Variablen keinen Wert zuordne.
    Ist so ne Idee.

    Gruß, Günter
    Geändert von Günter49 (15.09.2013 um 00:34 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.272
    @Günter64 Wenn es VB.Net ist (Wovon ich ausgehe) sollte das eigentlich nicht nötig sein, da zur laufzeit die passende Arraygröße automatisch bestimmt wird.
    @Der Einsteiger Ich nehmen mal an du programmierst mit Visual Studio, dort sollte dir der Debugge ja gleich die Zeile ausspucken in der der Fehler auftritt, Wenn nicht kannst du auch schritt für schritt durchgehen und dadurch herausfinden welche Zeile den Fehler verursacht

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Hallo Leute, danke für die Antworten.
    Die Fehlerzeile ist Abc= Val(TextArray(1)) .
    Ich benutze Visual Basic 2010 express.

    Ich weiß jetzt aber nicht, was ich da verändern soll, damit der Fehler nicht mehr kommt.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.272
    Lass dir mal ausgeben was alles in deinem TextArray drin ist. Die Fehlermeldung deutet daraufhin dass an der Stelle 1 kein Element ist.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Jetzt habe ich das mal gemacht, aber es kommt die gleiche Fehlermeldung, aber in einer anderen Zeile...
    Die Fehlermeldung kommt jetzt in der Zeile : Terminal.AppendText(TextArray(1))
    Meine Werte liegen nur so zur Info zwischen 0 und 800.

    Code:
    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
            Control.CheckForIllegalCrossThreadCalls = False
            Buffer = (SerialPort1.ReadExisting)
            'Die Textbox heißt Terminal und die Daten werden dort
            'hineinkopiert()
            'Terminal.AppendText(Buffer)
            'Terminal.ScrollToCaret()
            'Dim Abc As Integer
            'Abc = 10
            Dim TextArray() As String = Split(Buffer, ",")
            Terminal.AppendText(TextArray(1))
            Terminal.ScrollToCaret()
            'Abc = Val(TextArray(1))
            'If (TextArray(0)) = "50" Then
            'ProgressBar1.Value = Abc
            'End If
            'If TextArray(0) = "100" Then
            'ProgressBar2.Value = Abc
            'End If
            'If TextArray(0) = "150" Then
            'ProgressBar3.Value = Abc
            'End If
        End Sub

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.03.2004
    Alter
    69
    Beiträge
    487
    Auch in den .net-versionen von VB muss das leere Array initialisiert werden, siehe hier:
    http://msdn.microsoft.com/de-de/libr...=vs.90%29.aspx
    Zitat:
    „Leere Arrays. Die Obergrenze einer Arraydimension kann mit -1 deklariert werden. Dies bedeutet, dass das Array leer, jedoch nicht Nothing ist, eine Unterscheidung, die bei bestimmten Common Language Runtime-Funktionen wichtig ist. Visual Basic-Code kann auf ein solches Array jedoch nicht zugreifen. Wenn Sie es dennoch versuchen, tritt während der Ausführung ein IndexOutOfRangeException-Fehler auf. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Arrays ohne Elemente.“

    Da keine Grenzen genannt sind und das leere Array nicht initialisiert wurde, kommt beim ersten Aufruf in der Zeile
    Terminal.AppendText(TextArray(1))
    die Exception.
    Es ist doch kein Aufwand, die Länge des Buffers (in VB6: Bufferlaenge = Len(Buffer)) zu bestimmen und in der Zeile vorher

    Dim TextArray( Bufferlaenge ) As String = Split(Buffer, ",")
    zu dimensionieren.
    Zumindest kann man es ja mal ausprobieren.

    Gruß, Günter49

Ähnliche Themen

  1. Chaosradio Express: Einführung in µC
    Von ni.c im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 29.01.2008, 23:09
  2. Visual Basic 2005 Express
    Von PabloEscoba im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 2
    Letzter Beitrag: 11.04.2007, 20:15
  3. Objektsuche mit Entfernungssensor(Sharp GP2D120)
    Von balrog im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 29.08.2006, 18:33
  4. Externer Pci-Express Controller...
    Von traedamatic im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 5
    Letzter Beitrag: 04.12.2005, 14:25
  5. Sharp Entfernungssensor GP2D12 mit Analogausgang
    Von lulone im Forum Sensoren / Sensorik
    Antworten: 10
    Letzter Beitrag: 29.07.2004, 18:04

Berechtigungen

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