Системы домашней автоматизации

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Системы домашней автоматизации » Программирование контроллера Alpha SE » Сигнализация о повышении температуры


Сигнализация о повышении температуры

Сообщений 1 страница 4 из 4

1

Техническое задание:

В серверной установлены 4 шкафа с оборудованием. Требуется включать сигнальную лампу того шкафа в котором температуры достигнет 30 градусов.

2

Для реализации нам потребуется:
- контроллер Alpha SE или ПК с программой Alpha controller,
- преобразователь интерфейсов,
- ИБП (Источник бесперебойного питания) или БП (блок питания),
- 1 модуль ввода-вывода SE6i5o,
- 4 датчика температуры.

Подключим оборудование по следующей схеме:
http://www.smarthouse.rostov.ru/images/forum/temp_alarm.gif

Опишем логику работы контроллера человеческим языком.

Код:
Если температура 1 термодатчика >= 30
{
    Замыкаем выход Point 8 модуля SE6i5o, т.е. включаем сигнальную лампу №1.
};
Если температура 2 термодатчика >= 30
{
    Замыкаем выход Point 9 модуля SE6i5o, т.е. включаем сигнальную лампу №2.
};
Если температура 3 термодатчика >= 30
{
    Замыкаем выход Point 10 модуля SE6i5o, т.е. включаем сигнальную лампу №3.
};
Если температура 4 термодатчика >= 30
{
    Замыкаем выход Point 11 модуля SE6i5o, т.е. включаем сигнальную лампу №4.
};

# Вход Point 0 будем использовать для сброса тревоги
Если замыкается вход Point 0 модуля SE6i5o, 
{
    Размыкаем Point 8 модуля SE6i5o, т.е. выключаем сигнальную лампу №1.
    Размыкаем Point 9 модуля SE6i5o, т.е. выключаем сигнальную лампу №2.
    Размыкаем Point 10 модуля SE6i5o, т.е. выключаем сигнальную лампу №3.
    Размыкаем Point 11 модуля SE6i5o, т.е. выключаем сигнальную лампу №4.
}

Переведя описанный нами алгоритм в программу Alpha SE Configurator получим следующее:
После символа # приведены комментарии к программе.

Код:
var[0]=Get_Points_State(1, 5); # Получаем значение 5 точки 1 модуля
var[1]=Get_SES1I_Data(1); # Получаем значение температуры 1-ого датчика и сохраняем в переменную 1
var[2]=Get_SES1I_Data(2); # Получаем значение температуры 2-ого датчика и сохраняем в переменную 2
var[3]=Get_SES1I_Data(3); # Получаем значение температуры 3-его датчика и сохраняем в переменную 3
var[4]=Get_SES1I_Data(4); # Получаем значение температуры 4-ого датчика и сохраняем в переменную 4

# Датчики возвращают температуру со сдвигом 100 градусов.
# При температуре 30 градусов датчик вернет значение 130.

if (var[1]>=130) # Если температура 1 шкафа превысила 30 градусов, то
{
  var[255]=Set_Relay_State(1,8,1); # Замыкаем выход Point 8
};

if (var[2]>=130) # Если температура 2 шкафа превысила 30 градусов, то
{
  var[255]=Set_Relay_State(1,9,1); # Замыкаем выход Point 9
};

if (var[3]>=130) # Если температура 3 шкафа превысила 30 градусов, то
{
  var[255]=Set_Relay_State(1,10,1); # Замыкаем выход Point 10
};

if (var[4]>=130) # Если температура 4 шкафа превысила 30 градусов, то
{
  var[255]=Set_Relay_State(1,11,1); # Замыкаем выход Point 11
};

if (var[0]==1)
{
  var[255]=Set_Relay_State(1,8,0); # Размыкаем выход Point 8
  var[255]=Set_Relay_State(1,9,0); # Размыкаем выход Point 9
  var[255]=Set_Relay_State(1,10,0); # Размыкаем выход Point 10
  var[255]=Set_Relay_State(1,11,0); # Размыкаем выход Point 11
};

3

Хм, не лучше было бы сделать гашение лампы, если t опустилась до 30-29 градусов.

Или здесь выкладываются реальные, уже сделанные проекты?

Administrator написал(а):

