2 апреля в 17:15

Аппаратное решение зависания GSM-модемов

  1. Проблема
  2. Решение проблемы
  3. Как используется устройство
  4. Результат

Проблема


В нашей организации есть 140 необслуживаемых узлов (комплексов), которые установлены в отдалённых местах от Анапы до Певека, в основном на ведомственных площадках. Сам комплекс состоит из компактного компьютера на Win32 и GNSS-приёмника с антенной на крыше. Нам нужно раз в 15 минут получать с них данные. На некоторых станциях есть доступ в ведомственную сеть, но зачастую приходится использовать мобильный Интернет. Вот так выглядит комплекс:


Обычные USB-модемы (т. н. «свистки») зарекомендовали себя очень плохо: они слишком часто зависают, а качество приёма слабого сигнала оставляет желать лучшего. Мы стали использовать более дорогие USB-модемы промышленного типа с выносной комнатной антенной. Но и они периодически зависали, что приводило к недоступности комплекса. Приходилось звонить на метеостанции, где установлены наши комплексы, подолгу объяснять пожилым наблюдателям, какой именно кабель нужно вытащить и вставить обратно. Не все соглашались выполнять такую сложную процедуру.

Решение проблемы


На рынке существуют роутеры GSM со встроенным внутри сторожевым таймером, но чаще всего они работают с конечным оборудованием по Ethernet, что усложняет настройку, и стоят в несколько раз дороже. Устойчиво работающие модемы за умеренную цену не поддерживают 3G.

Мы решили пойти другим путём. Сначала настроили автоматическую ежесуточную перезагрузку компьютеров, но это не всегда помогало: питание на USB-модем подавалось даже при выключенном компьютере, и это было невозможно перенастроить в BIOS. К тому же, перезагрузка прерывает сбор данных.

Так возникла идея создать USB-реле, которое будет жёстко сбрасывать питание GSM-модема в случае его зависания. Мы получили подходящее изделие на заказ и стали размыкать «плюс» с помощью реле командой с компьютера. В целом, решение работало, но при включении модема в половине случаев компьютер уходил в перезагрузку. Это было связано с тем, что в модеме стояли два больших конденсатора на входе, которые вызывали скачок тока при включении, на что не рассчитан порт USB, и наш маленький компьютер это чувствовал. Чтобы избежать нежелательных перезагрузок мы заказали специальный выпуск USB-реле с двухступенчатым включением нагрузки: сначала модем включается через резистор, уже потом напрямую. Вот так выглядит готовое устройство с удлинителем для удобства:



Конструкция имеет два USB-штекера: один на управление реле, и один на транзит к управляемому прибору (модему). Единственное USB-гнездо предназначено для подключения прибора, именно в нём по управляющей команде размыкается «плюс».

Как используется устройство

Далее мы написали управляющую программу, которая определяет, когда нужно перезагрузить модем, и отправляет команду на его перезагрузку. Работает она по следующему алгоритму:

  1. 3 раза в час программа запускается из Планировщика задач Windows.
  2. Программа проверяет доступность нашего сервера.
  3. Если 4 пинга подряд оказались неудачными, то программа подаёт команду на выключение/включение модема через реле. При этом делается задержка перед включением, чтобы встроенные конденсаторы успели разрядиться.
  4. Результаты пингов и совершённые действия записываются в лог (выключение/включение модема).
  5. При первой возможности логи отправляются на наш сервер, где все события записываются в базу данных для последующего централизованного анализа всех причин отказов работы станций.

Вот пример лога:
Дата/время Количество доступных серверов Количество неудачных пингов подряд Доступность основного сервера Выполнение команды
2017-01-24 20:37:00 0/2 6 no
2017-01-24 20:57:00 0/2 7 no
2017-01-24 21:17:00 0/2 8 no resetmodem
2017-01-24 21:37:00 0/2 9 no
2017-01-24 21:57:00 0/2 10 no
2017-01-24 22:17:00 0/2 11 no
2017-01-24 22:37:00 0/2 12 no resetmodem
2017-01-24 22:57:00 0/2 13 no
2017-01-24 23:17:00 1/2 0 ok
2017-01-24 23:37:00 1/2 0 ok
2017-01-24 23:57:00 1/2 0 ok

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

