PCCar.ru - Ваш автомобильный компьютер

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > Разработка программ

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 19:13   #1
ancc
Гуру
 
Регистрация: 17.03.2008
Возраст: 45
Город: Новокузнецк
Регион: 42
Машина: 2003\Lexus\RX330
Сообщений: 1,192
ancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to behold
По умолчанию Есть спецы по 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 не понимаю. Работу с ком портом брал из какого-то примера скачанного с сайта микрософта.
По монитору ком-порта видно что данные туда уходят и ответ приходит, но в программу не передаются.
ancc вне форума   Ответить с цитированием
Старый 24.01.2010, 21:44   #2
awtoap
Гуру
 
Аватар для awtoap
 
Регистрация: 19.09.2009
Возраст: 46
Город: Мелитополь
Регион: Украина
Сообщений: 2,022
awtoap is a splendid one to beholdawtoap is a splendid one to beholdawtoap is a splendid one to beholdawtoap is a splendid one to beholdawtoap is a splendid one to beholdawtoap is a splendid one to beholdawtoap is a splendid one to behold
По умолчанию

В VB не рублю, но просто скажу как может это дело происходить....нужен весь список функций m_commport. Там должна быть функция проверяющая что принят байт или что-то в этом роде. Затем вызываем функцию чтения. Всю эту хрень обрамляем типа вечного цикла...как получим нужное кол-во байт просто вываливаемся из цикла... а чтобы не получить "вечный кайф" (тобиш вечного цикла) во внутрь вставляем проверку от таймера...если ответа нет больше N-го времени тоже вываливаемся, ток в проге фиксируем как нет ответа и далее по обстоятельствам.
awtoap вне форума   Ответить с цитированием
Старый 24.01.2010, 22:31   #3
dadlick
Пользователь
 
Регистрация: 07.08.2009
Регион: 77, 97, 99, 177
Сообщений: 54
dadlick is on a distinguished road
По умолчанию

Цитата:
Сообщение от ancc Посмотреть сообщение
Если делать так, то в программу ничего не передается.
srd = m_CommPort.Read(5)
m_CommPort.ClearInputBuffer()
Return (srd)
srd = m_CommPort.Read - попробуй без размера считываемого буфера, должно вернутся все что на этот момент получил com port.
На всякий случай прикладываю библиотеку для работы с 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() ' закрываем порт
Вложения
Тип файла: zip RS232.zip (2.0 Кб, 584 просмотров)
dadlick вне форума   Ответить с цитированием
Старый 25.01.2010, 06:12   #4
ancc
Гуру
 
Регистрация: 17.03.2008
Возраст: 45
Город: Новокузнецк
Регион: 42
Машина: 2003\Lexus\RX330
Сообщений: 1,192
ancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to behold
По умолчанию

попробую без размера прочитать все что есть в буфере. Я просто подозреваю что в буфере будут коды символов, мне же надо их в символы преобразовать по ASCII таблице.

Библиотеку использую именно эту, кстати пробовал другую, та данные из порта лучше принимала, но у ней было много других минусов, я от нее отказался.

m_commport.write не обязательно один символ пишет, он пишет сколько скажешь. Вот по такой команде
m_CommPort.Write(Encoding.ASCII.GetBytes("rf00100" ))
Все символы в ком-порт выдаются.

Порт я открываю в другой процедуре, когда инициализирую радио.
ancc вне форума   Ответить с цитированием
Старый 25.01.2010, 06:23   #5
ancc
Гуру
 
Регистрация: 17.03.2008
Возраст: 45
Город: Новокузнецк
Регион: 42
Машина: 2003\Lexus\RX330
Сообщений: 1,192
ancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to behold
По умолчанию

кстати смотрел как чтение из порта в этом примере где библиотека 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
ancc вне форума   Ответить с цитированием
Старый 25.01.2010, 14:44   #6
dadlick
Пользователь
 
Регистрация: 07.08.2009
Регион: 77, 97, 99, 177
Сообщений: 54
dadlick is on a distinguished road
По умолчанию

Цитата:
Сообщение от ancc Посмотреть сообщение
кстати смотрел как чтение из порта в этом примере где библиотека 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
Попробовал сегодня побаловаться с этим классом- результат подвивает если в буфере порта нет данных.
Посему пробежался по MSDN. И вот что накропал (System.IO.Ports.SerialPort) см приложенный файл. У меня работает.

Вопросик, Вы с железкой через ком порт общаетесь или....
с HyperTerminal, модель в протеусе, ...
Вложения
Тип файла: zip WindowsApplication1.zip (54.9 Кб, 755 просмотров)
dadlick вне форума   Ответить с цитированием
Старый 25.01.2010, 15:04   #7
ancc
Гуру
 
Регистрация: 17.03.2008
Возраст: 45
Город: Новокузнецк
Регион: 42
Машина: 2003\Lexus\RX330
Сообщений: 1,192
ancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to behold
По умолчанию

с железкой общаюсь через виртуальный USB сом-порт который у ардуино на борту есть. В гипертерминале все нормально, отправляю текстовые команды, ответы приходят. В CF Тоже все нормально, смотрю через программу portmon. Данные принимаются/передаются.
ancc вне форума   Ответить с цитированием
Старый 25.01.2010, 21:04   #8
ancc
Гуру
 
Регистрация: 17.03.2008
Возраст: 45
Город: Новокузнецк
Регион: 42
Машина: 2003\Lexus\RX330
Сообщений: 1,192
ancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to beholdancc is a splendid one to behold
По умолчанию

покурив подробно пример и сделав пару попыток получил работающий вариант

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 из примера добавить пришлось в проект.
ancc вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 01:38.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot