Member 12292743 Ответов: 2

Исключение Null refernce во время попытки связи через последовательный порт


Dim withevents COMPort as SerialPort
Dim comOpen as Boolean

Private Sub Form1_FormClosed(ByVal sender as object, ByVal e As System.Windows.Forms.FormCLosedEventArgs)Handles Me.FormClosed

With COMPort 
    .POrtName = "COM20"
    various other properties

End with

If COMPort.IsOpen then
   COMPort.Colse()
End If
End Sub

Private Sub Form1_Load(ByVal sender as  system.object, ByVal e As System.EventArgs)Handles MyBAse.Load
Dim Portnames as string() = serialPort.GetPortNames
if Portnames is nothing then 
MsgBox ("None detected")
Me.Close()
End IF

cbComPort.Items.AddRange(Portnames)
cbComPort.Text = Portnames(0)
End Sub

Private sub btnConnect_Click(ByVal Sender As System.Object, byval e as System.EventArgs) handles btnConnect.Click

Try
 COMPort.Open()
 comOpen = ComPort.IsOpen
Catch
 comOpen = False
 MsgBox("Error Open: " & ex.Message)
End Try

If COMport.IsOPen Then  ' ERROE HERE null reference exception
 COMPort.Write("01")

End If
End Sub


Dim readBuffer as string

Private Sub COMPort_DataReceived(ByVal sender as system.Object, ByVal e As SerialDataReceivedEventArgs) HAndles COMPort.DataReceived

Try
    readBuffer  = COMPort.ReadLine()
    Me.Invoke(New EventHandler(AddressOf DoUpdate))
Catch
  MsgBox("read " &ex.Message)
End Try
End Sub

Public Sub DoUpdate(ByVal sender as Object, Byval e as System.EventArgs)

tbRx.text = readBuffer

End Sub

<pre>

Так вот что у меня есть до сих пор

Что я уже пробовал:

Не совсем уверен, как ее решить. Мне действительно очень нужна помощь, я могу сказать, что всем не понравится этот вопрос, но я не знаю, что делать.

Спасибо

Patrice T

Упс

Member 12292743

его комментарий в btn Connect sub

Member 12292743

ха ха нет проблем

Member 12292743

кроме того, существует несоответствие между тем, что я хочу написать (байты), и тем, что я хочу прочитать( также байты). Как мне это исправить?

2 Ответов

Рейтинг:
2

Patrice T

COMport.IsOPen

это странно, вы должны скорее попробовать
COMport.IsOpen

что вполне вероятно.

[Обновление]
Используйте отладчик, чтобы увидеть, что это такое. COMport когда возникает ошибка.

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Member 12292743

да, я набрал код, не спрашивайте почему, он "IsOpen" в самом редакторе

Member 12292743

постараюсь разобраться в основах отладки, спасибо

Рейтинг:
0

CPallini

Вы никогда не присваиваете допустимое значение COMPort переменная.
Вы должны делать что-то похожее на

COMPort = New SerialPort()
' set the various parameters of the serial port here

Видеть Класса SerialPort (Системы.ИО.Порты)[^].


Member 12292743

Ах да, это имеет смысл, спасибо

Member 12292743

кроме того, существует несоответствие между тем, что я хочу написать (байты), и тем, что я хочу прочитать( также байты). Как мне это исправить?