Отрубается Serial port

Тема в разделе "Arduino & Shields", создана пользователем Фисташка Трям, 27 мар 2016.

  1. ostrov

    ostrov Гуру

    Сначала порт выбирается из списка доступных.
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Перед каждым обращением выбирается?
     
  3. ostrov

    ostrov Гуру

    В начале работы. Я сделал так, чтобы программа ПС могла подключаться к работающему автономно модулю в любой момент чтобы мониторить что там происходит. Модуль периодически выплевывает инфо (примерно раз 10 в секунду), которая отображается на интерфейсе. С него интерфейса в свою очередь можно передавать несложные команды, типа отключение реле и так далее. То есть отвал в процессе работы, теоретически, не страшен, все будет работать как и работало. Во всяком случае такая философия проекта мне кажется наиболее безопасной.
     
  4. Я сделал по другому, программа ищет в списке доступных устройств Дуню, если найдена, то автоматом выбирается порт. Перед каждой посылкой данных проверяю доступность порта. Если порт доступен, то отправляю данные. Если нет, то перегружаю USB порты.
     
  5. ostrov

    ostrov Гуру

    Как узнать дуня или не дуня? Далеко не все дуни признаются. К тому же иногда я использую просто МК с обвязкой типа Атмеги8. А бывает, правда редко, что более одного устройства подключается к компу. Так что мне проще вручную выбрать.
     
  6. У девайса есть дескрипшн же:))) Дуни купленные в амперке всегда распознаются.
    Я виду речь по только об одном устройстве. Для нескольких устройств, можно доработать
     
  7. ostrov

    ostrov Гуру

    Открою секрет: не все дуни куплены в Амперке. )
     
    Фисташка Трям нравится это.
  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Фисташка Трям, а у вас ноут или десктоп? В последнем случае я бы посоветовал поставить вот такую штуку и не париться с отвалившимся юсб.
    А в случае с ноутом можно взять шнурок USB-COM и подключить его напрямую к пинам. Тогда микросхема всегда будет запитана от компа и при отключении ардуино порт пропадать не будет - он будет просто молчать.
     
  9. ostrov

    ostrov Гуру

    Вот, кстати, застрял на том моменте каким методом определять доступен в данный момент порт или нет. Определить открыт он или нет не проблема, при помощи SerialPort1.isOpen, а вот подключен ли он вообще как узнать? Ведь попытка открыть несуществующий порт сразу вызывает ошибку и программа рушится.
     
  10. Megakoteyka

    Megakoteyka Оракул Модератор

    SerialPort.GetPortNames() и в массиве ищите свой порт. А чтобы программа не падала, нужно исключения обрабатывать. Программа не должна падать ни при каких обстоятельствах.
     
  11. ostrov

    ostrov Гуру

    Я сделал функцию которая либо открывает порт если он доступен, либо возвращает ошибку. Это теперь перед каждой оправкой сообщения ее вызывать? Несколько раз в секунду? Или это нормально считается.
     
  12. Если данные не так часто отправляются, то можно Открыть порт, Отправить данные, Закрыть порт.

    А ошибки всегда обрабатывать через конструкцию try except finally и ловить E.Message.
     
  13. ostrov

    ostrov Гуру

    Терпение и труд перетерли эту проблему. Создал процедуры (точнее функции) считывания и записи, в которых учел возможность ошибки, то есть ситуации с внезапным отсутствием порта или превышением таймаута. Теперь при выдергивании шнура выдается сообщение о том что порт потерян и программа переходит в режим ожидания. Далее варианты, или оператор снова должен выбрать порт для соединения или запускается таймер, который с некоторой периодичностью будет опрашивать отвалившийся порт на предмет его возвращения. Программа не падает и это хорошо!
     
  14. Лучше бы прога сам искала отвалившийся порт. Сколько работаю с таймерами с ними всегда какие то глюки
     
  15. Megakoteyka

    Megakoteyka Оракул Модератор

    Например? В чем работаете? Какие таймеры используете? Я только один раз сталкивался с глюком таймера, и то это был самописный таймер микросекундной точности. А все штатные обычно нормально работали.
     
  16. ostrov

    ostrov Гуру

    Она и так ждет отвалившийся порт. Имитирую простым выдергиванием шнура, программа переходит в ждущий режим, после воссоединения автоматически подключается обратно. Могу видео выложить. Но использовать пк в качестве ведущего пока остерегаюсь, только как независимый интерфейс.
     
    Последнее редактирование: 2 апр 2016
  17. В Дельфях они постоянно глючили. Кстати был код высокоточного таймера, вот он работал нормально....
     
  18. Megakoteyka

    Megakoteyka Оракул Модератор

    Писал как-то в дельфях 7 одну программку, использовал стандартные таймеры, та программка уже лет 8 работает, еще ни разу ничего не глючило. Может, дело не в таймерах было?
     
  19. Может и не в них а в говнокоде:)))
     
  20. Megakoteyka

    Megakoteyka Оракул Модератор

    Вот это уже похоже на правду. Я на свои старые исходники без слез смотреть не могу, хочется руки оторвать тому, кто их писал :)
    Все же таймер - один из самых важных компонентов и если он будет действительно глючным, об этом будут все знать и его быстро поправят.