Автозапуск инверторного генератора

Лучше брать на 0-10 бар, они распространены шире.

нашел 0-6 бар

2 лайка

Добрый день. Продаются датчики избыточного и дифференциального давления , какой выбирать для контрола давления в системе отопления?

Добрый.
Уместнее использовать датчик избыточного давления.

принял

Добрый день.
Был очень занят, только дошли руки до отладки алгоритма.
//три попытки запуска
for (var i = 0; i < 3; i++) {
//кратковременная команда на запуск генератора (1 секунда)
dev[“wb-mr6c_90”][“K3”] = true;
setTimeout(function() {dev[“wb-mr6c_90”][“K3”] = false;}, 1000);
//ждем 1 минуту, пока прогреется и проверяем, запустился или нет. если запустился, заканчиваем отработку цикла запуска
setTimeout(function() {if (dev[“wb-nap3ev_109”][“Urms1 L1”] <180) {SendTelegramMsg(‘Генератор запущен123.’)};}, 60000);
break;}
if (i=3) {SendTelegramMsg(‘Ошибка запуска. Превышено количество попыток.’)};
Не могу разобраться, почему не отрабатывает минутная задержка на прогрев. Моментально выходит “Ошибка запуска. Превышено количество попыток.” Что я делаю не так?

должно быть i == 3

добрый день.
Так и не смог победить алгоритм запуска генератора:
Код выполняется асинхронно, цикл отрабатывает мгновенно, и задержка на проверку запуска не отрабатывает. Пробовал выносить в отдельные функции. Что то никак ума не приложу, как правильно организовать.
Буду очень признателен за помощь.
Спасибо.

Добрый день. А почему цикл не должен отрабатывать сразу же? Тут немного непонятна желаемая логика.

Добрый день.
Для запуска генератора необходимо кратковременно на 2 секунды замкнуть реле wb-mr6c_90/k3. Отправляем сообщение в телеграм “Попытка запуска i”. Далее ждем 1 минуту, после чего если на wb-map3ev_109/Urms L1 напряжение больше 180 вольт, отправляем сообщение в телеграм “Генератор запущен”, и счетчику присваиваем значение 3, для выхода из цикла, иначе повторяем цикл.
По истечении попыток, проверяем напряжение на wb-map3ev_109/Urms L1, если меньше 180, отправляем сообщение в телеграм об ошибке запуска.
ниже набросал блоксхему…
Сейчас при подаче команды на запуск в телеграм мгновенно приходит сообщение об ошибке запуска и с задержкой приходит два одинаковых сообщения: Попытка запуска №3…
Выполнение команд асинхронное.
Буду признателен, если подскажете, что я делаю не так.
Спасибо.

Вы неправильно понимаете работу setTimeout. При вызове setTimeout выполнение скрипта не останавливается, он сразу переходит к выполнению следующей строки. А то, что внутри setTimeout

setTimeout(function () {
  вот это;
  и вот это;
  }, 10000); 

будет выполнено после временной задержки.
И в следующий раз не выкладывайте код картинкой - с кодом проще работать, когда он код.

2 лайка

фото выложил, потому что оно с подсветкой синтаксиса

“При вызове setTimeout выполнение скрипта не останавливается, он сразу переходит к выполнению следующей строки.” Вот я это уже понял, что быстро проходит три итерации, и после уже приходят сообщения о попытках запуска по таймауту. Как можно сделать, что бы цикл останавливался на проверку запустился генератор или нет, и только после проверки либо заходил на новую итерацию, либо при удачном пуске, завершал цикл?

//три попытки запуска
for (var i = 1; i < 3; i++) {
//кратковременная команда на запуск генератора (1 секунда)
dev[“wb-mr6c-v2_90”][“K3”] = true;
setTimeout(function() {return dev[“wb-mr6c-v2_90”][“K3”] = false;}, 1000);
//ждем 1 минуту, пока прогреется и проверяем, запустился или нет. если запустился, заканчиваем отработку цикла запуска
setTimeout(function() {if (dev[“wb-map3ev_109”][“Urms L1”] <180) {SendTelegramMsg('Попытка запуска № '+ i)}}, 10000);
if (dev[“wb-map3ev_109”][“Urms L1”] >180) {SendTelegramMsg(‘генератор запущен’); i=3};
}
if (dev[“wb-map3ev_109”][“Urms L1”] <180) {SendTelegramMsg(‘Ошибка запуска. Превышено количество попыток.’)};

Функция.
Например так:

//03_24_test_02.js

function tryStart(relayStarter, timeStarter, controlDev, controlV, timeForControl){
  dev[relayStarter] = true;
  setTimeout(function() {
    dev[relayStarter] = false;
    
    setTimeout(function() {
      SendTelegramMsg("Попытка запуска № "+ i)
      if (dev[controlDev] < controlV) {
        i++;
        if (i>3){
          SendTelegramMsg("Ошибка запуска. Превышено количество попыток.");
        }
        else{
          //рекурсивно запускаем
          tryStart(relayStarter, timeStarter, controlDev, controlV, timeForControl);
        }
      }
      else{
        SendTelegramMsg("генератор запущен");
        started = 1;
      }
    }, timeForControl);  
    
  }, timeStarter);  
}

//три попытки запуска
var i = 0;
var started = 0;

//команда на запуск генератора (1 секунда)
tryStart("wb-mr6c-v2_90/K3", 1000, "wb-map3ev_109/Urms L1", 180, 10000)

Хорошо, спасибо, буду пробовать.

все отлично работает, спасибо за поддержку

2 лайка

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.