|  | 
|  23.01.2010, 19:13 | #1 | 
| Гуру  Регистрация: 17.03.2008 Возраст: 46 Город: Новокузнецк Регион: 42 Машина: 2003\Lexus\RX330 
					Сообщений: 1,192
				        |  Есть спецы по VB.NET ? Или может просто VB Значит сам я в этом слабо понимаю, но вот нужно чужой исходник под себя немного заточить. Вот кусок кода. Тут пишем в ком-порт нужные данные. Case 1 m_CommPort.Write(Encoding.ASCII.GetBytes("rf00100" )) m_CommPort.Write(Encoding.ASCII.GetBytes(Chr(13))) System.Threading.Thread.Sleep(1000) Теперь мне надо прочитать с ком-порта ответ 5 байт.Ответ будет в виде обычного текста ASCII. Если он есть и если это цифры, то мне надо это значение вернуть в Return Если делать так, то в программу ничего не передается. srd = m_CommPort.Read(5) m_CommPort.ClearInputBuffer() Return (srd) Подскажите как сделать? Сам ниче в этом VB.NET не понимаю. Работу с ком портом брал из какого-то примера скачанного с сайта микрософта. По монитору ком-порта видно что данные туда уходят и ответ приходит, но в программу не передаются. | 
|   |   | 
|  24.01.2010, 21:44 | #2 | 
| Гуру  Регистрация: 19.09.2009 Возраст: 47 Город: Мелитополь Регион: Украина 
					Сообщений: 2,022
				        |   В VB не рублю, но просто скажу как может это дело происходить....нужен весь список функций m_commport. Там должна быть функция проверяющая что принят байт или что-то в этом роде. Затем вызываем функцию чтения. Всю эту хрень обрамляем типа вечного цикла...как получим нужное кол-во байт просто вываливаемся из цикла... а чтобы не получить "вечный кайф" (тобиш вечного цикла) во внутрь вставляем проверку от таймера...если ответа нет больше N-го времени тоже вываливаемся, ток в проге фиксируем как нет ответа и далее по обстоятельствам. | 
|   |   | 
|  24.01.2010, 22:31 | #3 | |
| Пользователь  Регистрация: 07.08.2009 Регион: 77, 97, 99, 177 
					Сообщений: 54
				  |   Цитата: 
 На всякий случай прикладываю библиотеку для работы с Com портом, может быть Вы его и используете. Dim m_CommPort As New RS232 ' объевляем объект m_CommPort.Open("Com6", 19200, RS232.enumParity.None, 8, RS232.enumStopBits.One) ' открываем порт и указываем его параметры m_CommPort.Write(Asc("C")) 'отсылаем в порт символ. Учти этой командой можно отправить за раз только один символ srd = m_CommPort.Read 'читаем все пришедшие данные com в порт m_CommPort.Close() ' закрываем порт | |
|   |   | 
|  25.01.2010, 06:12 | #4 | 
| Гуру  Регистрация: 17.03.2008 Возраст: 46 Город: Новокузнецк Регион: 42 Машина: 2003\Lexus\RX330 
					Сообщений: 1,192
				        |   попробую без размера прочитать все что есть в буфере. Я просто подозреваю что в буфере будут коды символов, мне же надо их в символы преобразовать по ASCII таблице. Библиотеку использую именно эту, кстати пробовал другую, та данные из порта лучше принимала, но у ней было много других минусов, я от нее отказался. m_commport.write не обязательно один символ пишет, он пишет сколько скажешь. Вот по такой команде m_CommPort.Write(Encoding.ASCII.GetBytes("rf00100" )) Все символы в ком-порт выдаются. Порт я открываю в другой процедуре, когда инициализирую радио. | 
|   |   | 
|  25.01.2010, 06:23 | #5 | 
| Гуру  Регистрация: 17.03.2008 Возраст: 46 Город: Новокузнецк Регион: 42 Машина: 2003\Lexus\RX330 
					Сообщений: 1,192
				        |   кстати смотрел как чтение из порта в этом примере где библиотека m_commport реализовано, там оно побайтно читает из порта, и как-то хитро выводит. m_CommPort.InputStream(0) 'While (m_CommPort.Read(1) <> -1) ' Write the output to the screen. 'WriteMessage(Chr(m_CommPort.InputStream(0)), False) 'End While | 
|   |   | 
|  25.01.2010, 14:44 | #6 | |
| Пользователь  Регистрация: 07.08.2009 Регион: 77, 97, 99, 177 
					Сообщений: 54
				  |   Цитата: 
 Посему пробежался по MSDN. И вот что накропал (System.IO.Ports.SerialPort) см приложенный файл. У меня работает. Вопросик, Вы с железкой через ком порт общаетесь или.... с HyperTerminal, модель в протеусе, ... | |
|   |   | 
|  25.01.2010, 15:04 | #7 | 
| Гуру  Регистрация: 17.03.2008 Возраст: 46 Город: Новокузнецк Регион: 42 Машина: 2003\Lexus\RX330 
					Сообщений: 1,192
				        |   с железкой общаюсь через виртуальный USB сом-порт который у ардуино на борту есть. В гипертерминале все нормально, отправляю текстовые команды, ответы приходят. В CF Тоже все нормально, смотрю через программу portmon. Данные принимаются/передаются. | 
|   |   | 
|  25.01.2010, 21:04 | #8 | 
| Гуру  Регистрация: 17.03.2008 Возраст: 46 Город: Новокузнецк Регион: 42 Машина: 2003\Lexus\RX330 
					Сообщений: 1,192
				        |   покурив подробно пример и сделав пару попыток получил работающий вариант m_CommPort.ClearInputBuffer() m_CommPort.Write(Encoding.ASCII.GetBytes("rf00100" )) m_CommPort.Write(Encoding.ASCII.GetBytes(Chr(13))) System.Threading.Thread.Sleep(1000) srd = "" Dim i As Integer For i = 1 To 6 While (m_CommPort.Read(1) <> -1) WriteMessage(Chr(m_CommPort.InputStream(0)), False) End While Next Return (srd) еще процедуру writemessage из примера добавить пришлось в проект. | 
|   |   | 
|  | 
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| 
 |  |