WatchDog для сервера

Это устройство стало результатом моих первых экспериментов с микроконтроллерами AVR.

Разрабатывался WatchDog для старенького сервера в обычном компьютерном корпусе, поскольку собственных встроенных средств борьбы с зависанием у него не было. Кроме того, необходимо было предусмотреть возможность запуска сервера после аварийного отключения электропитания.

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

Технические характеристики:

Время до включения после сбоев питания, сек 1-254

Время ожидания загрузки операционной системы, мин 1-254

Время ожидания сигнала сброса при работе, мин 1-254

Интерфейсы подключения RS232, USB

Количество событий, хранящихся в памяти 5

Напряжение питания, В 5

Схема электрическая принципиальная.

Устройство собрано на недорогом, доступном микроконтроллере Attiny2313 (U3). Тактируется контроллер от внешнего кварцевого резонатора Cr1 частотой 9,216МГц. Для управления устройством предусмотрены кнопки управления «+», «-» и «Старт/Стоп» (SB1-SB3), кроме того установлены дублирующие кнопки «Start» и «Reset» (SB4, SB5) подключенные параллельно кнопкам компьютера. Для отображения режимов работы, времени до включения и перезагрузки применен четырехразрядный семисегментный индикатор (HL3). Для управления индикатором, который работает в динамическом режиме, и для уменьшения количества задействованных ножек микроконтроллера применен высокоскоростной дешифратор 74HC138 (U5). Управление компьютером производится через оптопары (U6, U7), выходы которых подключены параллельно кнопкам «Start» и «Reset» компьютера. Для универсальности предусмотрена возможность подключения к последовательному порту компьютера (RS232) через драйвер MAX232 (U4) и к порту USB через драйвер FT232L (U1). Выбор интерфейса производится джамперами (Jmp1, Jmp2). Для предотвращения сбоев в работе микроконтроллера при просадке напряжения, применен внешний супервизор питания DS1233 (U2). Узел контроля запуска компьютера выполнен на транзисторе VT1. Питается устройство от блока питания компьютера.

Работа устройства:

Все настройки работы программы находятся в EEPROM микроконтроллера и сохраняются при отключении напряжения питания.

При подаче напряжения на блок питания компьютера на линии VSB (фиолетовый провод) появляется напряжение +5В, которое используется для подпитки аккумулятора и интеллектуального запуска компьютера. Через диод VD2 напряжение подается на устройство. Программа микроконтроллера проверяет состояние работы до пропадания напряжения питания. Если WatchDog был выключен, программа переходит в цикл ожидания, при этом на индикаторе горит надпись «StoP». В этом состоянии устройство будет находиться до тех пор, пока не будет нажата кнопка «Старт/Стоп» (SB3), или пока не придет команда на запуск работы устройства с компьютера (параметр s).

Если до пропадания питания компьютера, устройство было запущено, WatchDog переходит в режим ожидания времени запуска компьютера. При этом на индикаторе с периодом 1 сек. переключаются точки разрядов. Пока WatchDog работает в этом режиме, время ожидания запуска можно изменить кнопками «+» и «-», с периодом 1 сек. Это время также можно изменить с компьютера (параметр о).

По окончании отсчета времени, устройство запускает компьютер, подавая импульс длительностью 2сек. на оптопару U7, при этом на дисплее загорается надпись «Strt». Запуск блока питания компьютера контролируется по входу PD4 (ножка 8) микроконтроллера. Напряжение +5В с блока питания, через резистор R1 поступает на базу транзистора VT1, открывает его, и на входе PD4 появляется низкий логический уровень. Если по какой либо причине компьютер на запустился, WatchDog повторно переходит в режим ожидания времени запуска компьютера. Эта процедура повторяется несколько раз. Разрешение циклического запуска и количество повторов можно установить с компьютера (параметры с и r). Если компьютер не включится после установленного количества попыток, WatchDog перейдет в режим ожидания, при этом на индикаторе загорится надпись «StoP».

Если блок питания компьютера удачно запустится, устройство переходит в режим ожидания загрузки операционной системы. При этом на индикаторе отображается обратный отсчет времени, оставшегося до перезапуска компьютера. Пока WatchDog работает в этом режиме, время ожидания загрузки системы можно изменить кнопками «+» и «-», с периодом 1 мин. Это время также можно изменить с компьютера (параметр l).

Если по окончании отсчета времени с компьютера не придет сигнал на сброс таймера (например, из за зависания системы при загрузке), устройство перезагружает компьютер, подавая импульс длительностью 2 сек. на оптопару U6, при этом на дисплее загорается надпись «rESt».

