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

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

Проблема


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

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

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


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

Конструкция имеет два 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 ½ 0 ok
2017–01–24 23:37:00 ½ 0 ok
2017–01–24 23:57:00 ½ 0 ok

Из данного лога видно, что было совершено две перезагрузки модема, после второй из них наш сервер стал в конечном итоге доступен.
Типичная ситуация: деньги на сим-карте кончились, модем не работает, станция недоступна. Счёт пополнили, но модем сам не может запустить мобильный Интернет, пока его не перезагрузит USB-реле (бывает необходима перерегистрация в сети GSM через холодный пуск). Если же с деньгами всё в порядке, сеть не пропадает, то модем проработает без проблем около 36 часов, а потом, скорее всего, снова зависнет и потребует перезагрузки. Раньше для перезагрузки модема приходилось звонить в другие часовые пояса, тревожить людей, объяснять… Наблюдатели на удалённых пунктах получили посылки с нашим причудливым устройством, одолели инструкцию по соединению трёх USB-штекеров, и больше перезагружать модемы мы их не просили, теперь это происходит по щелчку USB-реле и решается компьютером самостоятельно.
Сама программа написана нами на JScript (это такой встроенный в Windows Javascript-подобный язык) и устанавливалась на станции удалённо либо через Remote Desktop, либо через собственную систему централизованного управления станциями на PowerShell Remoting. Надо сказать, через PowerShell работать с большим числом станций проще: один раз написал инструкцию, и на всех станциях выполняется установка автоматически. К тому же, не нужно ждать, пока прогрузится графический интерфейс (как в случае с Remote Desktop).
На некоторых особо важных станциях с нестабильным проводным подключением используется GSM-модем в качестве резервного канала. И его было желательно включать только тогда, когда проводной канал не работает. Тут, опять же, на помощь приходит USB-реле: как только пинги перестали проходить по основному (проводному) каналу, включается модем, Windows автоматически переходит на новое подключение с другим дефолтным шлюзом. Далее раз в сутки модем через реле выключается, чтобы можно было проверить основное подключение. Если оно всё ещё не работает, то модем включается обратно.
Надо сказать, управление дефолтными шлюзами — это обычно целая история: в законах IP «шлюз по умолчанию» может быть только один, а манипуляции с таблицей маршрутизации приводят к проблемам. Дело в том, что при отключении мобильного соединения могут меняться номера сетевых адаптеров, к которым привязываются ручные записи в таблице маршрутизации. Выхода два: либо «железное» отключение второго канала через реле, либо тонкая и аккуратная настройка метрики шлюзов с проверкой логики работы метрик по всем сценариям.
Все события пишутся в базу данных и отображаются в интерфейсе Таблицы учёта станций центрального сервера:
9a84d3933fb547d4b1fa5b333c1fd3de.png

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

  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. Выражаю благодарность коллеге Алексею Васильеву за участие в написании статьи.

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

  • 2 апреля 2017 в 17:42

    0

    Почему бы не использовать контроллер горячего подключения вместо двухступенчатого включения питания?
    Напримерimage
  • 2 апреля 2017 в 19:28

    0

    Я использовал для передергивания удаленной аппаратуры Сетевое реле Laurent-2 там и релюшки есть и можно внешние подключить. Реакция идет на отсутствие пингов или по времени.

© Habrahabr.ru