Click to order
Cart
Ваша корзина
Total: 
ФИО
Для транспортных компаний - полностью
Ваш e-mail
Ваш телефон
Комментарий
Промокод
Подписаться на новости
Согласие на обработку персональных данных
Payment method
USB WatchDog ARU-P2 (TOIC)
Наш самый функциональный сторожевой таймер: встроенный язык программирования TOIC позволяет модифицировать логику под самые разные задачи.
Зачем нужны сторожевые таймеры?
Сторожевой таймер используется для контроля ПК и обеспечения его бесперебойной работы в случаях, когда встроенные средства не спасают.

Типовые примеры применения:
  • Обеспечение бесперебойной работы терминала.
  • Автономный компьютер выполняет работу без присмотра персонала.
  • Увеличение надёжности промышленного ПК.
  • GPU-майнер работает нестабильно, а программные средства не помогают.
Как это работает?
Сторожевой таймер подключается через USB интерфейс к ПК. Проводом он напрямую соединяется с контактами Reset или Power материнской платы.
Программа-монитор запускается на ПК и переодически передает сигнал устройству. Если компьютер завис, то зависает и программа: watchdog перестаёт получать сигнал. Через заданное время USB WatchDog автоматически подает сигнал на контакт Reset материнской платы, чтобы перезагрузить систему.
Если Reset не сработал, активируется канал Power, который выключает и снова включает компьютер.
Примечание: Благодаря встроенному языку программирования TOIC пользователь может изменять алгоритм работы в очень широких пределах. Пример программы приведён в нижней части страницы.
Установка USB WatchDog ARU-P2
1. Перед установкой необходимо выключить ПК.
2. Так как устройство бескорпусное, будьте с ним предельно острожны - не допускайте касания металлических поверхностей. Это может привести к порче устройства!
3. Провода Reset и Power необходимо подключить вместо кнопок от системного блока.
4. Как подключать PBD10

Для при установке устройства в материнскую плату убедитесь, что вы подключаете именно к разъему USB. Некоторые интерфейсы (например ieee1394 или COM-порт) имеют на плате такие же 10-выводные разъемы.

Подключение к интерфейсу, отличному от USB, приведет к порче устройства
(возможно с дымом и запахом)!


  • На плате с PBD10 разъемом на плате имеется точка. При подключении к материнской плате ПК она должна быть совмещена со стороной разъема где отсутствует 1 металлический контакт
5. Сами кнопки можно подключить к сторожевому таймеру, чтобы ими тоже можно было пользоваться.
WatchDog Pro2 PBD10
Осн.1 и Доп.1. - параллельно соединённые контакты канала 1. По-умолчанию, подключаются к контактам Reset: например, Осн.1 - на reset мат.платы и Доп.1 - на кнопку reset.
Осн.2 и Доп.2. - параллельно соединённые контакты канала 2. По-умолчанию, подключаются к контактам Power: например, Осн.2 - на power мат.платы и Доп.2-
на кнопку power.
Пример подключения к материнской плате
Драйвер
Работа в ОС ниже Windows7 не поддерживается.
В Windows7 понадобится установить драйвер CDC.
В Windows 8, Windows 10, Linux, macOS установка драйвера не требуется.
Если в Windows8 не заработал системный драйвер CDC, воспользуйтесь инструкцией.
Программа-монитор WDT Monitor ARU-P2
Кроссплатформенная графическая
программа-монитор
Программа под Windows/Linux/macOs подключается к устройству через последовательный порт и обеспечивает следующий функционал:
  • отправка сигнала о работе
  • чтение текущей температуры
  • чтение история событий (лог)
  • тестовые команды Reset и Power
  • остановка и перезапуск сторожевого таймера
После установки ПО
Как проверить, что всё работает как положено
1. После установки и настройки программного обеспечения на устройстве должен начать мигать кружок в левом верхнем углу - это означает, что устройство находится в штатном режиме.

2. В программе-мониторе есть команды для тестовой проверки работы перезагрузки пк.
Необходимо в ручном режиме убедиться, что провода reset и power подключены правильно. Для этого нужно нажать на кнопку Test Power или Test Reset. ПК должен перезагрузиться. Если ничего не произошло, нужно проверить, что подключение сделано верно или поменять полярность подключения проводов на каналах "Reset" и "Power" .
Консольная программа-монитор ARU-P2.PY
Консольная программа-монитор на Python3
aru-p2.py
Так как USB WatchDog ARU-P2 очень гибкий сторожевой таймер, мы также сделали простой консольный монитор с открытым исходным кодом.
Маленький однофайловый проект поможет быстро запустить или модифицировать проект под себя.

