Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: Алгоритм поддержания уровня количеством включённых насосов

  1. #1

    По умолчанию Алгоритм поддержания уровня количеством включённых насосов

    Доброго дня

    Передо мной стоит задача управления несколькими насосами для поддержания уровня в резервуаре.
    Уровень измеряется аналоговым датчиком.
    Расход из резервуара может меняться в широких пределах.
    Приток в резервуар регулируется количеством одновременно работающих насосов.
    Насосы включаются контакторами (не ПЧВ и не мягкими пускателями).

    Для регулирования уровня хочу выбрать аналоговый ПИД с разделением всего диапазона на участки, соответствующие количеству включённых насосов.
    Например, 4 насоса, 4 участка (0-25, 25-50, 50-75, 75-100) - выход 1% и включить 1 насос, выход 76% включить 4 насоса. Но тут, мне кажется, прячется неравномерность на краях всего диапазона - для включения одного насоса достаточно немного увеличить выход (чуть больше 0%), а чтобы выключить 4-й насос и оставить в работе 3 насоса нужно снижать от 100% до 75%.
    Или же лучше использовать позиционно-независимый, хотя и отдалённо похожий интегральный критерий (как в котловом каскаде КТР-121)?

    Поэтому у меня два вопроса?
    1. какой алгоритм управления количеством лучше выбрать? Если ПИД, то как лучше разбить участки для адекватной работы на краях диапазона? Или интегральный критерий?
    2. каким алгоритмом предотвратить одновременное включение и выключение нескольких насосов - как организовать приоритет?

    Достаточно описать алгоритмы, реализовать смогу самостоятельно. И хотелось бы получить советы на основе опыта реализаций.

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,618

    По умолчанию

    Методом наименьших квадратов вычислять какой уровень будет через н-ый промежуток времени и исходить из этого, если достигнет уровня для подключения/выключения ещё одного насоса то готовится к включению/выключению, если нет то оставаться при своих, через тот же н-й промежуток времени проверять ещё раз и так по циклу
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3

    По умолчанию

    Зачем мудрить. Сделай двухпозиционый регулятор с широким гестирезисом. Врубай сразу все насосы. Износ у всех будет одинаковый.
    Последний раз редактировалось IVM; Сегодня в 10:59.

  4. #4
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,081

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Если ПИД, то как лучше разбить участки для адекватной работы на краях диапазона? Или интегральный критерий?
    2. каким алгоритмом предотвратить одновременное включение и выключение нескольких насосов - как организовать приоритет?
    .
    Код:
    var input
         нельзя1,
         нельзя2,
         нельзя3,
         нельзя4: bool; //например авария
         ПИД_выход: real;  //0.0..1.0, снаружи определяется пид. И он не знает для чего. Да и не нужно ему
      end_var
    
      var output
         пашет1,
         пашет2,
         пашет3,
         пашет4: bool;
      end_var
    
      var
        нельзя,
        пашет,
        пахал: array[1..4] of bool;
        скока: array[1..4] of udint;
        i: udint;
        сейчас_пашет: udint;
        нужно_пахателей: udint;
        гонишь: tof;
        дольше_всех: udint;
        нашелся: udint;
    -----------
    нельзя[1] := нельзя1;
    нельзя[2] := нельзя2;
    нельзя[3] := нельзя3;
    нельзя[4] := нельзя4;
    
    for i := 1 to 4 do
      пашет[i] := not нельзя[i] and пашет[i];
      скока[i] := скока[i] + 1;
      if пашет[i] <> пахал[i] then
         пахал[i] := пашет[i];
         скока[i] := 0;
      end_if
    end_for
    
    сейчас_пашет := 
      bool_to_udint(пашет[1]) +
      bool_to_udint(пашет[2]) +
      bool_to_udint(пашет[3]) +
      bool_to_udint(пашет[4]);
    
    case real_to_udint(ПИД_выход * 100.0) of
    //например
      0..5:	   нужно_пахателей := 0;
      10..20:  нужно_пахателей := 1;
      30..45:  нужно_пахателей := 2;
      55..70:  нужно_пахателей := 3;
      80..100: нужно_пахателей := 4;
    end_case
    //А есля пид на стартя войдет с 73? - да пофиг. "И" есть
    
    нашелся := 0;
    if not гонишь.Q and сейчас_пашет <> нужно_пахателей then
      дольше_всех := 0;
      for i := 1 to 4 do
        if сейчас_пашет > нужно_пахателей and пашет[i] and скока[i] >= дольше_всех then
           нашелся := i;
           дольше_всех := скока[i];  
        elsif сейчас_пашет < нужно_пахателей and not пашет[i] and not нельзя[i] and скока[i] >= дольше_всех then
           нашелся := i;
           дольше_всех := скока[i];  
        end_if
      end_for
      if нашелся <> 0 then
        пашет[нашелся] := сейчас_пашет < нужно_пахателей;
      end_if
    end_if
    гонишь(in := нашелся <> 0, pt := ...);
    
    пашет1 := пашет[1];
    пашет2 := пашет[2];
    пашет3 := пашет[3];
    пашет4 := пашет[4];
    Для простого масштабирования
    В битовые маски можно, но смысла не вижу. Да и логические для целочисленных не завезли
    При массивах из фб - изящнее. Не завезли.
    Последний раз редактировалось Валенок; Сегодня в 12:28.

  5. #5

    По умолчанию

    Можно и ПИД с интегрированием - опробовано уже.
    Только не приоритет, а раздельный старт с интервалом. Т.к. выходная может прыгать 75% <-> 76% (пересекать границу несколько раз).
    Два циклических счётчика до числа насосов.
    - кандидат на запуск (после запуска +1), если надо больше, чем работает
    - кандидат на останов (после останова +1), если надо меньше, чем работает
    т.е. FIFO-стек из насосов
    если будет нужна ротация, через интервал, то следующий на запуск - пуск, следующий на останов - стоп и работаем дальше

  6. #6

    По умолчанию

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


    Я наверное, разделю функционал на несколько ФБ:
    - каскад (количество)
    - приоритет включения - выключения насоса по критерию (общей наработке или продолжительности простоя или придумает заказчик)
    - предотвращение одновременной коммутации нескольких насосов

    Но основную идею из кода увидел - спасибо. Соответствие диапазона требуемой мощности количеству требуемых насосов. Да и по паузам и по критерию - тоже (однопроходный алгоритм выбора по заданному критерию - без сортировки)

  7. #7

    По умолчанию

    Не нужен тут ПИД, ротация 4 насосов и включение по уровню давно выложены тут, последний вариант.
    https://owen.ru/forum/showthread.php?t=38920&page=2#13

  8. #8

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Можно и ПИД с интегрированием - опробовано уже.
    Только не приоритет, а раздельный старт с интервалом. Т.к. выходная может прыгать 75% <-> 76% (пересекать границу несколько раз).
    Два циклических счётчика до числа насосов.
    - кандидат на запуск (после запуска +1), если надо больше, чем работает
    - кандидат на останов (после останова +1), если надо меньше, чем работает
    т.е. FIFO-стек из насосов
    если будет нужна ротация, через интервал, то следующий на запуск - пуск, следующий на останов - стоп и работаем дальше
    Заказчик уточнил по ротации - ни в коем случае, т.к. это чем-то плохо для системы или насосов - я не понял, но принял к исполнению.
    Но, заказчик согласился, что можно выполнять ротацию в ходе работы - добавлять наименее работавший, отключать наиболее проработавший (пока критерий такой - может быть позже поменяет, и буду исправлять).

    Спасибо - о колебаниях не подумал.
    Тогда, раз возможны колебания выхода ПИД на границе переключения, то склоняюсь к отказу от ПИД и выбору интегрального критерия - он воздействует на изменение количества всего на 1 насос.
    А там в составе критерия для КТР есть и время стабилизации, и разные значения критерия для +1 и для -1 и всякие другие параметры.

  9. #9
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,081

    По умолчанию

    раз возможны колебания выхода ПИД на границе переключения,
    Учтено. Если внимательно смотрели

  10. #10
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,081

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Не нужен тут ПИД,..
    Извините, но и ПИД'ом можно сделать. И чем угодно.
    Вопрос был
    Цитата Сообщение от FPavel Посмотреть сообщение
    ... хочу выбрать аналоговый ПИД ...Если ПИД, ..

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Алгоритм работы 3-х насосов на ST
    от K.K. в разделе СПК210, СПК1xx [М01]
    Ответов: 17
    Последнее сообщение: 06.12.2024, 09:46
  2. Ответов: 22
    Последнее сообщение: 29.11.2020, 16:23
  3. Алгоритм поддержания температуры на выходе
    от IloNA в разделе Помощь Разработчикам
    Ответов: 13
    Последнее сообщение: 15.12.2016, 18:58
  4. Система поддержания уровня воды
    от Lexey-ru в разделе Трёп (Курилка)
    Ответов: 34
    Последнее сообщение: 09.06.2014, 21:02
  5. контроллер для поддержания уровня давления в контуре гвс
    от san822 в разделе Подбор Оборудования
    Ответов: 9
    Последнее сообщение: 26.10.2009, 13:02

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •