МОДУЛЬ ТЕРМОСТАТ
Модератор: immortal
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: МОДУЛЬ ТЕРМОСТАТ
Не удовлетворяет такой способ термостатирования.
Как-то грубо, даже если трешолд маленький поставить.
На картинке пример уставки 23 градусов с трешолдом 0,01. Температура гуляет от 22,7 до 23,5 - больше градуса. При использовании ПИД-регулятора можно добиться точности регулировки 0,1 градуса. Вроде, где-то на форуме была реализация на php. Не могу найти. Может, кто пнёт?
ps/ С Новым годом!
Как-то грубо, даже если трешолд маленький поставить.
На картинке пример уставки 23 градусов с трешолдом 0,01. Температура гуляет от 22,7 до 23,5 - больше градуса. При использовании ПИД-регулятора можно добиться точности регулировки 0,1 градуса. Вроде, где-то на форуме была реализация на php. Не могу найти. Может, кто пнёт?
ps/ С Новым годом!
- Вложения
-
- 2018-01-03_01-21-03.png (59.57 КБ) 5851 просмотр
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: МОДУЛЬ ТЕРМОСТАТ
Тут гдето близко , но может не то?
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: МОДУЛЬ ТЕРМОСТАТ
А вот еще один с поддержкой PonM
- Вложения
-
- NewPIDController.txt
- (6.14 КБ) 714 скачиваний
- Рейтинг: 1.16%
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: МОДУЛЬ ТЕРМОСТАТ
А можете код с комментариями вывести? Хотел бы добавить этот алгоритм в Простые устройства для термостата, но что-то не очень понимаю, как он работает.olehs писал(а):А вот еще один с поддержкой PonM
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: МОДУЛЬ ТЕРМОСТАТ
Тут есть один важный момент. Отличие первого класса от второго не только в наличии PonM, а и в алгоритме запуска расчета.sergejey писал(а): А можете код с комментариями вывести? Хотел бы добавить этот алгоритм в Простые устройства для термостата, но что-то не очень понимаю, как он работает.
Для вычисления D-компоненты важен период времени, за который произошло изменение.
Так вот в PIDController для расчета нужно вручную запускать метод getPid, а он уже рассчитает дельту времени с момента последнего запуска.
NewPIDController же умеет сам запускать расчет (создает таймер) с периодичностью, указанной в свойстве sampleTime (в секундах).
Кроме того нужно учесть, что PID-регулятор подразумевает наличие у регулируемого устройства плавной регулировки. Если ваше устройство умеет только вкл/выкл, нужно добавлять алгоритм типа ШИМ, т.е. например при PID=40 устройство за один "фрейм" (равный для примера 10сек) должно 4 секунды быть включено и 6 выключено.
Этого алгоритма нету ни в одном из классов, его нужно наворачивать сверху.
Для работы PIDController нужно указать:
1. direction - направление регулировки: 0 - прямое, 1 - обратное. Например, увеличение мощности нагревателя приводит к повышению температуры - direction=0
2. Коэффициенты PID (proportional, integral, differential) - тут, думаю, все понятно.
3. minSaturation, maxSaturation - минимальное и максимальное выходное значение регулятора. Например, у меня термоклапан начинает открываться при 60% мощности, т.е границы регулировки у меня 60-100
3. setPoint - это желаемое значение регулируемого параметра, например желаемая температура.
4. inputVal - обратная связь. Сюда должно попадать текущее значение регулируемого параметра, т.е. например значение с датчика температуры.
В результате вызова метода getPID в свойстве PID появится значение регулировки (т.е. например, мощность нагревателя).
Еще объект хранит некоторые промежуточные значения в свойствах lastInput, lastRun, period, ITerm.
Для работы NewPIDController нужно указать (детальное описание аналогичных свойств см. выше):
1. direction - направление регулировки
2. Коэффициенты PID (kP, kI, kD)
3. min, max - границы регулировки
3. PonM (0/1) - использовать ли Proportional on Measurement алгоритм регулировки
4. sampleTime - периодичность запуска расчета pid (в секундах)
5. setPoint - целевое значение регулировки
6. input - обратная связь, сюда должно попадать значение с датчика
7. active - (1/0) - вкл/выкл таймер PID
Если active=1, по таймеру будет запускаться метод compute. Результат работы попадает в свойство output. Есть еще вычисляемое свойство outputPercent, которое показывает в процентах значение output в границах min/max (для отображения на графиках в одном масштабе)
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: МОДУЛЬ ТЕРМОСТАТ
М... с этим проблема. У меня клапан на радиаторе минуту не меньше меняет положение из открытого в закрытое. Может ли алгоритм быть адаптирован с учётом такой инерционности?olehs писал(а):Кроме того нужно учесть, что PID-регулятор подразумевает наличие у регулируемого устройства плавной регулировки. Если ваше устройство умеет только вкл/выкл, нужно добавлять алгоритм типа ШИМ, т.е. например при PID=40 устройство за один "фрейм" (равный для примера 10сек) должно 4 секунды быть включено и 6 выключено.
Этого алгоритма нету ни в одном из классов, его нужно наворачивать сверху.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: МОДУЛЬ ТЕРМОСТАТ
Тут есть несколько вариантов:
1. Если ваш клапан все-же поддерживает плавную регулировку (обычную ШИМ-регулировку, многие парафиновые это умеют, надо смотреть доки), можно собрать для него контроллер или купить готовый (гуглить AC Dimmer)
2. Установить довольно маленький фрейм (например 10 сек). В таком случаем будет реализована псевдо-регулировка мощности. У этого варианта есть минус - эта регулировка ни разу не линейная . Т.е. клапан может открываться при 70 % мощности, а закрываться при 20.
3. Установить заведомо большой фрейм (больше времени открытия/закрытия клапана). В таком случае регулировка буде происходить почти полным перекрытием/открыванием клапанов. Не уверен, что такая регулировка полезна для самой системы отопления.
У меня клапана стоят на радиаторах центрального отопления и я использую 3-й метод с фреймом в 100 сек. В принципе, температура держится в пределах +-0,2 градуса.
1. Если ваш клапан все-же поддерживает плавную регулировку (обычную ШИМ-регулировку, многие парафиновые это умеют, надо смотреть доки), можно собрать для него контроллер или купить готовый (гуглить AC Dimmer)
2. Установить довольно маленький фрейм (например 10 сек). В таком случаем будет реализована псевдо-регулировка мощности. У этого варианта есть минус - эта регулировка ни разу не линейная . Т.е. клапан может открываться при 70 % мощности, а закрываться при 20.
3. Установить заведомо большой фрейм (больше времени открытия/закрытия клапана). В таком случае регулировка буде происходить почти полным перекрытием/открыванием клапанов. Не уверен, что такая регулировка полезна для самой системы отопления.
У меня клапана стоят на радиаторах центрального отопления и я использую 3-й метод с фреймом в 100 сек. В принципе, температура держится в пределах +-0,2 градуса.
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: МОДУЛЬ ТЕРМОСТАТ
Сейчас пробую медленный ШИМ для электроконвектора 2кВт вкл/выкл релюхой
Код: Выделить всё
//интервал 3 минуты
//100% - постоянно вкл
//0% - постоянно выкл
//х% - х*(3 минуты/100) вкл, (100-х)*(3 минуты/100) выкл
//to do - учесть t на улице
//$rl = $param['relay'];
$rl = 'nl9'; //$param['relay'] - obj's name
clearTimeOut($rl.'_pid');
$prt = 0;
$Input = (float)gg('temp_00.value'); //текущая температура
$Target = 23.0; //желаемая т-ра
$kp = 1.1; //коэфф пропорционального регулирования
$ki = 0.01; //не использую пока
$kd = 1.0; //не использую пока
$timeSample = 1.8; //1/100 периода = 3 минуты/100
$error = $Target - $Input;
if($error>0){ //мы можем только повышать t
$prt = min($kp * $error,1.0); //0..1
}else{ //значение выше уставки
$prt = min(-$kp * $error,0.2); //компенсация потерь, сначала можно=0
}
$prt = (int)($prt * 100);
debmes ('Target ='.$Target);
debmes ('Input ='.$Input);
debmes ('error ='.$error);
debmes ('prt ='.$prt);
//ШИМ
if($prt==0){
if(gg($rl.'.status')==1){cm($rl.'.turnOff');} //просто выключим
return;
}else{
if(gg($rl.'.status')==0){cm($rl.'.turnOn');} //включим <--------------------edited
setTimeOut($rl.'_pid','cm("'.$rl.'.turnOff");',$prt*$timeSample); //подождем и выключим
}
Последний раз редактировалось xor Пт янв 05, 2018 11:24 pm, всего редактировалось 1 раз.
win10 connect https://connect.smartliving.ru/profile/303
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: МОДУЛЬ ТЕРМОСТАТ
Сейчас с коэффициентами играюсь, на рис. показана реакция на открытую форточку
win10 connect https://connect.smartliving.ru/profile/303