![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
![]()
Всем доброго времени суток.
Имеется задачка: к ПК подключается устройство по USB, сказали что комп будет видеть это устройство как Virtual Port. Мне это честно говоря ни о чем не говорит, поэтому подскажите пожалуйста где и что почитать или может есть какие то готовые решения: нужно будет отправлять команды на это устройство, а так же получать некоторые данные (в режиме реального времени постоянно будут идти какие-то данные), которые потом я уже буду отображать на форме. Заранее спасибо. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 24.04.2008
Сообщений: 300
|
![]()
Виртуальный порт, это значит что можно будет обращаться к нему как com порту. В C# есть чудесный класс SerialPort (http://ivanp.ru/работа-с-com-портами-в-net-c/). Не arduino случаем?
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
![]()
А я смогу получать только байты/массив байтов?
ну т.е. данных типа string там не будет? Точно не знаю, но скорее нет чем да. Скорее всего собственная разработка. |
![]() |
![]() |
![]() |
#4 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
![]()
string это тоже байты
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
![]()
а, все верно, именно SerialPort мне и нужен.
Подразумевается что данные будут приходить в формате: данные_1;данные2;...;данные_N;призн ак_конца_строки данные_1;данные2;...;данные_N;призн ак_конца_строки ... данные_1;данные2;...;данные_N;призн ак_конца_строки Так же подразумевается что поток данных идет постоянно (устройство в текущий момент что-то обнаружило и тут же отправляет эти данные), хотя в какой то момент данные могут и закончиться. Я хотел каждую строку записывать в переменную типа List<My_List> (ну через List.Add) предварительно отпарсив ее. Затем тут же на основании старых данных и только что поступивших я формирую отображение данных в DataGridView. Так вот вопрос чтобы все это делать правильно мой код должен быть типа такого: Код:
Короче что-то я запутался %) |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
![]()
т.е. напрашивается бесконечный цикл в котором:
Код:
А на кнопку мы не сможем нажать потому что у нас бесконечный цикл. Значит нужно выполнять этот цикл в отдельном Thread? А цикл прервать когда значение какой нибудь переменной типа bool станет false (а такой мы ее можем сделать при нажатии на кнопку "Закрыть_порт"). Верно рассуждаю или бред? )) |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 03.10.2013
Сообщений: 142
|
![]()
Бесконечный цикл в отдельном потоке (в винформс приложение) - верно мыслите. Переменная выключающая поток - тоже верно мыслите.
Еще бы почитать пару примеров про многопоточность - и все велосипеды отпадуть сами ) |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 24.04.2008
Сообщений: 300
|
![]()
Прошу прощенья, что в старой теме...
Лучше всего использовать событие ( в данном случае:SerialPort.DataReceived) и в этом событие рождать поток, в котором что-либо делать с принятыми данными. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
![]()
Помогите пожалуйста разобраться что не так делаю.
Есть программа Terminal (https://sites.google.com/site/terminalbpp/). Подключаюсь в ней к устройству, ввожу "H:", ставлю галочку напротив "+CR", нажимаю "send" и устройство приняв эту команду отправляет нужный мне ответ. Собственно это же мне надо получить в моей программе WindowsForms. Пишу код: Код:
Может символ возврата каретки как то по другому нужно тут отправлять? Интересный нюанс: если в программе Terminal не ставить галочку "+CR", а в строке ввода написать "H:\r", то ответ тоже не приходит. Наталкивает на мысль что символ возврата каретки какой то другой %) Кто что знает подскажите пожалуйста. p.s.: про DataReceived в курсе. там все аналогично получается. Последний раз редактировалось AnDrOiD73; 17.12.2013 в 12:17. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 03.10.2013
Сообщений: 142
|
![]()
ReadExisting - Reads all immediately available bytes, based on the encoding, in both the stream and the input buffer of the SerialPort object.
то бишь оно НЕ ждет ответа от устройства - а только показывает Вам что УЖЕ есть в приемном буфере (попробуйте паузу постваить в неск.секунд для проверки). |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Windows Virtual PC | genrix | Windows | 6 | 25.02.2013 00:13 |
iCore Virtual Accounts. Забудь про переустановку Windows. | Alepro | Софт | 15 | 08.02.2011 07:22 |
virtual COM, Ethrnet and COM port | Baron9186 | Работа с сетью в Delphi | 2 | 01.11.2010 10:37 |
Можно ли подключить к web form windows form? | Manonia | Windows Forms | 0 | 20.10.2010 05:28 |
Windows form в C++ | xnise | Помощь студентам | 1 | 15.09.2010 16:31 |