none
invalid cast exeption RRS feed

  • Frage

  • Hallo, ich möchte Messwerte aus einem Atmega chip per Uart in Visual Basic 2010 visualisieren. Das klappt auch ganz gut. Ich sehe am Bildschirm schöne Sinuskurven. Leider bekomme ich jedoch in unregelmäßigen Abständen eine Fehlermeldung. Invalid Cast exeption.  Ungültige Konvertierung von der Zeichenfolge  in Typ Integer.

    z = SerialPort1.ReadLine
    y(hh) = z

    Ich habe bereits eine Konvertierung mittels Cint versucht aber ohne Erfolg. Bin für jede HIlfe dankbar. Gruß Holger (Code siehe unten)

    Hi, i'm currently trying to visualize measured values in Visual basic using Uart. Everything is fine unless I receive an error message "Invalid Cast exeption" from time to time.

    z = SerialPort1.ReadLine
    y(hh) = z

    I have already tried to convert the sting to int by using Cint. Unfortunately without success. Any help is appreciated. Many thanks Holger

    Public Class Form1
    
      Public opx, upx, lpx, rpx, mypx, mxpx
      Dim hh As Integer
      Dim z As String
      Dim y(1000) As Integer
    
    
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
          SerialPort1.PortName = "COM3"
          SerialPort1.BaudRate ="9600"
          SerialPort1.Open()
        Catch ex As Exception
          MsgBox("Verbindung fehlgeschlagen")
        End Try
    
      End Sub
    
      Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim l As Graphics = PictureBox1.CreateGraphics()
    
        If RadioButton1.Checked = True And hh < 500 Then
          hh = hh + 1
          z = SerialPort1.ReadLine
          y(hh) = z
          l.DrawLine(Pens.MidnightBlue, hh, y(hh - 1), hh + 1, y(hh))
        End If
    
      End Sub
    
      Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
    
      End Sub
    
      Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim l As Graphics = e.Graphics 'Deklaration der Variable l als Grafik
        Dim opx = 0 'obenpixel
        Dim upx = PictureBox1.Height 'untenpixel
        Dim lpx = 0 'linkspixel
        Dim rpx = PictureBox1.Width 'rechtspixel
        Dim mxpx As Integer = PictureBox1.Width / 2 'Hälfte von der Breite (mx = x-Achse)
        Dim mypx As Integer = PictureBox1.Height / 2 'Hälfte von der Länge (my = y-Achse)
    
        l.DrawLine(Pens.Black, 0, opx, 0, upx) 'y-Achse
        l.DrawLine(Pens.PaleGreen, 0, mypx - 50, rpx, mypx - 50)
        l.DrawLine(Pens.PaleGreen, 0, mypx - 100, rpx, mypx - 100)
        l.DrawLine(Pens.PaleGreen, 0, mypx - 150, rpx, mypx - 150)
        l.DrawLine(Pens.PaleGreen, 0, mypx - 200, rpx, mypx - 200)
        l.DrawLine(Pens.PaleGreen, 0, mypx - 250, rpx, mypx - 250)
        l.DrawLine(Pens.Black, lpx, mypx, rpx, mypx) 'x-Achse
        l.DrawLine(Pens.PaleGreen, 0, mypx + 50, rpx, mypx + 50)
        l.DrawLine(Pens.PaleGreen, 0, mypx + 100, rpx, mypx + 100)
        l.DrawLine(Pens.PaleGreen, 0, mypx + 150, rpx, mypx + 150)
        l.DrawLine(Pens.PaleGreen, 0, mypx + 200, rpx, mypx + 200)
        l.DrawLine(Pens.PaleGreen, 0, mypx + 250, rpx, mypx + 250)
    
      End Sub
    End Class

     

    Dienstag, 28. Dezember 2010 21:15

Antworten

  • Hallo Holger,

    z = SerialPort1.ReadLine
    y(hh) = z

    du solltest vorab mal die (am besten auch: Studio default) Compiler-Einstellung anpassen  ('Option Strict'), damit Code sauberer wird.

    Dann ist natürlich die ganz grosse Frage, was bei einer Exception denn im 'z' (ein String-Typ) für ein Inhalt war (oder gar leer), und ob dieser wirklich noch eine Zahl darstellt!
      (denn niemand hier in diesem Forum wird so rasch einen gleichen Atmega zur Hand haben, um dies nachzuvollziehen!)

    Generell, bei einer seriellen Schnittstelle können Zeichen verloren gehen, verfälscht werden, oder Buffer überlaufen, oder Timing-Probleme/Timeouts vorkommen  (gerade mit deinem Timer-Tick), so dass ggf ungültige Daten ankommen  (wenn keine Absicherung, wie leider in deinem Fall offensichtlich, da ASCII-Line Protokoll).

    Dienstag, 28. Dezember 2010 21:32