Пример запуска:
Linux: python3 aru-p2.py /dev/ttyACM0
Windows: python3 aru-p2.py COM3

Доступные команды:
Порт устройства - обязательный параметр.
--period - период отправки команды, что ПК не повис. По-умолчанию 5 секунд.
--log_period - период отправки команды на показ лога устройства. По-умолчанию значение 0 - отключено.
--temp_period - период отправки команды на показ температуры. По-умолчанию значение 0 - отключено.
--sync_period - период отправки пакета синхронизации времени от ПК. Нужно при включенном --log_period для того, чтобы в логе было корректное время.
--logfile - указать в какой файл программе-монитору писать лог. По-умолчанию - консоль.
--hide_timemark - отключить временные метки в логе. По-умолчанию метки включены.
--test_reset - тестовая отработка reset (для тестирования подключения).
--test_power - тестовая отработка power (для тестирования подключения).


Пример запуска с параметрами:
python3 aru-p2.py /dev/ttyACM0 --log_period=60 --sync_period=300 --temp_period=30
usage: aru-p2.py [-h] [--period PERIOD] [--log_period LOG_PERIOD] [--temp_period TEMP_PERIOD] [--sync_period SYNC_PERIOD] [--logfile LOGFILE] [--hide_timemark]
                 [--test_reset] [--test_power]
                 port

USB WatchDog ARU-P2 Monitor

positional arguments:
  port                  Serial port

optional arguments:
  -h, --help            show this help message and exit
  --period PERIOD       Send command every X second. 0 - if disabled
  --log_period LOG_PERIOD
                        Show log every X second. 0 - if disabled
  --temp_period TEMP_PERIOD
                        Show log every X second. 0 - if disabled
  --sync_period SYNC_PERIOD
                        Send timesync every X second. 0 - if disabled
  --logfile LOGFILE     Set file to logging
  --hide_timemark       Hide log timemark
  --test_reset          Test reset channel and exit
  --test_power          Test power channel and exit
Внутренний лог устройства
Устройство хранит 10 последних событий в формате: время + событие.
События бывают 2 видов: reset и reboot через power.

Пример запуска: python3 aru-p2.py /dev/ttyACM0 --log_period 10 --hide_timemark
С такими параметрами программа каждые 10 секунд будет выводить лог на экран.

Прим.: устройство хранит лог в оперативной памяти, поэтому при потере питания лог будет сброшен.
---------LOG---------
07/16/2020 15:58:45 Reset
07/16/2020 16:03:52 Reboot
07/16/2020 16:09:07 Reset
07/16/2020 16:14:15 Reboot
07/16/2020 16:24:14 Reset
07/16/2020 16:29:22 Reboot
...
Температура
По запросу можно смотреть температуру устройства.

Пример запуска: python3 aru-p2.py /dev/ttyACM0 --temp_period 10
С такими параметрами программа каждые 10 секунд будет выводить температуру на экран.
06/16/2020 16:33:10 Temperature: 26.2
06/16/2020 16:33:21 Temperature: 26.2
06/16/2020 16:33:23 Temperature: 26.2
06/16/2020 16:33:34 Temperature: 26.2
06/16/2020 16:33:36 Temperature: 26.2
Скрипты для ПК
Можно не устанавливать каких-либо программ, а просто добавить в автозагрузку BAT или BASH скрипт
Минимальный скрипт (bat) для Windows
Скрипт подает раз в секунду команду на порт COM12 - сообщает устройству, что пк не завис.
@echo off
SET portname=COM12
:loop
set /p x="\xc0\x00\x02\xff\xff\xff\xffUS\xc0" <nul >\\.\%portname%
ping -n 2 127.0.0.1 > nul
goto loop
Минимальный скрипт (bash) для Linux
Скрипт подает раз в секунду команду на порт /dev/ttyACM0- сообщает устройству, что пк не завис.
#!/bin/bash
PORT=/dev/ttyACM0
while true
do
 echo -n "\xc0\x00\x02\xff\xff\xff\xffUS\xc0" > $PORT
 sleep 1
