Управление отоплением 0-10в / ПИД регулятор

Спасибо большое! Буду разбираться. Еще несколько вопросов:

  1. Откуда взяли 24В АС? Сходу не смог найти что-то вменяемое, тем более на DIN-рейку.
  2. Почему использовали BROEN, а не VALTEC? На сколько понимаю, привод одинаковый, только на второй дают гарантию 7 лет.
  3. Аварийное управление возможно только со снятием сервопривода? Не думали над более удобным вариантом (для девочек :grinning:)?

Smile, добрый день!
У нас продаются вот такие двадцатичетырехвольтовые блоки питания: https://wirenboard.com/ru/product/hdr_30_24/ на ВШТ-рейку.

Приводам нужно 24 V AC.
Тоже такой искал безрезультатно…

https://www.prestig.ru/elektrika/avtomati_i_uzo/modulnie_kontaktori/abb/TS/48145_2csm251043r0811?gclid=CjwKCAiA_P3jBRAqEiwAZyWWaOLCQrXld3dB1oZwUpZ52fTAE4lMoDnphDjaqI4MJTfKlFPfUTGfrRoC3qIQAvD_BwE

  1. С блоком питания сам экспериментирую до сих пор. Два привода от моего БП работают прекрасно, а вот с тремя все закрываются и мне предстоит ещё это выяснить.
  2. Компактность, вариативность и клапанов и приводов, наличие в нашем городе, хоть и под заказ, цена, страна происхождения.
  3. Честно? Не думал, а может и стоило бы, учитывая, что дом оставляю иногда теще, а она та же «девочка» ))) можно было выбрать версию NO вместо NC.

Я экспериментировал с несколькими трансформаторами понижающими и пока выбрал обычный блок в розетку, с остальными пока не разобрался что не так, но приводы закрываются.

1 лайк

Как минимум по трансформатору от ABB на фото я могу сказать почему он не работает. Это звонковый трансформатор, расчитанный на кратковременное включение маломощной нагрузки. У того же ABB есть разделительные трансформаторы. Серия TS. Они мощнее и расчитаны на длительную нагрузку. Но это пока теория) Я еще только подбираю комплектующие.

Вообщем я протестировал работу приводов с несколькими понижающими трансформаторами и сделал вывод, что дело не в трансформаторах. Опыт показал, что корректно работают приводы только при условии, что один из них всегда не открывается полностью ( сигнал 0-10в с контроллера должен быть в диапазоне примерно 0-5в). Эксперимент проводился и с одним приводом и тремя. Питание 24В параллельно подаётся на приводы и к каждому подходит свой сигнал 0-10в. Не могу обьяснить этот эффект, но будто бы постоянное и переменное напряжения связаны и оказывают влияние друг на друга.
Вот пример испытаний на примере 2х приводов: на первый подаю сигнал 10в, замеряю напряжение и вижу, что оно подсаживается. Через две минуты клапан полностью открывается. Если на второй подать сигнал выше 5в, то напряжение питания возрастает до величины без нагрузки и первый привод начинает закрываться, а второй и не пытался открыться. Такой же эффект наблюдается когда я второй привод без подачи сигнала 0-10в просто отключаю от питания после того, как первый уже открылся - привод начинает закрываться. Что-то заставляет их реагировать после подачи управляющего сигнала 0-10в. По паспорту я вижу, что допустимые отклонения по переменному напряжению: 24В -10% + 20%. Ток в момент открытия 0,25А, потом ниже. Странная ситуация и ответов у меня нет. Я вынужден всегда один контур отопления держать закрытым и менять местами по времени.

А какая схема подключения устройств? Я не совсем понимаю, как подключать землю. Нужно ли объединять все земли? Вот нарисовал схему. У Вас похожая?

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

Без общей земли 0-10в не будет управлять!
Подключать ещё не приходилось, но как вижу из документации, есть один провод, называется общая земля. К нему подключается один из проводников ~24в и GND вместе. Тогда создается потенциал для управляющего сигнала.

У приводов нет земли как таковой, есть ноль.

Это и есть общий провод, который нужно подключать к земле (минусу питания 24v DC) и одному из проводников 24v AC.

1 лайк

Хм. Никогда с этим не приходилось сталкиваться, но мысль я понял. Я вначале засомневался в надобности земли у постоянки. Но я попробую так сделать, может это и решит мою проблему с одним неработающим приводом всегда. Спасибо за идею ))

Ура. Заработали все три привода. Спасибо, Виталий. Я упустил этот момент, что ноль привода надо объединить с GND. :slight_smile:

