Текстовый хостинг - Получите доступ к сохраненным данным из любой точки мира через Интернет
avatar
Whosts.ru

Гость 41 23rd Mar, 2020

                                           
                         #!/bin/bash -x
GPIO=/usr/local/bin/gpio
LOG=/var/log/boiler.log

echo "$(date +%Y-%m-%d_%T) - Инициализация системы..." >> $LOG
RON=0
ROFF=1
LON=1
LOFF=0

VENT=7                                                                  # Реле вентиляции
GSENS=1                                                                 # Датчик газа
FSENS=29                                                                 # Датчик пламени
KEY=4                                                                   # Кнопка старта
RELAY1=0                                                                # Реле запальника
RELAY2=2                                                                # Реле основной горелки
SPARK=3                                                                 # Реле искры
ALARM=21                                                                 # Зуммер

### Индикация
LVENT=5                                                                 # Вентиляция
LGSENS=6                                                                # Датчик газа
LFSENS=26                                                               # Датчик пламени
LRELAY1=27                                                              # Запальник
LRELAY2=28                                                              # Основная горелка
LSPARK=24                                                               # Искра
LALARM=22                                                               # Тревога
LKEY=23                                                                 # Ожидание старта

### Указываем типы пинов
`$GPIO mode $VENT OUT`                                                  #
`$GPIO mode $GSENS IN`                                                  #
`$GPIO mode $FSENS IN`                                                  #
`$GPIO mode $KEY IN`                                                    #
`$GPIO mode $RELAY1 OUT`                                                #
`$GPIO mode $RELAY2 OUT`                                                #
`$GPIO mode $SPARK OUT`                                                 #
`$GPIO mode $ALARM OUT`                                                 #

`$GPIO mode $LVENT OUT`                                                 #
`$GPIO mode $LGSENS OUT`                                                #
`$GPIO mode $LFSENS OUT`                                                #
`$GPIO mode $LRELAY1 OUT`                                               #
`$GPIO mode $LRELAY2 OUT`                                               #
`$GPIO mode $LSPARK OUT`                                                #
`$GPIO mode $LALARM OUT`
`$GPIO mode $LKEY OUT`

function first {
First () {
STK=`$GPIO read $KEY`
}
    while First                                                       # Если показания кнопки 1, то цикл  с паузой в 1 секунду. (3)
    do
        if [ $STK -ne 1 ]
        then
            echo "$(date +%Y-%m-%d_%T) - Запуск системы " >> $LOG
            sleep 3
break;
        else
            echo "first"
            sleep 1
            continue
        fi
    done
}


### Выставляем первичные значения
function beginning {
`$GPIO write $VENT $RON`                                                   # Вытяжка включена (1)
`$GPIO write $RELAY1 $ROFF`                                                 # Первичный клапан закрыт
`$GPIO write $RELAY2 $ROFF`                                                 # Клапан основной закрыт
`$GPIO write $SPARK $ROFF`                                                  # Искра отключена
`$GPIO write $ALARM $ROFF`                                                  # Тревога выключена
`$GPIO write $LVENT $LON`
`$GPIO write $LRELAY1 $LOFF`
`$GPIO write $LRELAY2 $LOFF`
`$GPIO write $LSPARK $LOFF`
`$GPIO write $LALARM $LOFF`
`$GPIO write $LKEY $LOFF`
`$GPIO write $LGSENS $LOFF`
`$GPIO write $LFSENS $LOFF`
}

function halt {
        beginning
    sleep 30
        `$GPIO write $VENT $ROFF`
        `$GPIO write $LVENT $LOFF`
        first
}

beginning

sleep 60                                                                # Ждём 60 секунду проветривания системы



function ignit {
            `$GPIO write $RELAY1 $RON`                                  # Включаем первый клапан (4)
            `$GPIO write $LRELAY1 $LON`
            `$GPIO write $SPARK $RON`                                   # Включаем искру (5)
            `$GPIO write $LSPARK $LON`
            sleep 5                                                       # Ждем 3 секунды
            `$GPIO write $SPARK $ROFF`                                    # Выключаем искру (6)
            `$GPIO write $LSPARK $LOFF`
                }

