На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: maxim84_, juice
  
> работа с RS-232, Visual Basic работа с RS-232
Здравствуйте форумчане.
Сразу оговорюсь, я не программист, но кое какие знания у меня есть.
Так что сильно меня не убивайте.
Проблема вот какая:
нужно отослать команду B1 66 01 00 00 00 00 02 A7 8D 00 по rs-232 и получить ответ приблизительный такой: B3 66 00 00 01 00 00 05 AD 8D 00 00 00
Dim arCommand(10) As Byte
arCommand(0) = &HB1
arCommand(1) = &H66
arCommand(2) = &H1
arCommand(3) = &H0
arCommand(4) = &H0
arCommand(5) = &H0
arCommand(6) = &H0
arCommand(7) = &H2
arCommand(8) = &HA7
arCommand(9) = &H8D
arCommand(10) = &H0
SerialPort1.Write(arCommand, 0, 10)
For i = 1 To 10 'Delay
Threading.Thread.Sleep(10)
Application.DoEvents()
Next
Dim test As String
test = SerialPort1.ReadExisting

Попробовал так, но ответа не получил.
Мовет кто то подскажет как правильно.
Спасибо
1. Взять какую-либо программу-терминал и проверить, что устройство действительно отвечает, т.е. оно работоспособно и выставлены верные установки порта

2. Задать такие же настройки в своей программе, ожидание подольше, и убедиться, что хоть что-то приходит

3. Для практической работы стоит реализовать асинхронный режим с использованием события порта DataReceived
Есть программа, так и называется терминал как MBo написал, там есть возможность отправить в порт из файла. Возьми типа WinHex что-нибудь, туда ты скопируешь типа "B1 66 01 00 00 00 00 02 A7 8D 00".
Я использовал программу COM Port Toolkit 4.0 там все работает, порт отвечает
я не понимаю как релализовать это в visual basic
А порт открыть с нужными параметрами не забыл? Есть от майрософта программа для отслеживания что происходит на портах portmon.
With SerialPort1
Try
_SerialPort1.PortName = nPort
Catch ex As Exception
'comOpen = False
Console.WriteLine("Error Open: " & ex.Message)
MsgBox("COM Port Connection Is Missing ")
Exit Sub
End Try
_SerialPort1.BaudRate = 230400
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.DataBits = 8
SerialPort1.StopBits = IO.Ports.StopBits.One
' Set the read/write timeouts
SerialPort1.ReadTimeout = 60000
SerialPort1.WriteTimeout = 10000

End With
Try
SerialPort1.Open()
Catch ex As Exception
'comOpen = False
Console.WriteLine("Error Open: " & ex.Message)
MsgBox("COM Port Connection Is Missing ")
Exit Sub
End Try

так я открываю порт


А Вот так я работал с другим портом. И там все работает . Правда я посылал стринг "U"
With SerialPort1
Try
_SerialPort1.PortName = nPort
Catch ex As Exception
'comOpen = False
Console.WriteLine("Error Open: " & ex.Message)
MsgBox("COM Port Connection Is Missing ")
Exit Sub
End Try
_SerialPort1.BaudRate = 9600
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.DataBits = 8
SerialPort1.StopBits = IO.Ports.StopBits.One
End If
' Set the read/write timeouts
SerialPort1.ReadTimeout = 60000
SerialPort1.WriteTimeout = 10000

End With
Try
SerialPort1.Open()
Catch ex As Exception
'comOpen = False
Console.WriteLine("Error Open: " & ex.Message)
MsgBox("COM Port Connection Is Missing ")
Exit Sub
End Try
SerialPort1.Write("U" & vbCr) ' sending "U" to serial Port
For i = 1 To 10 'Delay
Threading.Thread.Sleep(10)
Application.DoEvents()
Dim returnStr = ""
SerialPort1.Encoding = System.Text.Encoding.GetEncoding("Windows-1251") 'encoding to ASCII

returnStr = SerialPort1.ReadExisting
Ты выделяешь 10 байт, а пишешь 11 arCommand(10) = &H0

как у тебя не падает на этом?

Добавлено
И пишешь 10 SerialPort1.Write(arCommand, 0, 10)
От 0 до 10 это и есть 11 byte
Dim arCommand(10) As Byte

Я не понимаю в VB но это выделение массива на 10 байт.
Этот байт куда пишется? arCommand(10) = &H0
Цитата ter_nk_ @

Спасибо, я исправил , но проблема не в этом.

Добавлено
Попробую задать вопрос по другому:
Как вместо "U"
SerialPort1.Write("U" & vbCr)
В этои строке послать B1 66 01 00 00 00 00 02 A7 8D 00 во это?
Цитата ter_nk_ @
Я не понимаю в VB но это выделение массива на 10 байт.Этот байт куда пишется? arCommand(10) = &H0

Прикреплённый файлПрикреплённый файлarray.jpg (32,35 Кбайт, скачиваний: 11)
В общем зделал так:

Dim arCommand() As Byte = {&HB1, &H66, &H1, &H0, &H0, &H0, &H0, &H2, &HA7, &H8D, &H0}
SerialPort1.Write(arCommand, 0, arCommand.Length)
For i = 1 To 10 'Delay
Threading.Thread.Sleep(10)
Application.DoEvents()
Next
Threading.Thread.Sleep(10)
Application.DoEvents()
Next
Dim Count As Integer = SerialPort1.BytesToRead
Dim Buffer(0 To Count - 1) As Byte
Dim Text2Display As String = ""
SerialPort1.Read(Buffer, 0, Count)
For I As Integer = 0 To Buffer.GetUpperBound(0)
Text2Display += Buffer(I).ToString("X2") & " "
Next

Спасибо за помощь
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,1172 ]   [ 22 queries used ]   [ Generated: 18.10.17, 16:49 GMT ]