Когда операционная система загрузится, на компьютере автоматически запускается программа управления WatchDogом, и с компьютера на устройство поступает сигнал сброса таймера. При этом WatchDog записывает в память событие «запуск», сохраняя его время и дату.

После прихода первого сигнал сброса таймера, устройство переходит в режим контроля зависания системы. На индикаторе отображается обратный отсчет времени до перезагрузки. Пока WatchDog работает в этом режиме, время ожидания до перезагрузки системы можно изменить кнопками «+» и «-», с периодом 1 мин. Это время также можно изменить с компьютера (параметр l).

При нормальной работе операционной системы компьютера, через определенное время на WatchDog поступает команда сброса таймера, при этом таймер начинает отсчитывать время с начала.

При зависании операционной системы, команда сброса на устройство не придет. Когда таймер досчитает до 0, WatchDog перезагрузит компьютер, при этом на дисплее загорится надпись «rESt», и устройство перейдет в режим ожидания загрузки операционной системы. При этом WatchDog записывает в память событие «перезагрузка», сохраняя его время и дату.

Кнопкой «Старт/Стоп» можно остановить работу устройства в любой момент времени, при этом на индикаторе загорится надпись «StoP». При этом WatchDog записывает в память событие «остановка».

При аварийном пропадании напряжении питания закрывается транзистор VT1, и, так как ножка PD4 подтянута к напряжению питания, на ней появляется высокий логический уровень. Благодаря большой емкости конденсатора С17, микроконтроллер успевает записать в EEPROM событие «пропадание питания».

Управление устройством:

Компьютер общается с устройством по средствам USART микроконтроллера, подключаемого через драйвер порта RS232 либо через драйвер USB. Выбор типа подключения производится джамперами (Jmp1, Jmp2). При выборе подключаемого порта следует переключить оба джампера. Скорость передачи данных 9600 бод. Её можно изменить, но для этого придется подкорректировать программный код.

На момент разработки устройства была написана простенькая программка для управления WatchDogом с компьютера, но как то где то она благополучно потерялась… Думаю, что для тех кто захочет повторить конструкцию не составит труда самому написать программу или заказать её у знакомых программистов.

Программа считывает текущую дату и время, и через определенные интервалы времени посылает на устройство команду на сброс таймера. Формат команды, которую передает компьютер на устройство следующий:

:d=ДД/MM чч:мм, где

ДД – текущая дата;

ММ – текущий месяц;

чч – текущее время (часы);

мм – текущее время (минуты);

То есть 7 сентября в 8 часов 15 минут, команда имеет вид:

:d=07/09 08:15

Кроме того программа выполняет следующие функции:

· выбор порта подключения (номер СОМ порта) 1 – 8;

· выбор скорости передачи данных;

· включение\выключение устройства;

· установка времени режима ожидания до запуска компьютера 1 – 254 сек;

· установка времени режима ожидания загрузки операционной системы 1 – 254 мин;

· установка времени режима ожидания сброса таймера в режиме контроля зависания 1 –254 мин;

· установка периода посылки команды на сброс таймера 10 – 600 сек;

· разрешение\запрет циклического запуска блока питания компьютера;

· установка количества циклов запуска блока питания компьютера 1 – 254 раза;

· разрешение\запрет циклической перезагрузки компьютера при зависании;

· установке количества циклов перезагрузки компьютера при зависании 1 – 254 раза;

· ведение лога событий 200 записей.

Все команды, передаваемые от компьютера на устройство начинаются с символа «:», в ответ на получение этого символа устройство отвечает символом готовности к приему «!». При приеме от компьютера не правильного символа (например «\» вместо «/» или «;» вместо «:») устройство отвечает символом ошибки «?»

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

Управлять работой WatchDogа можно также с обычного терминала.

В ответ на любую команду от компьютера WatchDog выдаст сообщение, содержащее все настройки работы устройства и перечень пяти последних событий:

Option:

s=y

o=010

l=004

w=002

c=n

r=003

a=n

i=003

R01/02 15:01

L01/02 15:09

U02/02 23:11

L03/02 05:08

R03/02 22:12

Параметр s – включение\отключение WatchDogа. Если параметр =y, устройство включено, если параметр =n – устройство остановлено. Для включения\отключения устройства необходимо подать команду в следующем формате:

:s=y – для запуска устройства

:s=n – для остановки устройства

Параметр о – время режима ожидания до запуска компьютера в секундах. Для того чтобы, например, установить время ожидания до запуска = 5 сек, необходимо подать команду в следующем формате:

:o=005

Параметр l – время режима ожидания загрузки операционной системы в минутах. Для того чтобы, например, установить время ожидания загрузки = 8 мин, необходимо подать команду в следующем формате:

:l=008

