В общем, опять я попал в засаду, никак мне этот порт не дается.
Задача в следующем: посылаю в порт запросы, и нужно принять определенное число байт (24 или 7), в зависимости от того, есть ли соединение с устройством или нет. Если устройство отвечает, то все нормально, число принятых байт в буфере совпадает. А вот когда соединения нет, буфер приема же объявлен размером в 24, и при закрытии порта вылетает исключение. Прошу подсказать, как это обойти. Заранее извиняюсь за неуклюжий код, я только учусь, массивы только-только освоил.
- Код: Выделить всё
Imports System.IO.Ports
Public Class Form1
Dim comBuffer As Byte() = New Byte(24) {}
Dim Mass_Code As Byte() = New Byte(7) {}
Private Sub CommPortSetup()
With SerialPort1
.PortName = "COM1"
.BaudRate = 4800
.DataBits = 8
.Parity = Parity.None
.StopBits = StopBits.One
.Handshake = Handshake.None
End With
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
CommPortSetup()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Mass_Code(0) = string_to_byte("FF")
Mass_Code(1) = string_to_byte("FF")
Mass_Code(2) = string_to_byte("FF")
Mass_Code(3) = string_to_byte("FF")
Mass_Code(4) = string_to_byte("FF")
Mass_Code(5) = string_to_byte("FF")
Mass_Code(6) = string_to_byte("FF")
Mass_Code(7) = string_to_byte("FF")
SerialPort1.Open()
SerialPort1.DtrEnable = True
Dim i As Integer = 0
Dim j As Integer = 0
For i = 0 To 7
SerialPort1.Write(Mass_Code, j, 1)
j += 1
zad()
Next
If Mass_Code(0) = comBuffer(0) Then
Dim zapros1 As Byte() = {&HFF}
Dim adress1 As Byte() = {&HFF}
Dim adress2 As Byte() = {&HFF}
zad()
SerialPort1.Write(zapros1, 0, 1)
zad()
SerialPort1.Write(adress1, 0, 1)
zad()
SerialPort1.Write(adress2, 0, 1)
zad()
If comBuffer(24) = Mass_Code(0) Then
MsgBox("Код совпал!")
SerialPort1.DtrEnable = False
Else
MsgBox("Код не совпадает!")
SerialPort1.DtrEnable = False
End If
Else
MsgBox("Мк не отвечает! Проверьте скорость и соединение с мк!")
SerialPort1.DtrEnable = False
End If
Array.Clear(comBuffer, 0, 24)
SerialPort1.Close()
zad()
End Sub
Function string_to_byte(ByVal A As String) As Byte
Dim str As String = A
str = "&H" & str
Dim intByte As Byte
Dim int As Integer
int = CDbl(str)
intByte = Convert.ToByte(int)
Return intByte
End Function
Sub zad()
For i = 0 To 10000000
i += 1
Next i
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
For i As Integer = 0 To 24
comBuffer(i) = SerialPort1.ReadByte()
Next
End Sub
End Class