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

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

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

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

На рынке существуют роутеры 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. Реле включает модем плавно, во избежание скачков тока.
  1. Модемы со сторожевым таймером используют отдельный блок питания, разъём от которого пришлось бы припаивать к нашему 12-вольтовому источнику бесперебойного питания.
  2. Нет возможности просто выключить или включить модем для автоматического перехода между проводным каналом связи и GSM.
  3. Бывают случаи, когда модем не завис, но сим-карта в сети не регистрируются. Поможет ли здесь сторожевой таймер — неизвестно. Равно как никто не гарантирует, что сам он не зависнет. Наше решение действует от конечного результата: нет соединения — сбрасываем питание модема.
  1. Модемы можно использовать уже имеющиеся, в том числе недорогие, часто зависающие.
  2. Когда работает проводное соединение, модем можно просто выключить, чтобы не расходовать трафик, а включать только при возникновении проблем с проводным подключением. Причём автоматически.
  3. Простая установка: нужно только соединять три USB-штекера и установить программу. Ошибиться в физическом подключении трудно.

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

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

📎📎📎📎📎📎📎📎📎📎