Поиск устройства подключенного к COM порту - C#
Формулировка задачи:
Здравствуйте. Возник у меня вопрос. Заказали мне сделать одну железяку которая по звонку с сотового телефона открывает шлагбаум если номер звонящего совпадает с номером в базе данных. Ну все работает. Команды железяка получает через SMS. Все бы нечего да вот клиенту не хочется 5000 абонентов SMS-ками записывать. Говорит мол как бы сей девайс к компьютеру подключить и через него. С учетом того что железяка работает под управлением Mega162 я смог к ней подключится только через UART. Так как сейчас на ноутбуках нет COM портов, то я использовал микросхему преобразователь USB <-> UART. Все бы ничего но клиент не хочет выбирать COM порт, мол пусть программа сама ищет железяку. Вот тут я и попал в тупик. Первое что пришло в голову, это получить все COM порты компьютера и поочередно открывать их и слать команду. Если пришел ответ, то вот он наш порт. И тут засада. Если я открываю порт, а на нем нет устройства, то при чтении ответа программа виснет. Вот код программы теста.
Засада кроется вот здесь
byte[] data = {1}; string[] portnames = SerialPort.GetPortNames(); for(int i=0; i<portnames.Length; i++) { SerialPort port = new SerialPort(portnames[i], 19200, Parity.None, 8, StopBits.One); port.Open(); port.Write(data, 0, data.Length); port.Read(data, 0, data.Length); if (data[0] == 1) { label1.Text = portnames[i]; port.Close(); break; } else { port.Close(); } }
port.Read(data, 0, data.Length);
. Если на RxD ничего не приходит, то программа на этой строчке виснет. Вопрос, можно как-нибудь это обойти? Существуют ли какие-нибудь тайменги для прекращения запроса?Решение задачи: «Поиск устройства подключенного к COM порту»
textual
Листинг программы
port.Write(data, 0, data.Length); // Кидаем команду try { port.Read(data, 0, data.Length); } // Читаем ответ(если ничего не пришло отваливаемся по ReadTimeout = 500 catch (TimeoutException) { /* Девайса нет */ }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д