insite2012 писал(а):Основной вид деятельности - я электронщик, исследую контроллеры, изучаю возможности их записи (и чтения, естественно ).
Qwertiy писал(а):insite2012 писал(а):Основной вид деятельности - я электронщик, исследую контроллеры, изучаю возможности их записи (и чтения, естественно ).
Я всегда считал, что чтением и записью контроллеров занимаются программисты...
insite2012 писал(а):Хм... Метод Write вызывается только для отправки строки... А у меня байты...
insite2012 писал(а):Ну и нравится мне это, не скрою.
insite2012 писал(а):Думаю, Вы уже поняли основное назначение этой программы.
insite2012 писал(а):И анализ того, что принято. Если анализ отрицательный - посылка другого значения...
insite2012 писал(а):Более подробно рассказывать в открытую не стоит
Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Public Class Form1
Dim Mass_Size As Integer
Dim MyPorts As Array
Dim Zapros_MassArray() As Byte = New Byte() {&HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF}
Dim Otvet_massArray() As Byte = New Byte(24) {}
Dim Zapros_from_file() As Byte = New Byte(7) {}
Dim Zapros_stage_1() As Byte = New Byte() {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &H4A, &HFF, &HF6}
Dim Zapros_stage_2() As Byte = New Byte() {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &H4A, &HFF, &HF7}
Dim file_with_code As String
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Text = "Finder"
Me.ShowInTaskbar = True
Button1.Text = "Проверить соединение с м/к"
Button2.Text = "Загрузить файл"
Button3.Text = "Поиск"
Label1.Text = "Выбор порта"
Label2.Text = "Выбор скорости"
Label3.Text = ""
Button2.Enabled = False
Button3.Enabled = False
'Button4.Enabled = False
OpenFileDialog1.FileName = Nothing
OpenFileDialog1.Filter = ".ini files (*.ini)|*.ini"
MyPorts = IO.Ports.SerialPort.GetPortNames()
For i = 0 To UBound(MyPorts)
ComboBox1.Items.Add(MyPorts(i))
Next
With ComboBox2.Items
.Add(4800)
.Add(7200)
.Add(8861)
.Add(9600)
.Add(19200)
.Add(28800)
.Add(38400)
.Add(57600)
End With
Try
ComboBox1.Text = ComboBox1.Items.Item(0)
ComboBox2.Text = ComboBox2.Items.Item(0)
Catch Exc As Exception
MessageBox.Show("В системе отсутствуют доступные COM порты", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Me.Close()
End Try
With SerialPort1
.Parity = IO.Ports.Parity.None
.StopBits = IO.Ports.StopBits.One
.DataBits = 8
End With
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
Private Sub ComboBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox2.KeyPress
e.Handled = True
End Sub
Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
e.Handled = True
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort1.PortName = ComboBox1.Text
SerialPort1.BaudRate = ComboBox2.Text
Dim i As Integer = 0
Dim j As Integer = 0
SerialPort1.DtrEnable = True
SerialPort1.Open()
Label3.Text = ""
For i = 0 To 7
SerialPort1.Write(Zapros_MassArray, j, 1)
j += 1
Thread.Sleep(60)
Next
If Otvet_massArray(16) <> &H0 Or Otvet_massArray(15) <> Zapros_MassArray(7) Then
MessageBox.Show("Проверьте скорость и соединение с м/к!", "Finder",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
SerialPort1.DtrEnable = False
SerialPort1.Close()
Array.Clear(Otvet_massArray, 0, 16 + Mass_Size)
Mass_Size = 0
Button2.Enabled = False
Button3.Enabled = False
Else
MessageBox.Show("Соединение с м/к корректное",
"Finder", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
SerialPort1.DtrEnable = False
SerialPort1.Close()
Array.Clear(Otvet_massArray, 0, 18 + Mass_Size)
Mass_Size = 7
Button1.Enabled = False
Button2.Enabled = True
ComboBox1.Enabled = False
ComboBox2.Enabled = False
End If
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
If OpenFileDialog1.ShowDialog = DialogResult.OK Then
file_with_code = OpenFileDialog1.FileName
Button2.Enabled = False
Button3.Enabled = True
End If
End Sub
Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
'Me.Hide()
With SerialPort1
.Parity = IO.Ports.Parity.None
.StopBits = IO.Ports.StopBits.One
.DataBits = 8
End With
Button3.Enabled = False
Dim reader As New StreamReader(file_with_code)
Dim str_with_code As String
SerialPort1.DtrEnable = True
SerialPort1.Open()
SerialPort1.DiscardInBuffer()
Do While reader.Peek() - 1
str_with_code = reader.ReadLine
Dim n As Integer = 0
For S As Integer = 0 To 6
str_with_code = str_with_code.Remove(3 + n, 1)
n += 3
Next
str_with_code = str_with_code.Remove(0, 1)
Dim str_mass() As String = str_with_code.Split("$")
For Q As Integer = 0 To 7
Zapros_from_file(Q) = string_to_byte(str_mass(Q))
Next
Array.Clear(str_mass, 0, 8)
SerialPort1.DtrEnable = True
Array.Clear(Otvet_massArray, 0, 25)
Dim R As Integer = 0
For Q As Integer = 0 To 7
SerialPort1.Write(Zapros_from_file, R, 1)
R += 1
Module1.Pause(500)
Next
If Otvet_massArray(16) = &H0 Then
Dim G As Integer = 17
For S As Integer = 0 To 2
SerialPort1.Write(Zapros_stage_1, G, 1)
G += 1
Module1.Pause(500)
If Otvet_massArray(23) = Zapros_from_file(0) Then
Array.Clear(Otvet_massArray, 0, 25)
Dim H As Integer = 0
For K As Integer = 0 To 7
SerialPort1.Write(Zapros_from_file, H, 1)
H += 1
Module1.Pause(500)
If Otvet_massArray(16) = &H0 Then
Dim L As Integer = 17
For M As Integer = 0 To 2
SerialPort1.Write(Zapros_stage_2, L, 1)
L += 1
Module1.Pause(500)
If Otvet_massArray(21) = Zapros_from_file(1) Then
MessageBox.Show("Yes!", "Finder", MessageBoxButtons.OK,
MessageBoxIcon.Asterisk)
Label3.Text = str_with_code
Array.Clear(Otvet_massArray, 0, 24)
Exit Do
End If
Next
End If
Next
End If
Next
End If
Loop
SerialPort1.Close()
SerialPort1.DtrEnable = False
Button1.Enabled = True
ComboBox1.Enabled = True
ComboBox2.Enabled = True
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Try
Dim i As Integer
For i = 0 To 24
Otvet_massArray(i) = SerialPort1.ReadByte
Next
Catch ex As System.IO.IOException
Catch ex As System.TimeoutException
End Try
End Sub
End Class
Qwertiy писал(а):Что-то у тебя странный код... И почему всё ещё 24?
Посылай следующую последовательность когда текущая обработана, из обработчика соответствующего события. Но используй для этого таймер, чтобы происходило завершение процедуры.
Qwertiy писал(а):А проект этот можешь выложить?
insite2012 писал(а):Отправил.
Qwertiy писал(а):Изучай MSDN'овский пример.
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
Try
Dim stream As Stream = SerialPort1.BaseStream
Dim Reader As New BinaryReader(stream)
Dim B1 As Byte = Reader.ReadByte
Dim B2 As Byte = Reader.ReadByte
Otvet_massArray(0) = B1
Otvet_massArray(1) = B2
If flag_for_read = True Then
Dim B3 As Byte = Reader.ReadByte
Otvet_massArray(2) = B3
End If
flag_for_read = False
Catch ex As Exception
End Try
End Sub
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31