# Вход Point 0 будем использовать для сброса тревоги
Если замыкается вход Point 0 модуля SE6i5o,
{
    Размыкаем Point 8 модуля SE6i5o, т.е. выключаем сигнальную лампу №1.
    Размыкаем Point 9 модуля SE6i5o, т.е. выключаем сигнальную лампу №2.
    Размыкаем Point 10 модуля SE6i5o, т.е. выключаем сигнальную лампу №3.
    Размыкаем Point 11 модуля SE6i5o, т.е. выключаем сигнальную лампу №4.
}

Просто здесь немножечко  не понятно. Ведь мы сбросили тревогу, разомкнулись реле. Но температура то не опустилась ниже, а значит условие

Administrator написал(а):

if (var[1]>=130)
{
  var[255]=Set_Relay_State(1,8,1); # Замыкаем выход Point 8
};

будет продолжать срабатывать и реле снова будут замыкать и замыкаться?  :suspicious:

4

:) Сброс тревоги отдельной кнопкой сделан по аналогии с системами обнаружения утечки воды.

Если произошло превышение температуры об этом нужно сигнализировать. Даже если температура после этого упала, факт превышения все равно был и об этом нужно сообщить.

Допустим превышение произошло ночью или во время обеденного перерыва, когда в помещении никого нет. Далее через 5 минут произошло падение температуры. Если лампочка перестанет мигать никто так и не узнает, что что-то происходило. А следовательно не сможет проанализировать ситуацию.

Хм, не лучше было бы сделать гашение лампы, если t опустилась до 30-29 градусов.

Если сигнальную лампу требуется выключать при возвращении  падении температуры, то Вы Максим абсолютно правы. Код будет выглядеть примерно так

Код:
if (var[1]<130) # Если температура 1 шкафа упала ниже 30 градусов, то
{
  var[255]=Set_Relay_State(1,8,0); # Разамыкаем выход Point 8
};

И в том же духе с остальными 3 группами.

Просто здесь немножечко  не понятно. Ведь мы сбросили тревогу, разомкнулись реле. Но температура то не опустилась ниже, а значит условие будет продолжать срабатывать и реле снова будут замыкать и замыкаться?

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

Тогда код будет выглядеть так:

Код:
var[0]=Get_Points_State(1, 5); # Получаем значение 5 точки 1 модуля
var[1]=Get_SES1I_Data(1); # Получаем значение температуры 1-ого датчика и сохраняем в переменную 1
var[2]=Get_SES1I_Data(2); # Получаем значение температуры 2-ого датчика и сохраняем в переменную 2
var[3]=Get_SES1I_Data(3); # Получаем значение температуры 3-его датчика и сохраняем в переменную 3
var[4]=Get_SES1I_Data(4); # Получаем значение температуры 4-ого датчика и сохраняем в переменную 4


if (var[0]==1) # Если выключатель замкнут проверяем пороги превышения температуры
{
    # Датчики возвращают температуру со сдвигом 100 градусов.
    # При температуре 30 градусов датчик вернет значение 130.

    if (var[1]>=130) # Если температура 1 шкафа достигла 30 градусов, то
    {
      var[255]=Set_Relay_State(1,8,1); # Замыкаем выход Point 8
    };

    if (var[2]>=130) # Если температура 2 шкафа достигла 30 градусов, то
    {
      var[255]=Set_Relay_State(1,9,1); # Замыкаем выход Point 9
    };
    
    if (var[3]>=130) # Если температура 3 шкафа достигла 30 градусов, то
    {
      var[255]=Set_Relay_State(1,10,1); # Замыкаем выход Point 10
    };
    
    if (var[4]>=130) # Если температура 4 шкафа достигла 30 градусов, то
    {
      var[255]=Set_Relay_State(1,11,1); # Замыкаем выход Point 11
    };
};    

if (var[0]==0) # Если выключатель разомкнут, выключаем включенные лампы.
{
  var[255]=Set_Relay_State(1,8,0); # Размыкаем выход Point 8
  var[255]=Set_Relay_State(1,9,0); # Размыкаем выход Point 9
  var[255]=Set_Relay_State(1,10,0); # Размыкаем выход Point 10
  var[255]=Set_Relay_State(1,11,0); # Размыкаем выход Point 11
};

Вы здесь » Системы домашней автоматизации » Программирование контроллера Alpha SE » Сигнализация о повышении температуры