Управление освещением
    Презентации
    Технические решения на LogicMachine
    Визуализация
      evika.ru    Технические решения на LogicMachine    Управление кондиционерами в условиях недостаточной мощности

    Управление кондиционерами в условиях недостаточной мощности

    Управление кондиционерами в условиях недостаточной мощности

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

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

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

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

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

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

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

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

     




    Copyright © Evika.ru 2017
    All Rights Reserved