Аппаратное решение зависания GSM-модемов
- Проблема
- Решение проблемы
- Как используется устройство
- Результат
Проблема
В нашей организации есть 140 необслуживаемых узлов (комплексов), которые установлены в отдалённых местах от Анапы до Певека, в основном на ведомственных площадках. Сам комплекс состоит из компактного компьютера на Win32 и GNSS-приёмника с антенной на крыше. Нам нужно раз в 15 минут получать с них данные. На некоторых станциях есть доступ в ведомственную сеть, но зачастую приходится использовать мобильный Интернет. Вот так выглядит комплекс:
Обычные USB-модемы (т. н. «свистки») зарекомендовали себя очень плохо: они слишком часто зависают, а качество приёма слабого сигнала оставляет желать лучшего. Мы стали использовать более дорогие USB-модемы промышленного типа с выносной комнатной антенной. Но и они периодически зависали, что приводило к недоступности комплекса. Приходилось звонить на метеостанции, где установлены наши комплексы, подолгу объяснять пожилым наблюдателям, какой именно кабель нужно вытащить и вставить обратно. Не все соглашались выполнять такую сложную процедуру.
Решение проблемы
На рынке существуют роутеры GSM со встроенным внутри сторожевым таймером, но чаще всего они работают с конечным оборудованием по Ethernet, что усложняет настройку, и стоят в несколько раз дороже. Устойчиво работающие модемы за умеренную цену не поддерживают 3G.
Мы решили пойти другим путём. Сначала настроили автоматическую ежесуточную перезагрузку компьютеров, но это не всегда помогало: питание на USB-модем подавалось даже при выключенном компьютере, и это было невозможно перенастроить в BIOS. К тому же, перезагрузка прерывает сбор данных.
Так возникла идея создать USB-реле, которое будет жёстко сбрасывать питание GSM-модема в случае его зависания. Мы получили подходящее изделие на заказ и стали размыкать «плюс» с помощью реле командой с компьютера. В целом, решение работало, но при включении модема в половине случаев компьютер уходил в перезагрузку. Это было связано с тем, что в модеме стояли два больших конденсатора на входе, которые вызывали скачок тока при включении, на что не рассчитан порт USB, и наш маленький компьютер это чувствовал. Чтобы избежать нежелательных перезагрузок мы заказали специальный выпуск USB-реле с двухступенчатым включением нагрузки: сначала модем включается через резистор, уже потом напрямую. Вот так выглядит готовое устройство с удлинителем для удобства:
Конструкция имеет два USB-штекера: один на управление реле, и один на транзит к управляемому прибору (модему). Единственное USB-гнездо предназначено для подключения прибора, именно в нём по управляющей команде размыкается «плюс».
Как используется устройство
Далее мы написали управляющую программу, которая определяет, когда нужно перезагрузить модем, и отправляет команду на его перезагрузку. Работает она по следующему алгоритму:
- 3 раза в час программа запускается из Планировщика задач Windows.
- Программа проверяет доступность нашего сервера.
- Если 4 пинга подряд оказались неудачными, то программа подаёт команду на выключение/включение модема через реле. При этом делается задержка перед включением, чтобы встроенные конденсаторы успели разрядиться.
- Результаты пингов и совершённые действия записываются в лог (выключение/включение модема).
- При первой возможности логи отправляются на наш сервер, где все события записываются в базу данных для последующего централизованного анализа всех причин отказов работы станций.
Вот пример лога:
Дата/время | Количество доступных серверов | Количество неудачных пингов подряд | Доступность основного сервера | Выполнение команды |
---|---|---|---|---|
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 «шлюз по умолчанию» может быть только один, а манипуляции с таблицей маршрутизации приводят к проблемам. Дело в том, что при отключении мобильного соединения могут меняться номера сетевых адаптеров, к которым привязываются ручные записи в таблице маршрутизации. Выхода два: либо «железное» отключение второго канала через реле, либо тонкая и аккуратная настройка метрики шлюзов с проверкой логики работы метрик по всем сценариям.
Все события пишутся в базу данных и отображаются в интерфейсе Таблицы учёта станций центрального сервера:
Результат
Коротко резюмирую, как работает получившаяся система:
- Компьютер собирает данные с измерительного прибора станции.
- USB-модем передаёт данные через сотовую сеть.
- USB-реле управляет питанием модема.
- Программа отключает и включает питание модема (через реле) в случае зависания или когда нужно переключить канал связи.
- Реле включает модем плавно, во избежание скачков тока.
Модемы, которые мы используем, обходятся примерно по 6 000 руб., ещё 2 300 руб. USB-реле. В сумме это дешевле, чем использование модемов со встроенным сторожевым таймером, которые имеют и ряд недостатков:
- Модемы со сторожевым таймером используют отдельный блок питания, разъём от которого пришлось бы припаивать к нашему 12-вольтовому источнику бесперебойного питания.
- Нет возможности просто выключить или включить модем для автоматического перехода между проводным каналом связи и GSM.
- Бывают случаи, когда модем не завис, но сим-карта в сети не регистрируются. Поможет ли здесь сторожевой таймер — неизвестно. Равно как никто не гарантирует, что сам он не зависнет. Наше решение действует от конечного результата: нет соединения — сбрасываем питание модема.
Использование же USB-реле для управления модемом имеет следующие преимущества:
- Модемы можно использовать уже имеющиеся, в том числе недорогие, часто зависающие.
- Когда работает проводное соединение, модем можно просто выключить, чтобы не расходовать трафик, а включать только при возникновении проблем с проводным подключением. Причём автоматически.
- Простая установка: нужно только соединять три USB-штекера и установить программу. Ошибиться в физическом подключении трудно.
Увидеть и услышать, как работает реле, выключая и включая модем, можно на этом видео:
В итоге, проблема зависания GSM-модемов решена железно (в прямом и переносном смыслах) и больше нас не беспокоит. А заодно появились дополнительные возможности по управлению каналами связи.
Сама проблема удаленных необслуживаемых пунктов возникала из-за специфики работы с распределенными системами: мы занимаемся мониторингом космической погоды и поддерживаем сеть измерительных станций, почитать об этом можно здесь.
Если возникнут вопросы, пишите: vort@ipg.geospace.ru
P.S. Выражаю благодарность коллеге Алексею Васильеву за участие в написании статьи.
Комментарии (2)
2 апреля 2017 в 17:42
0↑
↓
Почему бы не использовать контроллер горячего подключения вместо двухступенчатого включения питания?
Например2 апреля 2017 в 19:28
0↑
↓
Я использовал для передергивания удаленной аппаратуры Сетевое реле Laurent-2 там и релюшки есть и можно внешние подключить. Реакция идет на отсутствие пингов или по времени.