Типичная ситуация: деньги на сим-карте кончились, модем не работает, станция недоступна. Счёт пополнили, но модем сам не может запустить мобильный Интернет, пока его не перезагрузит USB-реле (бывает необходима перерегистрация в сети GSM через холодный пуск). Если же с деньгами всё в порядке, сеть не пропадает, то модем проработает без проблем около 36 часов, а потом, скорее всего, снова зависнет и потребует перезагрузки. Раньше для перезагрузки модема приходилось звонить в другие часовые пояса, тревожить людей, объяснять… Наблюдатели на удалённых пунктах получили посылки с нашим причудливым устройством, одолели инструкцию по соединению трёх USB-штекеров, и больше перезагружать модемы мы их не просили, теперь это происходит по щелчку USB-реле и решается компьютером самостоятельно.

Сама программа написана нами на JScript (это такой встроенный в Windows Javascript-подобный язык) и устанавливалась на станции удалённо либо через Remote Desktop, либо через собственную систему централизованного управления станциями на PowerShell Remoting. Надо сказать, через PowerShell работать с большим числом станций проще: один раз написал инструкцию, и на всех станциях выполняется установка автоматически. К тому же, не нужно ждать, пока прогрузится графический интерфейс (как в случае с Remote Desktop).

На некоторых особо важных станциях с нестабильным проводным подключением используется GSM-модем в качестве резервного канала. И его было желательно включать только тогда, когда проводной канал не работает. Тут, опять же, на помощь приходит USB-реле: как только пинги перестали проходить по основному (проводному) каналу, включается модем, Windows автоматически переходит на новое подключение с другим дефолтным шлюзом. Далее раз в сутки модем через реле выключается, чтобы можно было проверить основное подключение. Если оно всё ещё не работает, то модем включается обратно.

Надо сказать, управление дефолтными шлюзами – это обычно целая история: в законах IP «шлюз по умолчанию» может быть только один, а манипуляции с таблицей маршрутизации приводят к проблемам. Дело в том, что при отключении мобильного соединения могут меняться номера сетевых адаптеров, к которым привязываются ручные записи в таблице маршрутизации. Выхода два: либо «железное» отключение второго канала через реле, либо тонкая и аккуратная настройка метрики шлюзов с проверкой логики работы метрик по всем сценариям.

Все события пишутся в базу данных и отображаются в интерфейсе Таблицы учёта станций центрального сервера:



Результат

Коротко резюмирую, как работает получившаяся система:

  1. Компьютер собирает данные с измерительного прибора станции.
  2. USB-модем передаёт данные через сотовую сеть.
  3. USB-реле управляет питанием модема.
  4. Программа отключает и включает питание модема (через реле) в случае зависания или когда нужно переключить канал связи.
  5. Реле включает модем плавно, во избежание скачков тока.

Модемы, которые мы используем, обходятся примерно по 6 000 руб., ещё 2 300 руб. USB-реле. В сумме это дешевле, чем использование модемов со встроенным сторожевым таймером, которые имеют и ряд недостатков:

  1. Модемы со сторожевым таймером используют отдельный блок питания, разъём от которого пришлось бы припаивать к нашему 12-вольтовому источнику бесперебойного питания.
  2. Нет возможности просто выключить или включить модем для автоматического перехода между проводным каналом связи и GSM.
  3. Бывают случаи, когда модем не завис, но сим-карта в сети не регистрируются. Поможет ли здесь сторожевой таймер — неизвестно. Равно как никто не гарантирует, что сам он не зависнет. Наше решение действует от конечного результата: нет соединения — сбрасываем питание модема.

Использование же USB-реле для управления модемом имеет следующие преимущества:

  1. Модемы можно использовать уже имеющиеся, в том числе недорогие, часто зависающие.
  2. Когда работает проводное соединение, модем можно просто выключить, чтобы не расходовать трафик, а включать только при возникновении проблем с проводным подключением. Причём автоматически.
  3. Простая установка: нужно только соединять три USB-штекера и установить программу. Ошибиться в физическом подключении трудно.

Увидеть и услышать, как работает реле, выключая и включая модем, можно на этом видео:


