Вы просматриваете: Главная > Мои статьи > Как я делал устройство для автоматической перезагрузки зависшего ADSL модема. Часть 1.

Как я делал устройство для автоматической перезагрузки зависшего ADSL модема. Часть 1.

Доброго здоровья, уважаемый! Если тебя интересует способ автоматической перезагрузки зависшего ADSLмодема, то ты обратился по адресу. Поздравляю с тем, что нашел этот топик и по-доброму завидую, ибо имеешь возможность сэкономить время и обойти множество подводных камней, используя мой опыт.

D-Link-2640T Modem+Router (RM149)

С первого взгляда кажется, что проблема не стоит и выеденного яйца. Должна быть простая программа, которая пингует адрес в интернете, а при отсутствии пинга телнетом перезагружает модем. Но на самом деле все не так просто. Как правило, модем виснет до такой степени, что попытка программной перезагрузки приводит к его окончательному ступору. Таким образом, эксперименты с целым рядом программ окончились неудачей, от такого метода пришлось отказаться.

Стало ясно, что перезагружать модем придется отключая его на пару десятков секунд от питания, как советует автор статьи здесь. В качестве интерфейса для управления электронным реле используется порт LPT, который, замечу, есть не на каждой современной материнской плате.

Если вас заинтересовал такой метод, советую собрать простой тестовый системный блок для экспериментов, чтобы не рисковать дорогостоящим устройством. Если вы не дружны с электроникой даже на уровне начинающего радиолюбителя, советую обратиться к тому, кто такой опыт имеет. Очень советую!

В моем случае обстоятельства заставили использовать системный блок с установленной ОС Windows XP prof SP3, поэтому в дальнейшем будет подразумеваться именно эта ОС.

Шаг 1. Качаем программу LPTControleConsol с сайта автора и распаковываем ее в подходящее место. Я распаковал архив прямо в корень диска C:   Попытайтесь запустить файл LPTControleConsol.exe двойным щелчком мыши. Должно появиться черное окошко консоли и через несколько сек. исчезнуть. В моем случае программа не запустилась, выбросив окно с сообщением о том, что инициализация программы невозможна. Немного поразмыслив, я накатил пак .NetFremework 1.1-4.0 со своей рабочей флешки и все пошло как по маслу.

Шаг 2. Подключаем индикатор — светодиод к выходу первого канала LPT и проверяем работу программы. Вам понадобится маломощный (слаботочный) светодиод. Не используйте сверхъяркие и прочие мощные светодиоды, чтобы не сжечь порт! В крайнем случае, используйте гасящие резисторы, чтобы ограничить текущий через порт ток. Я использовал старый маломощный советский светодиод АЛ307 без дополнительных гасящих резисторов. Индикатор светился слабо, но вполне заметно. Подключите светодиод к выходу 1го канала LPT (выводы 2 и 18), как на рис.
ledinplt

Рисунок я честно позаимствовал отсюда. Там же можете посмотреть и распиновку порта.
Не страшно, если перепутаете полярность, индикатор просто не будет работать. Я подключал и отключал светодиод при работающем компьютере и к проблемам это не привело. Здесь опять обнаружилась одна тонкость. Программа LPTControleConsol настроена на работу с портом, расположенном по адресу 378h. Поэтому обязательно зайдите в BIOS и выставьте следующие параметры:

  • Onboard Parallel Port = Enabled или 0x378h

  • Parallel Port Mode = EPP

Подключите светодиод и перезагрузите компьютер. Во время перезагрузки компьютера светодиод должен зажигаться и гаснуть, а после входа пользователя в систему загореться. Запустите файл LPTControleConsol.exe. Эта программа, если ее запустить без дополнительных параметров, перебрасывает выходы LPT порта в противоположное значение. Таким образом, если светодиод светился – то он должен погаснуть и наоборот. Все работает как положено? Тогда двигаемся дальше!

Шаг 3. Добиваемся реакции канала на отсутствие пинга. По задумке автора, стандартный планировщик Windowsдолжен запускать скрипт (скрипт есть в архиве, который вы уже, надеюсь, скачали):

@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

ping www.ru
If !ErrorLevel! == 0 (
Echo Internet Online
) Else (
Echo Internet Offline
Echo Switching modem on LPT pin#0 power line off..
start LPTConsoleControl /pin=0 /status=0
Echo pinging localhost for pause
ping  127.0.0.1
Echo Switching modem on LPT pin#0 power line on..
start LPTConsoleControl /pin=0 /status=1
)

 

При отсутствии пинга, скрипт должен запускать программу LPTControleConsol.exe с параметрами  pin=0 status=0   (на выходе канала появляется логический 0, светодиод гаснет). Потом, для создания паузы, несколько сек. пингуется локалхост (на выходе канала все еще «0»), далее выход порта перебрасывается в исходное состояние (на выходе лог. 1 – сведодиод зажигается). Таким образом, пропал пинг – на некоторое время выключается модем и включается опять, осуществляется перезагрузка.

Так вот, сразу разочарую. В стандартном планировщике WindowsXP prof SP3 скрипт не работает. Проверено на нескольких компьютерах. Я с ребятами обсуждал эту тему  здесь,  повторяться не буду. Но выход был найден. Вместо стандартного планировщика был установлен nnCron, который бесплатен для жителей территорий бывшего СССР. Качаем nnCron191 с оф. cайта, устанавливаем, регистрируем и добавляем задание. Настройка задания в деталях указана на картинках.

nnCron1

nnCron2

nnCron3

nnCron4

Выполнение скрипта временно указываем каждую минуту. Заодно в скрип можно внести некоторые изменения:

@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

ping ya.ru
If !ErrorLevel! == 0 (
Echo Internet Online
) Else (
Echo Internet Offline
Echo Switching modem on LPT pin#0 power line off..
start LPTConsoleControl /pin=0 /status=0
Echo pinging localhost for pause
ping -n 40 127.0.0.1
Echo Switching modem on LPT pin#0 power line on..
start LPTConsoleControl /pin=0 /status=1
)

 

Шаг 4. Проверка работы программы. Подключаем к компьютеру интернет, делаем видимой секундную стрелку часов Windows и следим за ней и светодиодом.

time

Каждую минуту должно появляться окно консоли, отображающее успешное выполнение команды ping. Светодиод должен светиться непрерывно. Отключаем кабель интернета — каждую минуту светодиод должен гаснуть на время, заданное параметром:

ping –n 40 127.0.0.0 ( в данном случае около 40 сек)

Получилось? Значит программную часть мы одолели, приступаем к изготовлению исполняющего блока!


Оставить отзыв