Меню

Ротация насосов в codesys

Ротация насосов в codesys

Блок не содержит энергонезависимых переменных (т.е. сам не является энергонезависимым), поэтому переключение между насосами происходит не по наименьшей наработке, а просто через равные промежутки времени.
Блок подходит для управления как тремя, так и двумя насосами, а также максимально просто расширяется до любого необходимого числа насосов, т.к. сам алгоритм переключения привязан не к конкретному числу, а к переменной N.
При возникновении аварии насос блокируется до принудительного сброса аварии.

Входы:
EN (BOOL) — запуск управлением насосами. По умолчанию = TRUE.
SW (BOOL) — принудительное переключение на следующий насос. Происходит по фронту сигнала.
PT (TIME) — период переключения насосов.
ET0 (TIME) — начальное время счета таймера. Необходимо для реализации энергонезависимого таймера.
MAIN (BYTE) — номер запускаемого после включения ПЛК насоса. По умолчанию = 1. Также может служить для энергонезависимой работы.
ALx (BOOL) — аварийный сигнал с насоса №x. Стоит таймер с задержкой активации в 0,5 секунды.
RSx (BOOL) — сигнал сброса аварии с насоса № x .

Выходы:
Px (BOOL) — запуск насоса №x.
ERRx (BOOL) — насос №x в аварийном состоянии. Либо имеется текущая авария, либо не сброшена старая.
CUR (BYTE) — номер текущего работающего насоса. Может использоваться для организации энергонезависимой работы.
ET (TIME) — отсчитанное на текущий момент таймером время.

Применения: энергонезависимая работа
Всё необходимое для такой работы реализовано в алгоритме. Для работы необходимо лишь задать пару RETAIN-переменных, либо в программе, где объявлен функциональный блок «PUMPS» (например в PLC_PRG), либо в области глобальных переменных, либо даже в области конфигурации Modbus (Slave). Это переменные i (номер текущего насоса) и et0 (время отсчитанное таймером):

Их необходимо привязать ко входам MAIN и ET0, и выходам CUR и ET соответственно (см. скриншот в начале поста). Таким образом, во время работы блока каждый цикл в наши энергонезависимые переменные будут записываться актуальные значения, и они сохраняться даже после пропадания питания. А в момент подачи питания в самом первом цикле они будут считаны функциональным блоком и работа возобновиться с работающего на момент сброса питания насоса и таймер будет считать с того же места, на котором остановился.

Применения: два насоса
Для работы только с двумя насосами необходимо просто-напросто оставить вход AL3 пустым. Функциональный блок при этом будет «думать», что третий насос находится всё время в аварии.

Заключение и исходный код
Также, если в работе останется только один насос (два других в аварии), то таймер прекратит отсчет и сбросится, но автоматически начнет отсчет после сброса аварии одного из насосов. Если нужно будет запустить выведенный из аварии насос — подайте TRUE на вход switch.

Исходный код функционального блока написан на ST, довольно прост и занимает меньше 30 строк. В программе для автоматизированных тепловых пунктов используются гораздо более сложные алгоритмы, в частности с управлением частотными преобразователями по интерфейсу RS-485.

Источник статьи: http://asutp-volgograd.com/blog/pumps-codesys.html

Ротация насосов в codesys

Для двух насосов. При EN идет сравнение по времени наработки.

FUNCTION_BLOCK kaskad_nasos
VAR_INPUT
EN: BOOL; //Разрешение работы
_dt: BOOL; //Датчик перепада насосной группы
n1_auto: BOOL; //Насос 1 в автомате
n2_auto: BOOL; //Насос 2 в автомате
END_VAR
VAR_OUTPUT
n1: BOOL; //Насос 1
n2: BOOL; //Насос 2
alarm_n1: BOOL; //Авария насоса 1
alarm_n2: BOOL; //Авария насоса 2
END_VAR
VAR
p: BYTE;
n: BYTE;
ton1: TON;
ton2: TON;
blink1: BLINK;
t11: TON;
t12: TON;
rt: R_TRIG;
END_VAR
VAR_IN_OUT
t1: DWORD; //Время наработки насоса 1 в часах
t2: DWORD; //Время наработки насоса 2 в часах
END_VAR

Читайте также:  Циркуляционный насос intmtsl premium 1