Параметр w – время режима ожидания сброса таймера в режиме контроля зависания. Для того чтобы, например, установить время ожидания зависания = 1 мин, необходимо подать команду в следующем формате:

:w=001

Параметр c – разрешение циклического запуска блока питания компьютера. Для разрешения\запрета циклического запуска компьютера, необходимо подать команду в следующем формате:

:c=y – для разрешения циклического запуска

:c=n – для запрета циклического запуска

Параметр r – количество циклов запуска компьютера до остановки WatchDogа. Для того чтобы, например, установить количество циклов запуска = 5, необходимо подать команду в следующем формате:

:r=005

Параметр a – разрешение циклической перезагрузки компьютера. Для разрешения\запрета циклической перезагрузки компьютера, необходимо подать команду в следующем формате:

:a=y – для разрешения циклической перезагрузки

:a=n – для запрета циклической перезагрузки

Параметр i – количество циклов перезагрузки компьютера до остановки WatchDogа. Для того чтобы, например, установить количество циклов перезагрузки = 10, необходимо подать команду в следующем формате:

:i=010

Далее выдаются пять последних событий произошедших с устройством, с указанием даты и времени события. Эти события находятся в EEPROM микроконтроллера и сохраняются при отключении напряжения питания. Малое количество сохраняемых событий связано с малым объемом памяти EEPROM микроконтроллера.

параметр «R»* – перезагрузка при зависании;

параметр «L» – загрузка операционной системы;

параметр «S»* – остановка устройства;

параметр «U» – пропадание напряжения питания;

* Если перезагрузка компьютера, происходит циклически, несколько раз подряд, или остановка устройства происходит командой с компьютера, а не кнопкой, параметры R и S не будут содержать данные о дате и времени события.

Конструкция:

Устройство собрано на двухсторонней печатной плате размерами 145х37мм. Печатная плата на монтажных стойках прикреплена к заглушке CD-ROMa компьютера. В заглушке высверлены отверстия под кнопки управления и индикатор.

Печатная плата рассчитана под установку микроконтроллера в корпусе DIP20. Микросхема дешифратора 74HC138 может быть заменена на 1564ИД7 в корпусе DIP16. Микросхема MAX232 в корпусе DIP16 а FT232RL – в корпусе SSOP. Оптопары PC817 в корпусе DIP4. Все резисторы и конденсаторы применены в SMD корпусах. При замене кварцевого резонатора придется корректировать программный код.

От супервизора питания DS1233 можно отказаться и задействовать встроенную систему контроля напряжения питания микроконтроллера – BOD.

Если универсальность устройства не нужна, можно отказаться от установки одной из микросхем интерфейсов и использовать только необходимый драйвер с соответствующим обвесом.

Индикатор HL3 RL-5620 с общим анодом можно заменить подходящим по параметрам с общим катодом, но для этого придется подкорректировать программный код.

Транзистор VT1 и резистор R1 установлены навесным монтажом, так как в первоначальной разработке они предусмотрены небыли.

Подключение устройства:

Разъем контроля включения блока питания XP2 – подключается к любой свободной фишке блока питания +5В (провода красного и черного цветов).

Разъем питания XP3 подключается к фиолетовому проводу, идущему от блока питания к материнской плате.

К плате устройства, параллельно разъему XP4 подпаиваются длинные провода, которые подключаются к материнской плате на место подключения кнопки Power. Сама кнопка подключатся к разъемам на плате WatchDogа.

К плате устройства, параллельно разъему XP5 подпаиваются длинные провода, которые подключаются к материнской плате на место подключения кнопки Reset. Сама кнопка подключатся к разъемам на плате WatchDogа.

Разъем XP6 подключается стандартным 9-ти проводным шлейфом к разъему свободного СОМ порта на материнской плате компьютера.

Разъем XP7 подключается длинным экранированным проводом к разъему свободного USB порта на материнской плате компьютера.

Файлы:

Ниже выложены все файлы проекта

Проект в AVR студии (там же исходник и .HEX файл прошивки и .HEX файл для EEPROM)

Проект в Proteus (там же .BIN файл для EEPROM)

Примечания!

1. Прошу сильно ногами не пинать, так как это результат первого эксперимента с микроконтроллерами AVR.

2. В программе есть два глючка (переписывать программу не хочу, так как в принципе все работает)

· глюк первый – из-за неправильно формируемой задержки гашения дребезга контактов, при нажатии на кнопки индикатор загорается с повышенной яркостью;

· глюк второй – не правильно работает счетчик времени при переходе с 1 часа на 59 минут, 59 сек. На индикаторе отображается время 01.00 затем 60.00 и затем 59.59, время отсчитывается в минутах и секундах как положено, то есть добавляется одна лишняя секунда.