Benutzer mit den meisten Antworten
invalid cast exeption

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
- Bearbeitet Robert BreitenhoferModerator Mittwoch, 19. Januar 2011 14:58 Formatierung
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).
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 19. Januar 2011 14:58