Тоже интересует этот вопрос, не в плане как это сделать, а стоит ли это делать(переключение по времени наработки)? Сейчас три глубинных насоса переключаются ежемесячно в такой последовательности: основной — дополнительный(включается если основной не справляется и уровень падает — резервный(включается при аварии или выключении основного или дополнительного насосов)!Имеются счётчики времени наработки по насосам, но пока только для информации, стоит ли сделать переключение по времени наработки(при подаче команды на запуск насоса, выбирался насос с наименьшей наработкой).

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

А как на реле вы решаете такие вопросы как выход из строя насоса, который в данный момент должен качать воду?

Добавлю. Или один насос в ремонте.

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

Источник статьи: http://owen.ru/forum/archive/index.php/t-22235.html

Форум АСУТП

Клуб специалистов в области промышленной автоматизации

  • Обязательно представиться на русском языке кириллицей (заполнить поле «Имя»).
  • Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже предостаточно — придумайте что-то пооригинальнее.
  • Не писать свой вопрос в первую попавшуюся тему — вместо этого создать новую тему.
  • За поиск и предложение пиратского ПО — бан без предупреждения.
  • Рекламу и частные объявления «куплю/продам/есть халтура» мы не размещаем ни на каких условиях.
  • Перед тем как что-то написать — читать здесь и здесь.

Подсчет времени наработки двигателей в Codesys 2.х

Подсчет времени наработки двигателей в Codesys 2.х

Сообщение fotonboxx » 26 авг 2014, 22:41

Делаю шкаф управления насосами, в шкафу их два, нужно реализовать автоматическое переключение по времени наработки.

Хотелось бы сделать так — некий функциональный блок каждую минуту работы насоса инкрементирует глобальную переменную, по достижении уставки дается команда на смену насосов.

Вопрос в следующем — если я такой ФБ добавлю в основной поток, то и цикл у меня будет длиться минуту, что неприемлемо.

Как это сделать через tasks или events (но при этом передать событие в основной поток, чтобы не дублировать логику)?

Re: Подсчет времени наработки двигателей в Codesys 2.х

Сообщение service » 27 авг 2014, 09:57

T1_WORK := T1_WORK + BOOL_TO_DWORD(tm1.Q AND T1_Q);

tm1: TON — общий циклический таймер для всех устройств.
T1_Q: BOOL — выход плк, запускающий устройство.
T1_WORK: DWORD — наработка в минутах — retain
В скаде делитcя на 60 получается наработка в часах

Источник статьи: http://asutpforum.ru/viewtopic.php?t=5434

Тема: Макрос ротации насосов 2 шт. с контролем наработки

Опции темы
Отображение

Макрос ротации насосов 2 шт.

Добрый день уважаемые форумчане! открываю эту тему по причине того, что на форуме творится полный бардак, никто не подписывает темы по их содержанию, а старые файлы удаляются. потому хорошие и нужные макросы пропадают в пучине сотен страниц общих тем.

Перейдем к ТЗ, которое, по моему опыту работы с ДВУМЯ насосами, устроит всех:

Читайте также:  Циркуляционный насос паз вектор

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

УДАЛЯЕМ по корректному замечанию Сергей0308 ! 2. при ротации насосов контролировать время их наработки и оставлять в работе насос с меньшим временем наработки (при одинаковом времени наработки ротацию производить!, может быть внести переменную допустимого различия во времени наработки, чтобы не получилось залипания или удвоения времени ротации)
3. времена наработки насосов выводить в отдельные переменные

4. время, оставшееся до ротации выводить в отдельную переменную (как вычитание часовых импульсов из уставки)
5. отсчет времени ротации начинать с момента запуска насосов в автоматический режим.
6. контроль насосов осуществлять через дискретные входы.
7. контроль противоположного состояния насоса, относительно программной команды, что тоже должно расцениваться как авария этого насоса. уставка контроля этого параметра должна на 10-15 сек. превышать время, указанное в п.17, а при невозможности его реализации иметь отдельную входную переменную, симметричную по времени для включения и выключения насоса.
8. предусмотреть входной сигнал приостановки работы системы ( на этот вход можно завести реле низкого давления в разборном коллекторе для приостановки работы насосов без аварии и восстановлении работы после восстановления давления.)
9. предусмотреть выходы из макроса — общая авария (при аварийной остановке двух насосов) и отдельно аварии каждого из насосов.
10. предусмотреть выход из макроса — предупреждение, в случае выхода одного из насосов из строя (выход одного из насосов это не совсем авария, и ее можно объединить для всех групп насосов в котельной, поскольку при дистанционном мониторинге остановка двух насосов контура , например отопления зимой, это уже ЧП, а выход только одного из них просто требует выезда обслуживающего персонала в рабочее время а не в 3 часа ночи 2 января). прошу сделать этот выход отдельным, внеся функционал элемента ИЛИ внутрь макроса исключительно для удобства организации пространства вокруг макроса. каждый сам выберет, какие выходы ему задействовать.
11. предусмотреть входную переменную, задающую задержку запуска насосов в секундах, с контролем неподключенной переменной, на случай, если эта функция не нужна(удобно, если 1 контроллер управляет несколькими группами насосов, то можно разнести их запуск во времени (в основном это необходимо при кратковременном отключении электроэнергии, чтобы при восстановлении питания не «выбить» вводной автомат. чаще всего отключение и включение питания происходит в отсутствии персонала, поэтому вручную разнести во времени пуск всех насосов должен макрос. почему нельзя перед макросом просто воткнуть таймер задержки на включение автоматического режима? да, можно, но внести просто переменную в макрос гораздо удобнее и нагляднее, а этот функционал реализовать внутри макроса)
12. предусмотреть непрерывную работу насоса, если после ротации он остается в работе ( по наработке , или в случае, если в момент запроса ротации второй насос находится в аварии.)
13. продолжать считать время наработки насосов по сигналу работы на соответствующих дискретных входах даже в «неавтоматическом режиме»
14. предусмотреть входы для сброса текущих аварий и времени наработки насосов.
15. аварии насосов сделать энергонезависимыми, чтобы при отключении и возобновлении электропитания аварии остались активными.
16. для входов контроля работы насосов предусмотреть отдельную переменную, устанавливающую время задержки по входу до активации аварии насосов.
17. хотелось бы иметь нужна возможность устанавливать паузу/задержку_удержания между при переключении насосов в секундах (переменная, принимающая и положительные и отрицательные числа: если эта переменная будет принимать отрицательное значение, то удерживать текущий в работе после запуска второго, а если положительное, то делать паузу между ними.) но тут возникает вопрос, возможно ли тогда организовать п.12, и если это технически невозможно или займет очень много памяти, то лучше ее не реализовывать вообще, а кому нужно, то они просто поставят на выходе макроса или задержку отключения или задержку включения и внесут требуемую уставку в п.7

Читайте также:  Замена топливного насоса джили эмгранд х7

18. нужна возможность переключения режима контроля работы насосов по одному датчику, либо по 2 независимым.

пока писал ТЗ. я подумал, что по причине предположительно сложной организации переключения режима контроля насосов раздельно или по 1 общему датчику, то убрал пункт об этом и решил то проще, наверное сделать просто 2 идентичных макроса, но один с функцией независимого контроля а второй просто с контролем по одному датчику и без п.7, п.13, п.17
После замечания о нецелесообразности контроля времени наработки 2 насосов повторно вношу предложение о возможности настройки выбора способа контроля насосов по двум независимым датчикам для каждого и по одному (в случае контроля насосов по перепаду давления.

UPDATES!
Обновление до версии 1.3 макроса (15.03.2020):
Добавлена функция выбора, какой насос запускать после снятия и повторной подачи сигнала «Запуск».
В макросе версии 1.1 после отключения и повторного включения сигнала «Запуск» происходил старт насоса, который работал на момент снятия сигнала «Запуск».
Это оказалось неудобно, если данный макрос управляет, например насосами подпитки. в версии 1.3 появился дополнительный вход «everCicleNext», при активации которого после каждого перезапуска сигнала «Запуск» запускает другой насос. если вход «everCicleNext» отключен, то всегда стартует 1-й насос.
я не удаляю первую версию макроса, поскольку, может кому-то понадобится изначальный вариант работы.

Обновление до версии 1.5 макроса (13.04.2021):
Уточнение по входам обратной связи от насосов: Входы обратной связи являются входами подтверждения работы насосов, причем контролируется как появление сигнала на этом входе при работе насоса, так и его отсутствие, если насос остановлен.
В связи с этим входы макроса переименованы и поправлены комментарии в них.

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

Выкладываю итоговый вариант макроса. в архиве файл макроса в формате ОЛ_13 и краткое описание. как и обещал дублирую на Ядиск, так же по просьбам трудящихся добавил макрос, вставленный на поляну в версии ОЛ 1.20.272
Итоговый макрос V1.1 на Ядиске макрос на Ядиск и в тему перезалит 03.07.2019 в связи с исправлением недоработок
макрос V1.3 на Ядиске
Итоговый макрос V1.5 на Ядиске
Итоговый макрос V1.5 вставленный в проект ОЛ 1.20.272 на Ядиске

Последний раз редактировалось bayk; 05.08.2021 в 21:02 . Причина: внесение изменений

Источник статьи: http://owen.ru/forum/showthread.php?t=30327

Adblock
detector