1 лайк

ПИД регулятор идея и код не мой, взят от сюда и не много доработан.


var Pid = function(opts) {
 opts = opts || {};
 this._target = opts.target || 0;
 this._kp = opts.kp || 0;
 this._ki = opts.ki || 0;
 this._kd = opts.kd || 0;
 this._outputMin = opts.outputMin || 0;
 this._outputMax = opts.outputMax === undefined ? 1 : opts.outputMax;
 this._lastTime = null;
 this._intervalId = null;
};

Pid.prototype.clip = function(x, min, max) {
  if (x < min){
    return min;
  } else if (x > max) {
    return max;
  } else {
    return x;
  }
};

Pid.prototype._clearErrors = function() {
 this._sumError = 0;
 this._lastError = 0;
 this._lastTime = null;
};

Pid.prototype.setup = function(opts) {
 this._target = opts.target === undefined ? this._target : opts.target;
 this._kp = opts.kp === undefined ? this._kp : opts.kp;
 this._ki = opts.ki === undefined ? this._ki : opts.ki;
 this._kd = opts.kd === undefined ? this._kd : opts.kd;
 this._outputMin =
  opts.outputMin === undefined ? this._outputMin : opts.outputMin;
 this._outputMax =
  opts.outputMax === undefined ? this._outputMax : opts.outputMax;
 this._clearErrors();
};

Pid.prototype.tune = function(opts) {
 this._kp += opts.kp || 0;
 this._ki += opts.ki || 0;
 this._kd += opts.kd || 0;
 this._clearErrors();
};

Pid.prototype.update = function(input) {
 //console.log("update input="+input);
 var date = new Date();
 var dt = date.getTime() - this._lastTime;
 var error = this._target - input;
 var dError = 0;
 var integralNormalized = 0;
 var differential = 0;

 if (this._lastTime) {
  dError = error - this._lastError;
  this._sumError += error;
  integralNormalized = this._ki * this._sumError * dt;
  differential = (this._kd * dError) / dt;
  integralNormalized = this.clip(
   integralNormalized,
   this._outputMin,
   this._outputMax
  );

 } else {
  this._clearErrors();
 }

 var output = this._kp * error + integralNormalized - differential;
 //console.log("output" + output);

 output = this.clip(output, this._outputMin, this._outputMax);
 //console.log("output clip" + output);
 this._lastError = error;
 var date = new Date();
 this._lastTime = date.getTime();
 return output;
};

Pid.prototype.run = function(repeat, interval) {
 if (!this._intervalID) {
  this._intervalID = setInterval(repeat, interval * 1000);
  this._clearErrors();
 }
};

Pid.prototype.stop = function() {
 if (this._intervalID) {
  clearInterval(this._intervalID);
 }
 this._intervalID = null;
};

var myControl = new Pid({
 target: 23, // требуемая величина выходного значения
 kp: 3, // пропорциональная составляющая
 ki: 0.9, // интегральная составляющая
 kd: 0.1, // дифференциальная составляющая
 outputMin: 0, // минимальное значение выхода
 outputMax: 10 // максимальное значение выхода
});


myControl.run(function() {
 var input = 23;                                      //Входное значение var input = dev["abc"]["def"];
 var output = myControl.update(input); //Выходное значение
                                                             // Выходное значение на dev["abc"]["def"] = output;
 log(output);
}, 0.05);                                              //Время запуска ПИД-регулятора каждые 50 мс 
/*Отопление это инертный процесс имеющий большое время реакции, поэтому время можно увеличить*/
3 лайка

Сами уже протестировали, удаётся держать температуру близко к заданной? В каком диапазоне гуляет? Тема прикольная, надо присмотреться. Спасибо :blush:

Отформатировал код для легкости восприятия

Очень актуальная тема - управление климатом с помощью Модуль аналогового вывода 0-10В WB-MAO4 и трехходового моторизированного клапана.

В этой теме есть всего 2 кода скриптов представленных читателями, но замечены не точности:

  1. [Starck] предлагает код как уже испытанный с погрешностью пол градуса, а через некоторое время пишет что заработало. Не понятная ситуация с отправленным кодом. Что же заработало потом если оно уже работало в момент отправки кода.
  2. [BlackBox] отправил код и исчез, код остался без комментариев.

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

Конечно желательно использовать ПИД регулирование. Хотелось бы использовать уже испытанный алгоритм регулирования. Если кому не жалко поделитесь пож. кодом

1 лайк

Кто-нибудь отзовется помощь?