done
Скрипт (bat) для проверки сети в Windows
Проверяет доступность узла, заданного параметром hostname.
Переменная portname задает порт устройства.
Командой ping -n 2 127.0.0.1 создается пауза, равная n-1 секунд.
@echo off
SET hostname=ya.ru
SET portname=COM12
:loop
  ping -n 1 -l 4 -w 1000 %hostname% >nul
  if %errorlevel%==0 set /p x="\xc0\x00\x02\xff\xff\xff\xffUS\xc0" <nul >\\.\%portname%
  ping -n 2 127.0.0.1 > nul
goto loop
Скрипт (bash) для проверки сети в Linux
Проверяет доступность узла, заданного параметром hostname.
Переменная portname задает порт устройства.
Командой ping -n 2 127.0.0.1 создается пауза, равная n-1 секунд.
#!/usr/bin/env bash
HOST="ya.ru"
PORT=/dev/ttyACM0
while true
do
    if ping -c 1 $HOST; then
    echo -n "\xc0\x00\x02\xff\xff\xff\xffUS\xc0" > $PORT
    fi
sleep 3
done
Скрипт (bash) для отслеживания процесса в Linux
По-умолчанию мониторит процесс, заданный переменной PROCESS,
можно запустить с параметром "имя процесса".
#!/usr/bin/env bash

PORT=/dev/ttyACM0
PROCESS=crond

if [ ! -z "$1" ];then
	PROCESS="$1"
	echo "Monitor $PROCESS"
fi

while true; do
	if pgrep "$PROCESS" > /dev/null; then
		echo -n "\xc0\x00\x02\xff\xff\xff\xffUS\xc0" > $PORT
	fi
	sleep 3
done
Скрипт (bash) для отслеживания процесса и сетевого соединения в Linux
По-умолчанию мониторит процесс, заданный переменной PROCESS и сетевой адрес, заданный параметром HOST.
Можно запустить с параметрами: -a <url> для смены ya.ru на <url>, -p <proc> для смены crond на <proc>
#!/usr/bin/env bash

PORT=/dev/ttyACM0
URL=ya.ru
PROCESS=crond

while getopts ":ha:p:" opt; do
	case ${opt} in
		a)
			URL=$OPTARG
			;;
		p)
			PROCESS=$OPTARG
			;;
		h)
			echo "Usage: $0 -a <url> -p <process>" 1>&2
			exit 1
			;;
		\?)
			echo "Invalid option: -$OPTARG" 1>&2
			exit 1
			;;
	esac
done

echo "Ping $URL"
echo "Monitor $PROCESS"

while true; do
	ping -n -c 1 -w 1 "$URL" 2>/dev/null 1>&2 && pgrep "$PROCESS" 2>/dev/null 1>&2 && echo -n "\xc0\x00\x02\xff\xff\xff\xffUS\xc0" > $PORT
	sleep 3
done
Пример считывания температуры на Python3
Пример получения данных с термодатчика. Это упрощённый код для понимания принципов работы. Не используйте его в реальных проектах.
from time import sleep
import serial

port = '/dev/tty.usbmodem14101'
ser = serial.Serial(port, timeout=0.05)

while True:
    ser.write(b'\xc0\x00\x02\xff\xff\xff\xffTR\xc0')
    ser_data = ser.readall()
    if ser_data and ser_data.startswith(b'\xc0'):
        k = int(ser_data[8:12].decode())/10
        c = k - 273
        print('Read from serial: {0}'.format(c))
    sleep(3)
Пример считывания лога на Python3
Пример получения лога. Это упрощённый код без работы с протоколом и защит от ошибок. Не используйте его в реальных проектах. В ответ приходит 50 байт: 10 пакетов в формате ts[4]+act. Значения ts - unix timestamp. Значения act: 0 - старт устройства, 1 - reset, 2 - reboot. Буфер циклически перезаписывается. После получения необходимо отсортировать данные по времени самостоятельно.

При использовании лога необходимо периодически проводить синхронизацию часов, чтобы обеспечить точность показаний.
from time import sleep
from binascii import hexlify
import serial

port = '/dev/tty.usbmodem14101'
ser = serial.Serial(port, timeout=0.05)

while True:
    ser.write(b'\xc0\x00\x02\xff\xff\xff\xffLJ\xc0')
    ser_data = ser.readall()
    if ser_data and ser_data.startswith(b'\xc0'):
        print(hexlify(ser_data[8:-2]))
    sleep(3)
Подключение термодатчика
Контроль над температурой с помощью
USB WatchDog ARU-P2
Ко входу Вх/In USB WatchDog ARU-P2 можно подключить внешний термодатчик на базе DS18B20. Для этого к «-» входа подключаются объединённые контакты GND и VDD датчика DS18B20, а к «+» DQ датчика.

