Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.240.21] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте форумчане.
Сразу оговорюсь, я не программист, но кое какие знания у меня есть. Так что сильно меня не убивайте. Проблема вот какая: нужно отослать команду 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 Попробовал так, но ответа не получил. Мовет кто то подскажет как правильно. Спасибо |
Сообщ.
#2
,
|
|
|
1. Взять какую-либо программу-терминал и проверить, что устройство действительно отвечает, т.е. оно работоспособно и выставлены верные установки порта
2. Задать такие же настройки в своей программе, ожидание подольше, и убедиться, что хоть что-то приходит 3. Для практической работы стоит реализовать асинхронный режим с использованием события порта DataReceived |
Сообщ.
#3
,
|
|
|
Есть программа, так и называется терминал как MBo написал, там есть возможность отправить в порт из файла. Возьми типа WinHex что-нибудь, туда ты скопируешь типа "B1 66 01 00 00 00 00 02 A7 8D 00".
|
Сообщ.
#4
,
|
|
|
Я использовал программу COM Port Toolkit 4.0 там все работает, порт отвечает
я не понимаю как релализовать это в visual basic |
Сообщ.
#5
,
|
|
|
А порт открыть с нужными параметрами не забыл? Есть от майрософта программа для отслеживания что происходит на портах portmon.
|
Сообщ.
#6
,
|
|
|
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 |
Сообщ.
#7
,
|
|
|
Ты выделяешь 10 байт, а пишешь 11 arCommand(10) = &H0
как у тебя не падает на этом? Добавлено И пишешь 10 SerialPort1.Write(arCommand, 0, 10) |
Сообщ.
#8
,
|
|
|
От 0 до 10 это и есть 11 byte
|
Сообщ.
#9
,
|
|
|
Dim arCommand(10) As Byte
Я не понимаю в VB но это выделение массива на 10 байт. Этот байт куда пишется? arCommand(10) = &H0 |
Сообщ.
#10
,
|
|
|
Цитата ter_nk_ @ Спасибо, я исправил , но проблема не в этом. Добавлено Попробую задать вопрос по другому: Как вместо "U" SerialPort1.Write("U" & vbCr) В этои строке послать B1 66 01 00 00 00 00 02 A7 8D 00 во это? |
Сообщ.
#11
,
|
|
|
Цитата ter_nk_ @ Я не понимаю в VB но это выделение массива на 10 байт.Этот байт куда пишется? arCommand(10) = &H0 Прикреплённый файлarray.jpg (32,35 Кбайт, скачиваний: 511) |
Сообщ.
#12
,
|
|
|
В общем зделал так:
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 Спасибо за помощь |