stell_hawk

 
<<< Назад

PID регулирование теплыми полами

Эта заметка является продолжением серии моих изысканий на тему адекватного отопления дома только теплыми полами.

  1. В первую очередь для адекватно отопления только теплыми полами нужны иметь комнатные термостаты, которые будет открывать-закрывать те или иные контура в зависимости от температуры в помещении.
  2. Второй шаг это погодозависимая автоматика: о её реализации я писал тут https://connect.smartliving.ru/profile/3802/blog43...
  3. Третий шаг о котором пойдет речь в этой заметке это PID регулирование контурами отопления.
  4. Четвертый шаг, который я наметил на следующую зиму, я называю блоком предсказаний. после реализации 3 шага остается не решеным вопрос перегрева помещений в случае внезапного появления солнца и появления излишнего тепла.идея реализации проста(заранее душим отопление зная что скоро появится неконтроллируемый источник тепла).

Введение в проблему:
Обычные комнатные термостаты работают по гистерезису. допустим уставка в комнате составляет 23 градуса, а гистерезис - 0.25 градуса. это значит что если температура растёт то пока он не дойдет до 23.25 градусов теплый пол будет работать. а если она падает то пока она не упадет до 22.75 -теплый пол не включится.
Классический теплый пол делается в стяке 6-8 и имеет довольно сильную инерционность.
Т.е. пока температура в помещении достигнет 23.25 градусов. сама стяжка может нагреться до 28 градусов(например).и далее при отключении пола температура в помещении продолжит расти иногда такие вылеты достигают 2-3 градуса (и более бывают). пока температура воздуха упадет до 22.75 пол может остыть до 20 градусов(пол у нас находится внизу - и поэтому остывает быстрее всех частей помещения).
следующий цикл нагрева пола - пока теплоноситель разгонит стяжку, пока стяжка отдаст энергию в воздух. температура в помещении может сильно упасть.
Важную роль в этом процессе играет теплопроводность покрытия пола(кафель передает хорошо. ламинат сильно хуже. у меня ламинат)
у меня есть исследование на тему изменения температуры на поверхности стяжки, температуры поверхности ламината и воздуха на высотах: 70,120, 170, 270 см, но я так и не добрался опубликовать результаты - возможно как-нибудь позже.

Зачем при комнатных термостатах нужна погодозависимая автоматика?
Если установить температу теплоносителя 45 градусов. то энертность системы вода-стяжка-воздух позволяет нагреть стяжку до 38 градусов. и если в это время дом не треяет много тепла это неизбежно приведет к перегреву воздуха. немного на эту тему я писал тут: https://connect.smartliving.ru/profile/3802/blog40...
Уменьшение температуры теплоносителя в более теплую погоду позволяет уменьшить температурный градиент "пол-воздух" тем самым снизить отклонение темперутары воздуха.

Необходимость пид регулирования
Опыт эксплуатации показал что при использовании погодозависимой автоматики и термостатов с обычной логикой (уставка +/-0,25) удается достичь точности +/- 1-1,5 градуса от уставки. В целом адекватно. если два недостатка:

  1. Периоды когда пол выключен достигают 12 часов. через пару часов пол босыми ногами ощущается холодным.
  2. Периоды когда пол включен достигают 8 часов. Среднее значение температуры помещения в итоге ориентировочно выше уставки на 0.5 градусов.

Зимой я делал закуп оборудования отопления для своего директора и оказалось, что watts делают термостаты с возможность пид-регулирования -насколько адекватно они это делают сказать не могу. систему еще не работает на реальном обьекте. но на столе она у меня полежала пощелками. судя по моим наблюдениям там используется так называемый длинный пид, т.е. датчики лежа у меня на столе при установке температуры близкой к текущей в комнате переходили в режим(приблизительно) 5 минут -работаю .5 минут не работаю. если температура шла вниз т.е 5 минут работаю, 10 минут не работаю. возможно кванты времени могли быть и 6,7 минут. но было похоже на то что всё кратно 5 минутам. Поигравшись с этой системой я наконец добрался сделать систему у себя.

Что имеется:

  1. Сервер Мажордомо. и несколько простых устройств типа: Термостат

  2. Термодатчики от xiaomi расположенные в каждой комнате (WSDCGQ11LM и аналоги).
    важной особенностью этих датчиков является тот факт, что мы не можем спросить у датчика текущее значение.
    датчик сам передает показания когда измения будут существенными, либо в любом случае в течении 1 часа. существенными изменения датчик считает изменение более чем на 0.2 градуса.
    по факту ситуация лучше чем кажется на первый взгляд:

    Большинство изменений температуры укладывается в 0,2 градуса.а среднее частота обновлений в районе 30 минут
    это накладывает определенные головняки в работу PID-регулятора.

  3. Исполнительное устройство Kincony KC868-H32
  4. Термоголовки watts 230V NO. время закрытия 3 минуты.

