1 2 3 4 5 6 7 8 9 10 10/10 9,84оценок: 31

Ракетный котел - 2

Тема в разделе "Котлы, горелки, котельное об-е своими руками", создана пользователем Perelesnik, 19.07.17.

Статус темы:
Закрыта.
  1. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    Испытания продолжаются. Это уже вторая загрузка (первая была при вертикально установленных поленьях, а эта - пара совсем маленьких горизонтально и одна коряга сверху). На первых картинках - окончание первой закладки и несколько минут с начала второй. Ну, там по времени всё и так видно.
    Пока всё адекватно.
    1.JPG 2.JPG 3.JPG 4.JPG 5.JPG 6.JPG 7.JPG 8.JPG
     
  2. StarykovMih
    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176

    StarykovMih

    Живу здесь

    StarykovMih

    Живу здесь

    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176
    Адрес:
    Киев
    Видно, что пересчитывает показатели каждые 5 секунд, но сожалению, не все переменные понятны. Руслан, если не влом, посыпьте, плз, комментами по коду.
    Если мне не изменяет память, отработка сервоприводов была гораздо реже (в предыдущих версиях), а как сейчас, неужели каждые 5 сек привод отрабатывает?
     
    Последнее редактирование: 02.03.18
  3. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    Действующие лица этого водевиля:

    D_forv_water - дельта воды в подаче
    D_riser - дельта райзера
    D_bunker - дельта бункера
    riser - реальная температура райзера

    spid - промежуточное значение, куда складываем все дельты
    settherm - установленная нами "целевая" температура воды
    forv_water - реальная температура воды в подаче
    temp_water - промежуточное "целевое" значение на случай, если разница между установленной температурой воды и реальной больше 5 градусов
    tempdeficite - разница между "целевой" температурой воды и реальной

    spid - промежуточное значение, куда плюсуем все дельты
    preservoprim - "заготовка" угла первички (отличается тем, что является "переменной с плавающей точкой", а не "байтом")
    servoprim - готовое значение угла первички.

    Сервоприводы отрабатывают только тогда, когда набирается не менее 5 градусов для отработки - на изменения в 1-2 и так далее, до 5 градусов сервоприводы никак не реагируют.
    То есть, на нашем графике может быть весьма "шершавая" линия угла первички, но фактически при этом сервопривод может ни разу не включиться, если не приходит требование передвинуться более чем на 5 градусов от текущего положения сервопривода. Более того, в период ожидания сервоприводы полностью отключены.

    То есть, допустим, сама серва находится на 180 градусов. Она отключена при этом. И будет отключенной, пока не получит задачу отработать 175 или менее градусов. Отработает и снова отключится, пока не придет команда на 170 градусов или на 180 градусов.
     
  4. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    Доброе утро, однако.
    Снимок.JPG
    Снимок.JPG
    Снимок.JPG

    Неплохие циферки с утра пишет.
    Вчера в это время было -20 на улице, а сегодня - близко к нулю.
     
    Последнее редактирование: 03.03.18
  5. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    Может кто поможет немного?
    Нужно сделать аппроксимацию кривой управления первичкой (сгладить "шумы" и резкие перепады).

    Сразу скажу, что просто накапливать массив в течение некоторого времени, а затем выводить из него среднее значение - не прокатит. Получается большое запаздывание управляющего сигнала. Лагранж и Безье тоже идут лесом - мы кривую строим не для визуализации графика, а для оперативного управления процессом.

    Фактически, нужно такое:
    переменная, которая у нас именуется spid, динамически изменяется - со скоростью от нескольких сотых до нескольких десятков (от 0.01 до 120, допустим) каждые 5 секунд. В результате, получается "гребёнка", от которой практической пользы нет - у нас процессы физически не могут меняться настолько резко и скачкообразно. И если небольшие скачки (как я уже писал, до 5 градусов) сервопривод просто игнорирует, то большие скачки он всегда отрабатывает.

    Например, вот такая ситуация:
    Снимок.JPG
    Здесь просто какой-то датчик выдал "грязный" сигнал, для тех же "Далласов" такое в порядке вещей. Иногда и термопары "шалят" на несколько градусов, просто по каким-то внутренним "заморочкам" в усилителях.
    Да и по самому алгоритму, при достижении того или иного условия получаем резкие скачки. Например, до 400 градусов в райзере расчет идет без учета температуры райзера, а выше - уже с учетом такой температуры, и сам переход между этими математическими методами дает свой "скачок". Или при достижении заданной температуры идет мгновенное "обнуление" заслонки - это тоже резкое изменение.

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

    Образно говоря, выходной сигнал должен быть "тяжелым", обладать некой инерцией, а spid должен тянуть это значение как будто он связан с ним резинкой или пружиной - чем сильнее растягивается резинка (больше разница), тем сильнее тянет, а если меньше разница - то почти не тянет.

    Сейчас голова занята немного другим, но аппроксимацию всё равно нужно сделать, а я просто не могу сейчас на это нормально настроиться. Знаю, что это очень простая задача, но мозгъ в данный момент вообще чуток заклинило :flag:

    Так бывает - когда что-то замороченное легко решается, а на элементарном - клинит наглухо.

    Так что поучаствуйте.

    А я пока пойду дрова выкапывать из-под снега...

    Вот еще реальная ситуация для общего представления задачи:
    Снимок.JPG

    Вся эта "кучерявость" никому не нужна.

    И еще - временной интервал работы функции аппроксимации - те же 5 секунд. Входные значения - предыдущее значение выходного сигнала и spid, больше ничего не нужно, никаких массивов и более старых "воспоминаний".
     
    Последнее редактирование: 03.03.18
  6. alarin
    Регистрация:
    29.07.16
    Сообщения:
    8.661
    Благодарности:
    3.751

    alarin

    Живу здесь

    alarin

    Живу здесь

    Регистрация:
    29.07.16
    Сообщения:
    8.661
    Благодарности:
    3.751
    Адрес:
    Казахстан, Алма-Ата
    @Perelesnik, А самое начало - вычитание отрезков., потом вычитание результатов и сравнение с нулем. Смена знака-будет давать третью производную функции - точку перегиба. Для скорости изменения можно полученное значение от вычисления разностей делить на такое же предыдущее, получится коэффициент динамики, т е вторая производная функции. Пока коэффициент постоянный ничего не трогаем, растет больше к примеру 3 прикручиваем заслонку, меняет знак, включаем реверс. Это фактически вычисляем предел последовательности температурных приращений значения функции. Из математики Предел приращения функции к пределу приращения своего аргумента и есть производная функции в данной точке. Фактически это дефференцирование и есть, а апроксимация, это задание дельты, т е количестваа 5 сековых отрезков. Задача автомата - поддерживать одинаковым динамический коэффициент. Остальные параметры использовать как поправочные, для изменения условий или шага дельты.
     
  7. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.683
    Благодарности:
    633

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.683
    Благодарности:
    633
    Адрес:
    Москва
    По поводу грязных данных. Усредняются данные зашумленные данные, если шум с нулевым мат. ожиданием. У вас так называемые аномальные выбросы. Они всегда отбрасываются. Критерий вы сами указали, выброс на величину физически невозможную. Выброшенные данные при расчете заменяются. Самое простое дающее удовлетворительный результат - предыдущее значение. Если хотите, можно экстраполировать по предыдущим данным. Т. е. в скользящем окне считаете усредненную скорость, или просто дельту, так как время у вас дискретное. .И к предыдущему значению прибавляете эту дельту. Скользящее окно это текущее и несколько предыдущих отсчетов. А среднее вычисляется рекурентно, т. е текущее прибавляетее, самое ранее вычитаете., потом делите. Деление если данные целые, заменяете сдвигом. Поэтому удобно окно брать размером степенй двойки 2,4,8. С далласами я работаю, как с целыми у них формат подходящий, максовский преобразователь для термопар. тоже дает целое.
     
  8. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    Сделал простейшее сглаживание с регулируемым коэффициентом этого самого сглаживания. Вот, пока выставил коэффициент 0.5:
    Снимок.JPG

    Если поставить коэффициент 1, то будет вообще без сглаживания, ну а если, например, 0,1, то будет Очень плавная кривая.

    Ну, переночую пока с 0,5, а там посмотрю. Скорее всего, сделаю этот коэффициент настраиваемым (с моего терминала на компе, потому, что настраивать на котле "крутилкой" через меню - вряд ли будет востребовано, так как на самом котле графиков не видно, не на что ориентироваться).
     
  9. МальчишПлохиш
    Регистрация:
    29.08.12
    Сообщения:
    1.267
    Благодарности:
    1.699

    МальчишПлохиш

    Живу здесь

    МальчишПлохиш

    Живу здесь

    Регистрация:
    29.08.12
    Сообщения:
    1.267
    Благодарности:
    1.699
    Адрес:
    Саратов
    Вроде бы при 0,5 дерготни не наблюдается.

    Лучшее всегда враг хорошему.
    © Народная мудрость.

    Думается пора уже выстраивать изменение температуры теплоносителя в зависимости от комнатной температуры. Корректировка раз в 20 - 40 минут, чаще система не отработает, да и незачем, тепловая инерция дома не даст заметных скачков.
     
    Последнее редактирование: 04.03.18
  10. sergMinsk
    Регистрация:
    08.10.09
    Сообщения:
    4.484
    Благодарности:
    2.363

    sergMinsk

    Живу здесь

    sergMinsk

    Живу здесь

    Регистрация:
    08.10.09
    Сообщения:
    4.484
    Благодарности:
    2.363
    Адрес:
    Минск
    @МальчишПлохиш, инерцией обладают каменные дома.
    каркасники же малоинерционны.(просто шобы не забыли, если кто из какрасоводов будет пользоваться)
     
  11. МальчишПлохиш
    Регистрация:
    29.08.12
    Сообщения:
    1.267
    Благодарности:
    1.699

    МальчишПлохиш

    Живу здесь

    МальчишПлохиш

    Живу здесь

    Регистрация:
    29.08.12
    Сообщения:
    1.267
    Благодарности:
    1.699
    Адрес:
    Саратов
    Для каркасников раз в 5 - 10 мин корректировка температуры теплоносителя.
     
  12. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    Дров хватит только до завтра, так что решил успеть снять кино:
     
  13. StarykovMih
    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176

    StarykovMih

    Живу здесь

    StarykovMih

    Живу здесь

    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176
    Адрес:
    Киев
    Насколько я смотрел этот вопрос, у каркасников полное остывание дома (с +22 до +5) примерно за сутки-двое, у газоблока примерно за трое-четверо суток, у кирпичного за 5...6 дней.
    ИМХО: корректировка температуры теплоносителя по комнатной температуре - догонять отходящий паровоз, раскачивая качели, или выстраивая ПИД регуляцию с долгим подбором коэффициентом. В этом случае, как мне кажется, проще работать на упреждение от забортной температуры, управляя либо Т-воды, либо скоростью насоса (они, в большинстве своём трёх-скоростные и можно попробовать релейно управлять скоростью насоса, подключая питание на клеммы 3, 4, 5 через реле от Ардуино). электросхема насоса.jpg
     
  14. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    А это весь вчерашний день, записанный программой на компьютере.
    Вот общий график:
    Снимок.JPG
    Это только вода: установка, подача, обратка:
    Снимок1.JPG
    А это заслонки:
    Снимок2.JPG
    Ну, и "как оно работает":

    Код:
     
    Это дополнительные переменные для первички:
    float     D_forv_water ;
    float     P_forv_water ;
    float     D_riser ;
    float     P_riser ;
    float     D_bunker ;
    float     P_bunker ;
    float     preservoprim;
    float     D_preservoprim;
    float     P_preservoprim;
    float     workservoprim;
    float     servoprim_speed = 0.25;
    byte  Tflag;
    
    void ServoPrim () {  Это само вычисление:
    
    
         if (Tflag > 0) {
          if ( D_forv_water != 0 && spid - D_forv_water >= 2 && spid - D_forv_water < 180 ) {
            spid = spid - (D_forv_water*2);
          }
          if ( D_riser != 0 && spid - D_riser >= 2 && spid - D_riser < 180 ) {
            spid = spid - D_riser;
          }
          if ( D_bunker != 0 && spid - D_bunker >= 2 && spid - D_bunker < 180 ) {
            spid = spid - D_bunker;
          }
    
    
          if (settherm - forv_water >= 5) {
            if (forv_water - temp_water >= 1 ) {
              temp_water = forv_water + 2;
            }
            if (temp_water - forv_water >= 3 ) {
              temp_water = forv_water + 2;
            }
          }
          else {
            temp_water = settherm;
          }
    
          tempdeficite = temp_water - forv_water;
    
          if ( spid + tempdeficite > 2 && spid + tempdeficite < 180 ) {
            spid = spid + tempdeficite;
          }
    
          if (riser > 400 && spid - (map (riser, 400, 1100, 2, 180) / constrain (tempdeficite, 1, 5)) >= 2) {
            preservoprim = spid - (map (riser, 400, 1100, 2, 180) / constrain (tempdeficite, 1, 5));
          }
          else {
            preservoprim = spid;
          }
       
        if ( settherm - forv_water <= 0.2 ) {
          spid = 2;
          preservoprim = 2;
        }
    
        D_preservoprim = P_preservoprim - preservoprim;
        workservoprim = P_preservoprim - D_preservoprim * servoprim_speed;
    
        servoprim = byte(constrain (workservoprim, 0, 180));
        //Serial.print (D_forv_water);
        //Serial.print ("  ");
        //Serial.println (servoprim);
    
        P_preservoprim = workservoprim;
    
        Tflag = 0;
      }
    
    }
    
    void loop()  Это относящийся к вычислениям первички кусочек:
    {
    if (Primsec >= 5) {
          D_forv_water = forv_water - P_forv_water;
          P_forv_water = forv_water;
          D_riser = riser - P_riser;
          P_riser = riser;
          D_bunker = bunker - P_bunker;
          P_bunker = bunker;
          Tflag = 1;
          Primsec = 0;
        }
    
        ServoPrim ();
    
    
    Дров хватило до утра. Но теплые полы еще до вечера будут теплыми... а так, включил кондиционер и еще газовый котел на прогонку воды примерно 25 градусов по температуре.
    Облачился снова в теплый свитер...

    Топливо привезти сейчас всё равно никак - снега... Я не выезжаю по такой погоде.

    Всего котел в этом сезоне отработал 87 дней, или без недели три месяца.
    За сезон было два розжига - один в самом начале, второй - после той паузы, когда я останавливал котел.
    А так он работал в непрерывном режиме, постоянно поддерживая температуру.

    Весь этот сезон потратил на отладку автоматического управления (это первый на моей памяти проект по автоматизации, который занял настолько много времени и вообще, усилий по разработке).

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

    На данный момент файл прошивки главного контроллера носит название "_24_encod_iterrupt15sd_noPID", что значит, что это пятнадцатая по счету прошивка для "Меги". Сюда же нужно добавить предшествующий этап разработки прошивки для "Уно", которых, считая последний для "Уно" релиз, всего 18 штук. Итого, 33 прошивки, которые реально по-разному себя вели, и каждая из них была проверена, отлажена, введена в работоспособное состояние, на каждой из 33 прошивок котел работал, давая статистику для следующей прошивки.

    Сюда добавим 4 версии прошивок управления сервами для Меги, 5 для Уно, 9 вариантов прошивок "домашнего" контроллера для Меги и 8 для Уно - это еще 26 отлаженных и проверенных кодов.

    Добавим еще более 12-ти (точно не помню, так как уже начал удалять старые коды для экономии места) вариантов программы для работы с котлом на компьютере (это та программка, интерфейс которой я тут постоянно скриню).

    Всего выходит 33+26+12 = 71 работоспособных (и действительно полноценно работавших) версий программ, каждая из которых была "в деле" и была реально проверена.

    Учитывая, что проверка на таком медленном процессе, как работа твердотопливного котла, это вообще "нечто"... Это не проверка какого-нибудь ЧПУ станка, где за час-два всё уже ясно. Да и топливо - отнюдь не пеллета с одинаковыми размерами и свойствами. Укладка, размер дров, их количество в бункере... и еще 100500 разных нюансов. А еще отладку каждого кода нужно было успеть до ночи сделать, чтобы ночью не пришлось бежать "спасать" котел. Хотя и такое иногда приходилось делать...

    Фактически приостановил все остальные проекты в эту зиму ради работы над системой котлового управления. Разве что в феврале выделил полторы недели, чтобы быстренько проработать и изготовить несколько устройств для авиации - люди еще с осени прошлого года заказали и оплатили (за эти деньги, собственно, мы и зимовали). Всю работу, о которой меня просили в течение зимы, просил переносить на весну, уже насобиралось куча разного: от проектирования прядильных машин и вакуумной печи до объемных архитектурных проектов и системы управления работой вертолетных двигателей. За работой над котловой автоматикой просто не было возможности всем таким заниматься. И то... еле успел довести до относительно годного состояния эту автоматику, прежде чем завершил сезон твердотопливного отопления. Всего 87 дней было для тестирования.

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

    Так что сейчас дособираю-допаяю те котловые контроллеры, которые мне поназаказывали (я это дело прервал ради окончательной доводки алгоритмов, пока котел бы еще в работе), порассылаю, и буду поднимать какие-нибудь из других отложенных проектов.
     
  15. StarykovMih
    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176

    StarykovMih

    Живу здесь

    StarykovMih

    Живу здесь

    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176
    Адрес:
    Киев
    Первичка "хлопает в ладоши" - от полностью закрытой по полностью открытой и обратно... Это с демпфированием 0,5?
    Работа титаническая.
     
Статус темы:
Закрыта.