|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.10.2013, 14:49 | #1 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
Windows Form, Virtual port
Всем доброго времени суток.
Имеется задачка: к ПК подключается устройство по USB, сказали что комп будет видеть это устройство как Virtual Port. Мне это честно говоря ни о чем не говорит, поэтому подскажите пожалуйста где и что почитать или может есть какие то готовые решения: нужно будет отправлять команды на это устройство, а так же получать некоторые данные (в режиме реального времени постоянно будут идти какие-то данные), которые потом я уже буду отображать на форме. Заранее спасибо. |
22.10.2013, 16:55 | #2 |
Форумчанин
Регистрация: 24.04.2008
Сообщений: 300
|
Виртуальный порт, это значит что можно будет обращаться к нему как com порту. В C# есть чудесный класс SerialPort (http://ivanp.ru/работа-с-com-портами-в-net-c/). Не arduino случаем?
|
23.10.2013, 11:48 | #3 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
А я смогу получать только байты/массив байтов?
ну т.е. данных типа string там не будет? Точно не знаю, но скорее нет чем да. Скорее всего собственная разработка. |
23.10.2013, 11:53 | #4 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
string это тоже байты
|
25.10.2013, 17:49 | #5 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
а, все верно, именно SerialPort мне и нужен.
Подразумевается что данные будут приходить в формате: данные_1;данные2;...;данные_N;призн ак_конца_строки данные_1;данные2;...;данные_N;призн ак_конца_строки ... данные_1;данные2;...;данные_N;призн ак_конца_строки Так же подразумевается что поток данных идет постоянно (устройство в текущий момент что-то обнаружило и тут же отправляет эти данные), хотя в какой то момент данные могут и закончиться. Я хотел каждую строку записывать в переменную типа List<My_List> (ну через List.Add) предварительно отпарсив ее. Затем тут же на основании старых данных и только что поступивших я формирую отображение данных в DataGridView. Так вот вопрос чтобы все это делать правильно мой код должен быть типа такого: Код:
Короче что-то я запутался %) |
25.10.2013, 18:04 | #6 |
Пользователь
Регистрация: 05.06.2010
Сообщений: 21
|
т.е. напрашивается бесконечный цикл в котором:
Код:
А на кнопку мы не сможем нажать потому что у нас бесконечный цикл. Значит нужно выполнять этот цикл в отдельном Thread? А цикл прервать когда значение какой нибудь переменной типа bool станет false (а такой мы ее можем сделать при нажатии на кнопку "Закрыть_порт"). Верно рассуждаю или бред? )) |
26.10.2013, 08:11 | #7 |
Форумчанин
Регистрация: 03.10.2013
Сообщений: 142
|
Бесконечный цикл в отдельном потоке (в винформс приложение) - верно мыслите. Переменная выключающая поток - тоже верно мыслите.
Еще бы почитать пару примеров про многопоточность - и все велосипеды отпадуть сами ) |
19.11.2013, 13:15 | #8 |
Форумчанин
Регистрация: 24.04.2008
Сообщений: 300
|
Прошу прощенья, что в старой теме...
Лучше всего использовать событие ( в данном случае:SerialPort.DataReceived) и в этом событие рождать поток, в котором что-либо делать с принятыми данными. |
17.12.2013, 12:13 | #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. |
17.12.2013, 12:57 | #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 |