Реализация:
В связи с тем что данные с датчиков приходят непериодически, нужно установить квант времени досточно большой для срабатывания термоголовки, но при этом достаточно маленький чтобы иметь возможность небольшой мощности.
я выбрал величину в 6 минут. 10% от часа - 10% мощности. квант изменения мощности -10%
в Класс термомостат добавлено свойство data. а свойство threshold везде установлено в 1 градус.
раз в 6 минут вызывается скрипт.
Его логика такова:

  1. Достаем из базы все термостаты.
  2. если отклонение от уставки больше 1 грудуса то ничего не делаем- работает обычный термостат по гистерезису
  3. Иначе достаем из базы данные для пид регулятора
    например: {"E1":0.33,"E2":0.33,"Kp":10,"Ki":5,"SumDt":10.1,"i":4,"statuses":[1,1,1,1,1,0,1,1,1,1],"status":1,"pow":8}
  4. пид регулятор подчиняется стандартному закону
    ```$dt = $data['Kp']*($data['E1']-$data['E2']+$data['E2']/ $data['Ki']
    $dt - приращение
    Kp - Коэфициент усиления
    Е1 - отклонение на текущем шаге.
    Е2 -отклонение на предыдущем шаге
    Ki - интегральная составлющая
    
    Kp=10, т.к. квант 10% то при отклонении в 1 градус усиление =100%
    Ki=5, т.к. квант времени равен 5 минутам, то интегральная составляющая соотвествует 30 минутам.
    Для каждого термостата можно задать свои значения. на Ваше усмотрение.

6.Система смотрит какая сейчас необходима мощность, если она больше уже запущеной в систему мощности за последний час, то выключает отопление.
если меньше то включает отопление.

SumDt - необходимая мощность 
я ограничил минимальную мощность -10% для  того чтобы пол полностью не остывал. и максимальную мощность в 101%.
//Достаем из базы все термостаты (в моем случае класс называется SPWMThermostats- просто я изначально задумывал новый класс сделатью. в итоге он не нужен

$objects=getObjectsByClass("SPWMThermostats");
echo "<pre>";
foreach($objects as $obj) {
$obj=getObject($obj['TITLE']);

$value=$obj->getProperty('value');
$currentTargetValue=$obj->getProperty('currentTargetValue ');
$delta=abs($value-$currentTargetValue);
//если дельта больше 1 градуса пропускаем
if($delta>=1) continue;

echo  $value." ->".$currentTargetValue;
//достаем из таблицы данные для pid
$data=json_decode($obj->getProperty('data'),true);

//если данных нет создаем данные по умолчанию
if(!is_array($data))
{
       $data['E1']=0; $data['E2']=0;
       $data['Kp']=10; $data['Ki']=5;
       $data['SumDt']=1; $data['i']=0;
       $data['statuses']=array_fill(0,10,0);
       $data['status']=0;
}
//$oldStatus= $data['status'];
echo "<pre>";
print_r($data);
$data['E2']=$data['E1'];
$data['E1']=round($currentTargetValue-$value,2);
$dt =  round ($data['Kp']*($data['E1']-$data['E2']+$data['E2']/ $data['Ki']),2);
$oldSumdt=$data['SumDt'];
//echo "dt=".$data['Kp']."*(".$data['E1']."-".$data['E2']."+".$data['E2']."/". $data['Ki'].")"; 
//var_dump($dt);
$data['SumDt']=$data['SumDt']+$dt;
if($data['SumDt']<1)$data['SumDt']=1;
if($data['SumDt']>10)$data['SumDt']=10.1;
//if(($data['SumDt']- $oldSumdt)>0)$data['status']=1;
$data['statuses'][$data['i']]=0;
echo $data['pow']=array_sum($data['statuses']);
if($data['pow']<floor($data['SumDt']))$data['status']=1;
else $data['status']=0;
$data['statuses'][$data['i']]=$data['status'];
$data['i']=(($data['i']+1)%10);
print_r($data);
$obj->setProperty('data',json_encode($data));
if($data['status'])$obj->callMethod('turnOn');else $obj->callMethod('turnOff');
}

Таким образом система отопления стала качественно другой:

  1. С запуска ни разу не было жалоб домочадцев что пол холодный.
  2. Система стала более стабильной.среднее значение температуры практически совпадает с уставкой
    На графиках так сильно не ощущается эта разница но по факту она есть. пришла весна. и перегревы стали чаще-сильно красивых картинок не будет ).

Система имеет свои минусы:

  1. Это щечки реле. грубо говоря если нужна мощность 50% то щелчки будут каждые 6 минут
  2. Термостаты на зигби имеют свойство отваливаться если есть перебои с электричеством. надо шлюз вещать на бесперебойник. и время от времени наблюдать-бывают просто не приходят показания - но это редкость.

Обсуждение (1) (4)

Смотрите так же:
06.04.2021 Страничка погоды c Gismeteo
18.02.2020 Реализация погодозависимой автоматики для трехходового смешения на основе ардуино и электротермической головки
16.02.2020 Регулирование трехходым смешением по подаче или по обратке?
06.02.2020 О разряде батареи датчиков температуры и влажности xiaomi
30.12.2019 Управление трехходовым клапаном нажимного действия с помощью электротермической головки
28.12.2019 Погодозависимое управление теплыми полами при трехходовом смешении
28.12.2019 Не все твердотельные реле одинаково полезны.
28.12.2019 Электротермическая головка. что внутри?
07.10.2019 Считываем показания с газового счетчика BK с помощью датчика открытия дверей от Xiaomi
07.10.2019 Простые устройства (ПУ)->Тип:Счётчик (counter) подключение к датчику импульсов

Новосибирск, Россия

На форуме: stellhawk