function block {                                                        # Функция блокировки системы (13)
            `$GPIO write $RELAY1 $ROFF`                                 # Отключаем первый клапан
            `$GPIO write $LRELAY1 $LOFF`
            `$GPIO write $RELAY2 $ROFF`                                     # Отключаем основной клапан
            `$GPIO write $LRELAY2 $LOFF`
            `$GPIO write $ALARM $RON`                                      # Включаем тревогу (14)
            `$GPIO write $LALARM $LON`
exit 4
                }

function chgaz() {
        if [ `$GPIO read $GSENS` -eq 0 ]                                                # Если показания датчика газа равны 0 (2)
        then
            echo "$(date +%Y-%m-%d_%T) - УТЕЧКА ГАЗА!!!" >> $LOG                                                                    # То
            block;                                                               # Вызываем функцию block
        `$GPIO write $LGSENS $LON`
        fi
}


Starting () {
KEYS=`$GPIO read $KEY`
}
round=0
    while Starting                                                              # Если показания кнопки 1, то цикл  с паузой в 1 секунду. (3)
    do
        chgaz
        if [ $KEYS -eq 0 ]
        then
            echo "$(date +%Y-%m-%d_%T) - Стартуем " >> $LOG
            `$GPIO write $LKEY $LOFF`
            sleep 3
            break;
        elif [ $round -le 60 ]
            then
            echo "$(date +%Y-%m-%d_%T) - Ожидание старта " >> $LOG
            `$GPIO write $LKEY $LON`
            (( round++ ))
            echo $round
            sleep 1
        else
            halt
        fi
    done
#fi

Ignition () {
FSENSS=`$GPIO read $FSENS`
            }
attempt=0
while Ignition
    do
        if [ $FSENSS -eq 0 ]                                                # Если есть пламя
            then
                echo "$(date +%Y-%m-%d_%T) - Есть пламя! " >> $LOG
                `$GPIO write $LFSENS $LOFF`
            sleep 5
                `$GPIO write $RELAY2 $RON`                                          # Включаем основую горелку
                `$GPIO write $LRELAY2 $LON`
                echo "$(date +%Y-%m-%d_%T) - Основная горелка запущена " >> $LOG
                break;
        elif [ $attempt -ne 5 ]                                             # Иначе, если не исчерпаны 5 попыток поджига
            then
                `$GPIO write $RELAY1 $ROFF`                                     # Перед каждой попыткой выключаем запальник
                `$GPIO write $LRELAY1 $LOFF`
                sleep 10                                                        # и ожидаем 10 секунд
                ignit                                                           # поджигаем
                (( attempt++ ))
                echo $attempt
            else                                                                # Если так и не зажглось, то полностью блокируем.
                block
        fi
    done

Running () {                                                                    # Рабочий цикл
FSENSS=`$GPIO read $FSENS`                                                      # Считываем датчик пламени
GSENSS=`$GPIO read $GSENS`                                                      # Считываем датчик газа
RSTKEY=`$GPIO read $KEY`
            }
while Running
do
sleep 5
        if [[ $RSTKEY -eq 0 ]]
            then
             beginning
        elif [[ $FSENSS -eq 1 ]]                                                        # Если пламя погасло
            then
                echo "$(date +%Y-%m-%d_%T) - НЕТ ПЛАМЕНИ!!!" >> $LOG
                `$GPIO write $LFSENS $LON`
                block                                                           # Блокируем всё
        elif [ $GSENSS -eq 0 ]                                                  # Если утечка газа
            then
                echo "$(date +%Y-%m-%d_%T) - УТЕЧКА ГАЗА!!!" >> $LOG
                `$GPIO write $LGSENS $LON`
                block                                                           # Блокируем всё
            else
                echo "$(date +%Y-%m-%d_%T) - Есть пламя."                       # Иначе, повторяем цикл
                echo "$(date +%Y-%m-%d_%T) - Утечка не обнаружена."
        fi
done
                      
                                       
Поделись этим текстом, скопируй эту ссылку и отправь друзьям
RAW Paste Data
Последние Тексты