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

"Народный контроллер" для теплового насоса - 3

Тема в разделе "Геотермальные тепловые насосы", создана пользователем vad711, 26.11.19.

  1. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231
    Адрес:
    Псков
    @vad711,
    Ну это Вы батенька перемудрили...
    Кто же так просто делает?
    Нужно, чтобы вода текла из далёка.
    Чтобы успела разогнаться так сказать и смыть мыло...
    Чтоб нужен был насос рециркуляции и прочие прелести, клапана итд...
     
  2. Альтермолог
    Регистрация:
    29.03.11
    Сообщения:
    8.499
    Благодарности:
    6.237

    Альтермолог

    Живу здесь

    Альтермолог

    Живу здесь

    Регистрация:
    29.03.11
    Сообщения:
    8.499
    Благодарности:
    6.237
    Адрес:
    Москва
    Мне 15 метров не понравилось, сейчас на 30 переношу:)]
     
  3. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231
    Адрес:
    Псков
    @Альтермолог, Так грей воду прям в скважине...
    Спустил туда тэн с насосом, да и всё...

    Зы...

    15м столба воды почти 200 литров.
    Горячая вода сама идет вверх, глядишь и насос может не понадобится.
     
    Последнее редактирование: 15.05.20
  4. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231
    Адрес:
    Псков
    Взялся скрещивать свой вариант и новую прошивку.
    некоторые дополнения... процесс долгий... поэтому постепенно.
    Код:
    #ifdef DEBUG_MODWORK
                journal.jprintf("%s %.2f (FEED: %.2f)\n",STR_REDUCED,dFC.get_stepFreqBoiler()/100.0,FEED/100.0);
    #endif
    добавить и такой вариант раз уж супербойлер
    Код:
    #ifdef DEBUG_MODWORK
                journal.jprintf("%s %.2f (PressToTemp(PCON): %.2f)\n",STR_REDUCED,dFC.get_stepFreqBoiler()/100.0,PressToTemp(PCON)/100.0);
    #endif
     
  5. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028
    Адрес:
    МО
    Так тож отладка, даже у меня она выключена.
     
  6. dimex2015
    Регистрация:
    25.10.15
    Сообщения:
    1.947
    Благодарности:
    372

    dimex2015

    Живу здесь

    dimex2015

    Живу здесь

    Регистрация:
    25.10.15
    Сообщения:
    1.947
    Благодарности:
    372
    Адрес:
    Минск
    Я вот увидел что НК понимает генератор. И тут вопросы возникли. Какой нужен генератор. Как конфигурить прошивку и какие птички выставить. И почему для вакома в инверторе одни настройки (и генератор и вощвоат масла) а в омроне их нет.
     
  7. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028
    Адрес:
    МО
    Нужно цифровой вход задействовать, тогда начинает ограничивать мощность и не включать тэны автоматически.
    Максимальная частота компрессора для генератора в настройках.
    На экране появляется соответствующая картинка.
    В моем конфиге еще потребляемая мощность начинает считаться по частотнику, так как счетчик стоит до генератора.
    Потому что у меня Vacon. Для Omron нужно делать специально, так как частотники вынесены в разные библиотеки и у них отличается управление.

    С настройками, если частотник прописанный в конфиге Vacon, а значит можно и любой PWM или аналоговый привод, так: прописать в конфиге контактный датчик SGENERATOR и через веб настроить ограничение частоты и потребляемой мощности.
    На Омроне тоже, по идее, должно работать, но я не проверял.
     
    Последнее редактирование: 16.05.20
  8. dimex2015
    Регистрация:
    25.10.15
    Сообщения:
    1.947
    Благодарности:
    372

    dimex2015

    Живу здесь

    dimex2015

    Живу здесь

    Регистрация:
    25.10.15
    Сообщения:
    1.947
    Благодарности:
    372
    Адрес:
    Минск
    А генератор начал @Pav2000 прикручивать? У него омрон.
     
  9. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231
    Адрес:
    Псков
    upload_2020-5-17_1-19-48.png

    Как хоть коэффициентами погодозависимости теперь пользоваться?
     
  10. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028
    Адрес:
    МО
    Так там формула написана. Если поставить базовая = 0, то будет все так же.
    100 - это подцепились старые данные, я чтобы не увеличивать размер структуры использовал старые неиспользуемые ячейки памяти.
     
  11. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231
    Адрес:
    Псков
    Оставил в переключении switchBoiler только супербойлер и отопление. Чтобы не путаться. Если ничего не менять тоже самое.
    Код:
    boolean HeatPump::switchBoiler(boolean b)
    {
    if(b == onBoiler) return onBoiler; // Нечего делать выходим
    #ifdef DEBUG_MODWORK
        journal.printf(" swBoiler(%d): %X, mW:%d\n", b, onBoiler, get_modWork());
    #endif
             // переключение ГВС/отопление в зависимости от onBoiler=true - ГВС
    
      if(b) {                                // переключение на ГВС
             Pump_OutSpeed(false);           // переключить насос СО на 1 скорость
             dRelay[RSUPERBOILER].set_ON();
             dRelay[PUMP_OUT].set_OFF();     // файнкойлы выключить
            } else {                         // Переключение с ГВС на Отопление идет анализ по режиму работы дома
      if(!GETBIT(Prof.Boiler.flags, fBoilerTogetherHeat)) dRelay[RSUPERBOILER].set_OFF(); // На отоплении, бойлер греется самотеком, если не совместно.
    
      if((Status.modWork != pOFF) && (get_State() != pSTOPING_HP)) { // Если не пауза И отопление/охлаждение дома НЕ выключено И нет процесса выключения ТН то надо включаться
          dRelay[PUMP_OUT].set_ON();         // Насос отопления включаем
          onsopump = rtcSAM3X8.unixtime();   // запомнить время включения насоса СО
            } else {                         // пауза ИЛИ работа дома не задействована - все выключить
    
         Pump_OutSpeed(false);               // СО переключить на 1 скорость
         dRelay[PUMP_OUT].set_OFF();         // файнкойлы
        _delay(DELAY_AFTER_SWITCH_RELAY);    // Задержка
         dRelay[RSUPERBOILER].set_OFF();
         }
       }
      if(onBoiler && get_State() == pWORK_HP) { // Обеспечить дополнительное время для прокачивания гликоля
         journal.jprintf(" Pause %ds, Boiler->House\n", HP.Option.delayBoilerSW);
        _delay(Option.delayBoilerSW * 1000); // выравниваем температуру в контуре отопления/ГВС что бы сразу защиты не сработали
      }
      offBoiler = b ? 0 : rtcSAM3X8.unixtime(); // запомнить время выключения ГВС (нужно для переключения)
      return onBoiler = b;
    }
    как и раньше в сброс тепла добавляется и Option. delayBoilerSW
    Код:
     Boiler: Discharging 2s...
    09:43:45 Relay RSUPERBOILER: OFF
    09:43:45 Relay RPUMPO: ON
    Pause 30s, Boiler->House
    Boiler: Discharged Ok
    09:44:25 Relay RSUPERBOILER: ON
    09:44:25 Relay RPUMPO: OFF
    В прошлых версиях у меня работало правильно так.
    В новой вериси таким макаром сброс вместо 2 сек получается 10сек
    Код:
    boolean HeatPump::switchBoiler(boolean b)
    {
    if(b == onBoiler) return onBoiler; // Нечего делать выходим
    #ifdef DEBUG_MODWORK
      journal.printf(" swBoiler(%d): %X, mW:%d\n", b, onBoiler, get_modWork());
    #endif
    
    // переключение ГВС/отопление в зависимости от onBoiler=true - ГВС
    
      if(b) {                                // переключение на ГВС
             Pump_OutSpeed(false);           // переключить насос СО на 1 скорость
             dRelay[PUMP_OUT].set_OFF();     // файнкойлы выключить
            } else
                   {                         // Переключение с ГВС на Отопление идет анализ по режиму работы дома
      if((Status.modWork != pOFF) && (get_State() != pSTOPING_HP))
            {                                // Если не пауза И отопление/охлаждение дома НЕ выключено И нет процесса выключения ТН то надо включаться
             dRelay[PUMP_OUT].set_ON();      // Насос отопления включаем
             onsopump = rtcSAM3X8.unixtime();// запомнить время включения насоса СО
      if(Status.modWork & pBOILER) return onBoiler = b; // Идет сброс тепла паузу на переключение и супербойлер отключать не надо
      if(!GETBIT(Prof.Boiler.flags, fBoilerTogetherHeat)) dRelay[RSUPERBOILER].set_OFF(); // На отоплении, бойлер греется самотеком, если не совместно.
            } else
        {                                    // пауза ИЛИ работа дома не задействована - все выключить
         Pump_OutSpeed(false);               // СО переключить на 1 скорость
         dRelay[PUMP_OUT].set_OFF();         // файнкойлы
        _delay(DELAY_AFTER_SWITCH_RELAY);    // Задержка
         dRelay[RSUPERBOILER].set_OFF();
         }
                  }
      if(onBoiler && get_State() == pWORK_HP) { // Обеспечить дополнительное время для прокачивания гликоля
         journal.jprintf(" Pause %ds, Boiler->House\n", HP.Option.delayBoilerSW);
        _delay(HP.Option.delayBoilerSW * 1000); // выравниваем температуру в контуре отопления/ГВС что бы сразу защиты не сработали
         }
         offBoiler = b ? 0 : rtcSAM3X8.unixtime();// запомнить время выключения ГВС (нужно для переключения)
         return onBoiler = b;
    }
    Для новой версии попробовал еще так, вместо return onBoiler = b из
    Код:
      if(Status.modWork & pBOILER) return onBoiler = b; // Идет сброс тепла паузу на переключение и супербойлер отключать не надо
    поставить goto в точку
    Код:
     offBoiler = b ? 0 : rtcSAM3X8.unixtime();// запомнить время выключения ГВС (нужно для переключения)
         return onBoiler = b;
    Все равно, задержка сброса 10сек вместо 2х
    Кудаб еще залезть...
     
  12. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028
    Адрес:
    МО
    @Pskovsat, у тебя какой-то другой супербойлер? Сброс тепла в новой версии работает и так.
     
  13. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231
    Адрес:
    Псков
    Супербойлер другой.
    Но общие вещи старался использовать как у всех.
    Счас попробую еще раз.
    Может после обновления не все переменные засасались.

    Зы...
    Нет всеравно
    Код:
     Boiler: Discharging 2s...
    11:51:31 Relay RPUMPO: ON
    Boiler: Discharged Ok
    11:51:41 Relay RPUMPO: OFF
    
    за 10 сек конденсация уже с 49С грохнется на 40С
    и компрессор начнет кочегарить...
     
    Последнее редактирование: 17.05.20
  14. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.310
    Благодарности:
    5.028
    Адрес:
    МО
    Чем отличается от конфига 3?
     
  15. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.504
    Благодарности:
    1.231
    Адрес:
    Псков
    Не использую в MODE_COMP HeatPump: UpdateHeat() управление насосом супербойлера.
    код от туда вырезан.
    И сделан по аналогии с твоей
    Код:
    #ifdef RSUPERBOILER
        if(GETBIT(Prof.Boiler.flags, fBoilerTogetherHeat) && (Status.modWork & pHEAT) && (T>Prof.Boiler.tempRBOILER)) { // Режим одновременного нагрева бойлера с отоплением до температуры догрева
        if(!is_compressor_on() || sFrequency[FLOWGVS].get_Value() > sFrequency[FLOWGVS].get_minValue()) { // проток ХВС через  предконденсатор
                dRelay[RSUPERBOILER].set_OFF();   // насос супербойлера - выключить
                SETBIT0(flags, fHP_BoilerTogetherHeat);
            } else if(sTemp[TCOMP].get_Temp() > T + HYSTERESIS_BoilerTogetherHeatSt) {
                SETBIT1(flags, fHP_BoilerTogetherHeat);
                dRelay[RSUPERBOILER].set_ON();    // насос супербойлера - включить
                return pCOMP_OFF;
            } else if(sTemp[TCOMP].get_Temp() <= T + HYSTERESIS_BoilerTogetherHeatEn) {
                dRelay[RSUPERBOILER].set_OFF();   // насос супербойлера - выключить
                SETBIT0(flags, fHP_BoilerTogetherHeat);
            } else return pCOMP_OFF;
        }
    #endif
    Тут наблюдал как работает, пришла идея... Переделаю еще немножко. Но работа изменится кардинально.

    Управление насосом супербойлера перенесено из boolean HeatPump: configHP (MODE_HP conf)
    в void HeatPump: Pumps (boolean b, uint16_t d)
     
    Последнее редактирование: 17.05.20