В итоге, проблема зависания GSM-модемов решена железно (в прямом и переносном смыслах) и больше нас не беспокоит. А заодно появились дополнительные возможности по управлению каналами связи.

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

Если возникнут вопросы, пишите: vort@ipg.geospace.ru

P.S. Выражаю благодарность коллеге Алексею Васильеву за участие в написании статьи.
Никита Полунин @Pontific
карма
28,0
рейтинг 12,5
Пользователь
Похожие публикации
Самое читаемое Разное

Комментарии (51)

  • 0
    Почему бы не использовать контроллер горячего подключения вместо двухступенчатого включения питания?
    Напримерimage
  • +1
    Я использовал для передергивания удаленной аппаратуры Сетевое реле Laurent-2 там и релюшки есть и можно внешние подключить. Реакция идет на отсутствие пингов или по времени.
  • +2
    На сколько я знаю, некоторые USB умеют отключать питание. По крайней мере у меня на ноутбуке в некоторых режимах сбережения энергии порты USB отключат питание при нективности девайса. Очень не удобно на мышке — чуть зазевался и она отвалилась — перетыкай.

    Собственно раньше были даже джамперы на материнке — там питание можно быловыбрасть прямо с линии +5в от БП или от управляемой шины.

    Понятно — не в любом компе схемотехнически реализовано управлеие питанием USB (USB2), но внешнее, да еще и РЕЛЕ!!! это ИМХО как-то уж очень… там по уму один ключик нужен — не те там токи (разрешенные) что бы на них реле ставить.

    В USB3 — на сколько я понял беглый просмотр спеки «по диогонали», управление питанием — штатная фича.
    • 0

      В немного похожей ситуации — промышленный компьютер с linux внутри,
      просто выключал и включал питание USB порта, для этого то ли нужно
      было чуть-чуть поправить стандартный driver, то ли уже была готовая утилита
      управляющая питанием с помощью sysfs, и нужно было ее только скомпилировать — давно было.

      • 0
        Там не только в драйверах дело. Есть еще и аппаратная поддержка управлением питания USB. На сколько я понимаю — она не на любом «железе» реализована.
        • 0
          На самом деле, очень многие матплаты позволяют на USB-портах отключать и включать питание (Тестировал как под Linux, так под Windows). Но, конечно, зависит от контроллера.

          Автор, на ваших железках не будет возможности проверить? Тут, ан Хабре, даже статьи были, ЕМНИП.
          • 0
            На самом деле, сам уже забыл как под Windows это.
            ЕМНИП, опять же, была утилитка специальная (или сам писал, возможно), но под Windows работаю очень редко уже как много лет.
            Как вариант — остаётся devcon
            Нужные команды:
            devcon status *
            devcon status usb*
            devcon findall usb*
            devcon find *usb*
            devcon disable "@usb\root_hub\нужный_ID"
            devcon enable "@usb\root_hub\нужный_ID"
            devcon restart "@usb\root_hub\нужный_ID"
            devcon remove
            devcon rescan

            Инфу и сам devcon легко нагуглить.
            Работает в WinXP и некоторых других (Не уверен что будет работать в Vista/7/8/10).

            Но мне самому любопытно.
            • 0
              устройство само может не хотеть включаться/перезапускаться, пока не будет разомкнуто питание usb
              мне как то не удалось запустить флешку после того как сделал ей eject /dev/sdX
    • +2
      Ну если у них такие суровые модемы, которые вызывают перезагрузку при подключении в USB, то и банальное «echo on > /sys/bus/usb/devices/usb1/power/level» тоже могло вызывать перезагрузку.

      Впрочем, это или более усовершенстванное управление питанием USB, возможно станет следующим усовершенствованием.
  • 0
    Аналогичные сторожевые таймеры очень давно используется в платежных терминала с модемами питающимися от 5 и 12 В, в терминалах оба питания берутся с компьютерного Б.П.
    Логика чуть шире — если нет обращений от компьютера то выдается сигнал на ресет компьютера.
  • 0
    image
    Первое что пришло на ум это плавное включение на полевом транзисторе. Цена вопроса 50руб.
    • 0
      1. только с другой стороны надо включать (комплементарный), а то модем очень удивится

      2. даже в самых дешёвых китайских роутерах бывает возможность вкл/выкл питанию usb-порта.
  • 0
    > Обычные USB-модемы (т. н. «свистки») зарекомендовали себя очень плохо: они слишком часто зависают

    Если не секрет, какие модели использовали и что используете сейчас?
    • 0
      Сейчас используются Teleofis 3G Terminal (это у них на входе два больших конденсатора).

      Иногда использовали операторские модемы (когда с собой не было Teleofis'а).
  • 0
    > Обычные USB-модемы (т. н. «свистки») зарекомендовали себя очень плохо: они слишком часто зависают
    Хм, Huawei e1750 работает в tp-link 1043nd под openwrt месяцами без перезагрузки
    • 0
      У разных модемов очень по разному. e303-те, например, не виснут неделями, в то время, как e3131 живет трое-четверо суток. CDMA свистки от Скайлинка не выдерживали и суток.
      • 0
        Неделями тоже не годится. У нас одна станция в Певеке — там неделями можно ждать вертолёта, чтоб уехать. А расчётный срок эксплутации комплекса — 5 лет.
  • +2
    Такое чувство, что это разработка лет 10 назад была сделана. В виде курсовой работы 3-4 курса.
    • +1
      Как не смешно, но 5 лет назад на диплом я как раз такую систему делал)))

      image
  • 0
    Сейчас используем похожее решение проблемы зависающих USB-свисков. Только вот плата (на нашем жаргоне — «сопли») обходятся нам намного дешевле (около 250р). Паяем сами небольшими партиями (15-20 шт) по мере необходимости. Плата на CP2102, и двух транзисторах, подключается напрямую в колодку USB на материнской плате.
  • 0
    Разве простое отключение устройства в диспетчере устройств не снимает питание с порта? Написать тот же скрипт, передёргивающий устройство, как по мне, куда проще и дешевле, чем клепать девайс за 2.5к и тревожить людей с его установкой.
    • +1
      К сожалению, не всегда это работает. Видимо, зависит от матплаты, устройства и контроллера.
      Но, как я уже писал выше, очень многие материнки это позволяют (Может потребоваться настройка в биосе/эфи)
  • 0
    Я понимаю, когда вы покупаете дешевые usb-свистки, и остаетесь один на один со своими проблемами.
    Но дорогие, промышленные… они же дорогие не потому что там золотые дорожки, а ради саппорта, который НУЖНО пинать больно и часто.

    обращались в службу поддержки модемов? что вам ответили?
  • 0
    У себя в проекте использую дешевые китайские USB реле (300 рублей) и 4G модем Huawei E3372:
    image

    Все надежно работает на Ubuntu Server 16.04.2 LTS с регулярными обновлениями.
    • 0
      Можно ссылку на али или где брали? У нас на РЖД есть тоже комплексы, где под линуксом (кстати, есть ли информация как управлять этим реле? нужен ли root или обычным пользователем можно?) работает, и подключено много usb устройств, а одно из них периодически «отваливается», лечится передёргиванием кабеля usb. Проблеме не один год уже, и проблема плавающая, нельзя просто взять и посмотреть, что не работает, т.к. в 99,9% времени всё работает. Пробовали и usb перезапускать, и комп перезагружать и выключать-включать — всё не то. Разве что вот такие костыли приделать, и интегрировать в систему, чтобы автоматом перезапускала когда устройство отвалится.
      • 0
        Брал на ebay через поиск по «usb relay»
        • 0
          Про драйвер написано тут http://diyhobby.ru/articles/mikroshema-ch340-i-modul-ch340g. На ebay в описании товара есть команды.
      • 0
        Если не секрет, что за устройство?
        • 0
          Видеонаблюдение с веб камер и торговый терминал со сканерами штрих-кода.
          Все подключено к портам usb 3.0 на мини-компьютере GB-BACE-3160.

          Советую брать платформы только с usb 3.0 портами, проблем будет меньше.
        • 0
          Это Вам мало что скажет: электронный терминал самообслуживания (часть комплекса «электронный маршрут машиниста»)
          • 0
            Спасибо, раньше работал в сфере разработки СЦБ, всего лишь остаточный интерес.
  • 0
    Двухступенчатое включение это конечно круто, но мне кажется конденсатор в пару сотен микрофарад перед реле решил бы проблему.
    И да следующий этап как я понимаю сторожевые таймеры для самих компьютеров, они ведь тоже могут зависнуть.
    Или это вопрос уже решен?
    • 0
      Там же промышленный комп, у него watchdog штатный.
    • 0
      У нашей модели штатного Watchdog нет.
      Иногда компьютеры зависали, тогда просили кнопкой перезапустить. Особо боязливых и пожилых сотрудников на метеостанциях просто просили выдернуть из розетки на два часа (чтобы ИБП разрядился).

      Бывало, слетал Windows. Вероятно, из-за непредвиденного пропадания питания. Решили так: если GPS-приёмник полчаса работает от встроенного аккумулятора, то компьютер получает по USB об этом информацию (вместе с потоком данных) и просто штатно выключается. ИБП постоянного тока компьютера хватает как раз примерно на час. Включается по таймеру BIOS (когда будет питание).
  • +1
    А почему монтаж без DIN-реек? Ради охлаждения?
  • +2
    Железное порно.

    1. Я не гонял модемы хуавей 3272/3372 4G сутками, но работали они вполне стабильно.
    Возможно в вашем ящике слишком жарко.

    2. На юзби портах питание вполне дёргается программно, наверное даже под корявой вендой такое возможно.

    3. Если уж вы решили колхозить отдельный мега девайс, то питание стоило брать не с несчастного USB порта а от источника по солиднее.

    4. Надеюсь механическое реле не использовалось…

    5. Опять же труднорешаемые проблемы с сетью — это только в венде.

    6. Возможно дешевле было брать нормальные роутеры которые умеют дёргать питалово на USB порту, и обычный юзби модем, и всю маршрутизацию и логику городить в таком роутере, а дурацкой венде (раз вы так к ней привязаны) отдавать готовый интернет по эзернету.
    Зухелы какие по проще, тплинки перешитые в опенврт, или грёбаные тики.

    7. Ну и ещё раз, на не венде оно было бы дешевле, проще и надёжнее. Можно было бы обойтись каким нибудь жалким ARM за пару тыщ, типа: Orange Pi PC 2 или совсем мелкий дешман: NanoPi NEO 512Mb за тыщу с копейками.

    Проще говоря, вашему проекту ещё есть куда расти и очень обильно.
    Из личного опыта могу сказать: не теряйте времени и силы с вендой, оно того не стоит. В бсд/линухе всё проще решается и стабильнее работает.
    • 0
      Соглашусь по всем пунктам, кроме 2. Далеко не на всех платах можно управлять питанием USB. Отключать сам интерфейс — да, но это совсем не то же самое, что отключение питания на порту USB. На большинстве дешёвых и даже не совсем дешёвых материнках питание заведено с силовых +5В, через предохранители (обычно группами по 2-4 порта), в лучшем случае — через микросхему типа ncp380 — вот только в этом случае можно управлять питанием. C usb3 всё несколько сложнее.
    • 0
      1. Наши модемы должны работать годами, а командировка в некоторые пункты обходится в десятки тысяч рублей.

      2. На нашем устройстве питанием USB управлять нельзя.

      3. Зачем?

      4. Механическое реле и транзистор с резистором в качестве первой ступени.

      5. Для наших задач Windows намного более удобен, а достойный софт для работы с дорогостоящими GNSS-приёмниками под Linux никто не написал.

      6. Возможно.

      7. Увы, их мощностей не хватает. А настройка и разработка того, что уже есть готовое под Windows, обошлись бы дороже. На фоне стоимости комплекса цена ОС несущественна, если Вы переживаете об этом.
      • 0
        А какой GNSS приемник? Это смотрели http://gnss-sdr.org?
        • 0
          Javad Alpha.
      • –2
        1. Хз причём тут коммандировка.
        Я к тому что мопеды могли виснуть от перегрева в этом ящике. Самое логичное решение в таком случае — лепить их к радиаторам или искать более вменяемые модели, возможно в которых это уже сделали.

        2. Да, бывает.

        3. Затем что вы сами жаловались что новый гипер модем при включении так дохера жрёт что мелкий недокомп с виндой ребутается. Вот питание от блока питания напрямую и решило бы эту проблему. Ну может потребовался бы отдельный DC-DC для 12->5, я хз что у вас там.

        4. Я к тому что механика зло. Даже оч качественная.

        5. Насчёт удобства венды я бы ещё поспорил касательно десктопа. Но похоже вы мазахисты или не хотите учится раз вам венда после всего описанного нравится. (вы ператите или честно покупаете 100500 лицух на всё?) )
        У меня уже после недели возни с BSD появилась чёткая и аргументированная мысль: я зря терял время с вендой столько лет.
        Хз что за GNSS, но обычные GPS вполне себе цепляются и работают, ничего сложного.
        Производителей пинать пробовали? Спеки у них брать на протоколы общения?

        7. У вас почти вся статья о том как вы возитесь и подпираете глюки венды всякими разными костылями.
        При этом у меня стойкое ощущение что всё это хозяйство можно было легко уместить в метллическую коробочку 20х20х10 см, и состояло бы оно из какого то мопеда, платки за 1-3к руб, ну и может не большого колхоза для питания и вочдогинга. При этом коробочка бы ещё и радиатором охлаждения выступала.
        И подозреваю что стоило бы оно сильно дешевле.

        Я понимаю что делаете как можете и что дают, просто предлагаю посмотреть по сторонам на другие варианты.
        Опять же, лёжа под МС на их десктопной венде (а них других нет) — вы должны осознавать что впереди у вас ничего хорошего: дыры, обновления, EOL. И вы ничего сделать не сможете с этим. Даже в перспективе 5 лет всё довольно стрёмно в плане поддержки этого хозяйства на плаву.
        • 0
          Ладно.
  • 0
    Проблема с зависаниями модемов, зачастую, является не проблемой самих модемов, а действиями операторов связи. В каждой сети Билайн, Мегафон, Теле2, МТС, не имеет значения кто, раз в определенный промежуток времени происходит магическое действие под названием LACupdate. В этот момент сеть заставляет все абонентов перерегистрироваться в сети. Кто не смог, того сеть считает выключенным. Заставить модем зарегистрироваться снова можно с помощью AT команд.
    Главное, что процедура перерегистрации зависит не от цены модема, а от многих других факторов уже связанных с сетью.
  • 0
    Для модемов лучше делать отдельное питание, а не питать их от USB.
    • 0
      Почему?
      • 0
        Модемы очень прожорливы и капризны к питанию. Не каждый USB может выдать достаточное питание и в результате модемы виснут, тупят, перезагружаются и т.д., но в результате во всём винят модемы.
        • 0
          Мы замеряли, было чуть больше 100 мА. Возможно, конечно, в каких-то ситуациях потребление больше, но паять отдельное питание для USB-модема — это как-то слишком сложно. И не гарантирует бесперебойной его работы.
  • 0
    известная проблема. каждую ночь —
    /sbin/modprobe -vr ehci_hcd
    /sbin/modprobe -v ehci_hcd
    
  • 0
    Модемы телеофис имеют настраиваемый внутренний вотчдог.
    Когда я его правильно настроил (перезагрузка модема при зависании и 1 раз в сутки) — то забыл о том, что такое зависший модем навсегда.
    А до этого тоже хотел внешний «отключатель» городить.
  • 0
    1. То есть то, что модемы зависают, никого не удивляет.
    2. То, что компьютер может уйти в ребут после подключения USB устройства, никого не удивляет.
    3. То, что ребята не знают о существовании термисторов, удивляет только меня.

    Что я делаю не так, если мои АТС работают годами без перезагрузки, или теперь так принято?
    Грустно как то…
    • 0
      1. Зачастую зависают не модемы, а теряется регистрация в сети.
      2. Всякое бывает.
      3. Кто на что учился.

      АТС она для этого и разрабатывалась, что бы бесперебойно работать годами (если мы говорим о хардварных решениях типа SI2000, 1000S12...). Жалобы на зависание, в основном, идут на бытовые модемы типа Е171 и т.д. Повторюсь, в большинстве случаев отсутствие связи является не проблемой модема, а особенностью работы сети связи в данном месте.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.