При подключенном термодатчике можно периодически считывать данные о температуре. Данные следует считывать не чаще, чем 1 раз в 3 секунды.


Подключение входного дискретного сигнала: концевика, кнопки.
Для активации режима следует изменить программу устройства.
Ко входу Вх/In USB WatchDog возможно подключение нормальнозамкнутого/нормальноразомкнутого концевого датчика согласно рисунку.
Значение данного входа можно программно считывать с помощью текстового протокола.

Следует помнить, что вход идет напрямую на процессор. Подача на этот вход сигналов напряжением выше 3.6В и ниже -0.6В приведет к порче процессора.

Программируем сами
Модификация встроенного ПО
Сердцем сторожевого таймера является микроязык TOIC, который позволяет легко модифицировать встроенное программное обеспечение устройства.
Код, работающий в устройстве по-умолчанию.
Код, который работает в устройстве по-умолчанию.
//Main settings
#define TIMER_MAX 5500
#define TIMER_DELTA 50
#define RESET_TIME 200
#define POWER_OFF_T1 5000
#define POWER_OFF_DELAY 3000
#define POWER_OFF_T2 200

//hw defines
#define LED_PIN PF0
#define RESET_PIN PA3
#define POWER_PIN PA2
#define LOG_SIZE 50

//global
var led_on();
var counter;
var phase = 0;
var mem_start;
var mem_ptr = 0;

//functions

var led_off(){ 
    LED_PIN.VALUE = 0;
}

var reset() {
    RESET_PIN.VALUE = 0;
    sleep(RESET_TIME);
}

var reboot() {
    led_off();
    POWER_PIN.VALUE = 0;
    sleep(POWER_OFF_T1);
    POWER_PIN.VALUE = 1; 
    sleep(POWER_OFF_DELAY);
    POWER_PIN.VALUE = 0;
    sleep(POWER_OFF_T2);
}

var logger() {
    sprintf(mem_start + mem_ptr, "%p%c", *TIME.EPOCH, phase);
    mem_ptr = ((mem_ptr+5) % LOG_SIZE);
}

var reinit() {
    RESET_PIN.VALUE = POWER_PIN.VALUE = 1;
    counter = TIMER_MAX;
    timer(TIMER_MAX, led_on);
}

var get_temp()
{
  DS18.INIT = DS18_PORT_B|8;
  if(DS18.INIT == 1)
  {
    DS18.VALUE = 1;
    delay(100);
    return *DS18.VALUE;
   }else
   return 0;
}

var _msg() {
      var c = stoi(MSG.RX, 'c');
      if (c == 'T') {
        sprintf(PC.TX, "T%p", get_temp());
      } else
      if (c == 'L') {  // get log
          sprintf(PC.TX, "L%r", mem_start, LOG_SIZE);
      } else
      {
          sprintf(PC.TX, "%c", c);  // echo
          switch (c) {
              case 'U':
                  counter = TIMER_MAX;
                  break;
              case 'S':
                  tstop(led_on);
                  break;
              case 'R':
                  reset();
                  reinit();
                  break;
              case 'P':
                  reboot();
                  //reinit();
                  //break;
              case 'E':
                  reinit();
                  break;
              default:
                  break;
          }
      }
}

var led_on() {     
    LED_PIN.VALUE = 1;
    if (counter) {
      __disable_irq();
      counter -= TIMER_DELTA;
      __enable_irq();
      timer(TIMER_DELTA-1, led_off);
      timer(counter, led_on);
    }
    else { //time up
        logger(); 
        if (phase) {
            reboot();
            phase = 0;
        }
        else {
            reset();
            phase = 1;
        }
        reinit();
    }
}

var main() {
    mem_start = SYS.RAM;
    LED_PIN.MODE = GPIO_MODE_OUTPUT|GPIO_OTYPE_PP|GPIO_INIT_LOW;
    RESET_PIN.MODE = GPIO_MODE_OUTPUT|GPIO_OTYPE_PP|GPIO_INIT_HIGH;
    POWER_PIN.MODE = GPIO_MODE_OUTPUT|GPIO_OTYPE_PP|GPIO_INIT_HIGH;
    
        
    reinit();
    while(1){
        delay(1000);
    }
    return 0;
}
Чтобы подключиться к устройству нужно открыть среду ToicIDE, для этого необходимо нажать на кнопку в левом верхнем углу и выбрать порт устройства.