Горячая линия Embedded System Rus:8-800-775-06-34 (звонок по России бесплатный)

LM5_N
LM-Wall_N
DALI_N
Vita_N

Управление теплым полом

Управление теплым полом

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

Решение: Создаем резидентный скрипт, который будет вызываться каждые 60 секунд.

И вставить в него приложенный код:

------------------------ Инициализация переменных ----------------------
 
-- Устанавливаем сколько энергии в системе, в кВт (если есть счетчик, связанный 
-- с группового адресом, то тогда можно динамично определять доступную мощность 
-- через функцию grp.getvalue ('групповой адрес счетчика'))
 
allpower = 1.5
-- разница между текущей и установленной температурой, при достижении которой, 
-- отключаем теплый пол
 
delta = 2
floor = {}
 
--- Заносим произвольное кол-во теплых полов
--- Структура информации о теплом поле
-- name - текстовый идентификатор
-- current - групповой адрес или имя переменной связанная с датчиком температуры
-- setpoint - групповой адрес или имя переменной хранящий температуру установленную
-- пользователем
-- ctrl - - групповой адрес или имя переменной связанный с реле, включающее или 
-- выключающее теплый пол
-- pow - требуемая мощность теплого пола в кВт
-- prior - приоритет, любое целое число, выражающее приоритетность обогрева 
-- помещения в котором 
-- находится теплый пол, чем больше число, тем больше приоритет
 
floor[1] = {name = 'кухня', current = '1/1/1', setpoint = '1/1/2', 
ctrl = '1/1/3', pow = 1.0, prior = 1}
floor[2] = {name = 'ванная', current = '1/2/1', setpoint = '1/2/2', 
ctrl = '1/2/3', pow = 0.5, prior = 2}
floor[3] = {name = 'коридор', current = '1/3/1', setpoint = '1/3/2', 
ctrl = '1/3/3', pow = 0.7, prior = 1}
 
--- ....
-- floor[n] - n - пол
 
------------------------------------ Запуск скрипта ------------------------------
 
-- получаем разницу между установленной и текущей температурой, считывая показания 
-- датчиков
for i = 1,#floor do
floor[i].dt = grp.getvalue(floor[i].setpoint) - grp.getvalue(floor[i].current)
end
 
--- функция сортировки
function sorter(a,b)
    -- если приоритеты равны, то смотрим на разницу температур и определяем у какого 
-- пола наибольшая разница температур
    if(a.prior == b.prior) then
        return a.dt > b.dt
    else
        -- инача определяем по приоритету
        return a.prior > b.prior
    end
end
 
-- сортируем теплые полы по приоритетам, и разницам устновленной и текущей температуры
-- в начале списка наиболее важные полы, которым впервую очередь даем энергию, 
-- а в конце наименее.
table.sort(floor, sorter)
 
-- пробегаем по всем полам
for i = 1, #floor do
-- если разница температур между текущей и установленой меньше delta
    if floor[i].dt < delta then     
-- то тогда выключаем этот теплый пол, помещение не требует больше нагрева         
grp.write(floor[i].ctrl, false)     
-- иначе     else         
-- вычитаем из общей мощности мощность этого теплого пола         
allpower = allpower - floor[i].pow     
-- если остаток больше нуля         
if(allpower >= 0) then
            -- включаем теплый пол
            grp.write(floor[i].ctrl, true)
        else
            -- если доступной мощности больше нет выключаем остальные полы
            grp.write(floor[i].ctrl, false)
        end
    end
end

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

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

Требуемое оборудование: Для каждого помещения с теплым полом нужно иметь датчик температуры, и ассоциированный с ним групповой адрес. Установленную пользователем температуру для этого помещения нужно также записать в групповой адрес. Для каждого электронагревательного устройства (бытовой электрообогреватель, теплый пол) нужно иметь реле, так же связанное с групповым адресом. На всю инсталляцию достаточно одной LogicMachine.

Расширение скрипта: Данный скрипт легко расширить для использования в различных режимах обслуживания дома, например («Рабочий день», «Выходной», «Экономный» и так далее). Например, в режиме «Экономный» мы можем увеличить значение переменной delta, предположим до 15, и уменьшить значение переменной allpower. В результате наши электронагревательные устройства будут работать практически в режиме, который не даст дому разморозится, используя минимальное количество энергии. Другой вариант развития скрипта может состоять в том, чтобы переменные delta и allpower менять в зависимости от времени суток. Этим мы можем реализовать суточные и недельные таймеры. Еще вариант, рассчитывать переменную allpower как разницу значения подведенной энергии к дому и значения счетчика, который считает всю электроэнергию, которая потребляется в данный момент в доме.