Pump Station Framework для ПЛК ОВЕН 110-32м2 / Хабр

Привет, Хабр! Это мой первый опыт написания здесь, если что, уж сильно не пинайте). Сам я программист самоучка. Новый язык Structured Text и среду разработки Codesys разбирал по мануалу и стандарту МЭК-61131-3. В статье будет рассматриваться легкий самописный фреймворк для быстрой сборки насосной станции реализованной на ПЛК 110-32м2 фирмы ОВЕН.

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

Большую часть парка промышленного оборудования на предприятии фирмы ОВЕН (это различные датчики температуры и давления, ТРМы, блоки питания, ПЛК (110) аналоговые и дискретные модули ввода-вывода (110), сенсорные панели (СП307 и СП310), и сетевые шлюзы для доступа к сервису OwenCloud, частотные преобразователи(ПЧВ). Основной контроллер который мы используем — ПЛК 110-60 (для автоматизации котельных) и ПЛК 110-32 (для автоматизации ЦТП). Разработка программ для этих ПЛК происходит в Codesys 2.3. Поскольку Программистских академий мы не кончали, а курсов по промышленному программированию на языках МЭК никто отродясь не видывал, пришлось с нуля осваивать новую стезю. О первый мой рабочий код.. я буду плакать по тебе кровавыми слезами. Надеюсь сейчас мой код выглядит получше, чем тогда..

Случилось так что на ЦТП вышла из строя, по сроку годности, одна импортная насосная станция. И светлым умам нашего предприятия пришла идея собрать свою, на ПЛК. набросали хардкодингом-быдлокодингом одну программу.. Через полгода скачком напряжения убило насосную станцию на другом объекте.. Снова ПЛК и снова захардкодили программу. Местному руководству так понравилась идея собственной разработки насосной станции, что при ближайшей реконструкции объекта заменяла старую станцию — собственной разработкой ведь экономия средств то какая. Но конфигурация станций всегда разная: тут два насоса, там пять; на этом объекте надо чтобы насосы поочередно переключались, на следующем чтобы работали в каскадном режиме. Разные запросы были. И тут-то я созрел — нужен какой-нибудь фреймворк, чтобы можно было быстро собирать эти станции различной конфигурации.

Для работы нам понадобятся:

  1. Создаем новый проект. выбираем конфигурацию нашего ПЛК.

  1. Главная программа будет на языке CFC. Так наглядней и проще для тех кто не знаком с языками программирования.

По ТЗ у нас на ПЛК приходят сигналы:

Discrete inputs:

  1. Защита по сухому ходу (низкое давление на входе насоса).

  2. Защита по превышению давления на выходе насоса.

  3. Внешняя авария (авария частотного преобразователя).

  4. Статус частотного преобразователя «Работа» (RUN).

Discrete outputs:

  1. Запустить частотный преобразователь.

  2. Квитировать/сбросить аварию частотного преобразователя.

Импортируем в программу нашу виртуальную модель ПЛК, структуру для ее работы и методы.

Сложим наши свежие импорты в папочку чтоб не растерять. Структуры необходимые для работы блока ПЛК110Вид ПЛК110-32 на языке CFC

Теперь к этому блоку мы можем как на электрической схеме подключить наши сигналы к дискретным входам. Допустим у нас станция будет из трех насосов. Подключаем наши сигналы виртуальными проводочками. Для работы с входами ПЛК мы их упаковываем в inputs_plc имеющей тип данных classPLC32m2StatusInputs

inputs_plc присваиваем соответствующую структуры данных.

Для работы с этими данными у нас имеются методы: get_fdi и get_di

get_fdi(number_fdi: int, inputs_plc: classPLC32m2StatusInputs) -> bool;
get_di(input_number: int, inputs_plc: classPLC32m2StatusInputs) -> bool;

Подключим наши выходные сигналы к выходам. Для управления выходами добавляем вспомогательный блок get_status_outputs, он принимает на соответсвующий вход булевое состояние и упаковывает все в тип данных classPLC32m2StatusOutputs, с которым работает блок main_plc.

К входам блока outputs мы будем подключать непосредственно результат логики работы нашего контроллера.

Эти блоки для работы с ПЛК110-32 универсальны и могут использоваться в любых других проектах под этот контроллер. Визуально все в одном месте и при онлайн отладке удобно наблюдать за состоянием входов-выходов ПЛК.

Для получения давления на входе и выходе насоса используются датчики 4-20мА. Сигнал в контроллер приходит через модуль аналоговых входов МВ110-8а. Импортируем модель этого модуля в проект.

В PLC_PRG добавляем наш блок аналоговых входов. analog_inputs упаковываются в соответствующий класс classInfoAnalogInputModule

Для работы необходим вспомогательный блок с настройками SetChannelsAnalogInputsModule. Этот блок содержит конфигурацию входов модуля. По умолчанию настройки всех каналов (0-100, 4-20мА).

Конфигурация регистров:

Не забываем проставить адреса регистров которые мы будем считывать (см инструкцию Приложение В, таблица В. 4 — регистры протокола modbus.

Сконфигурировав канал аналогово модуля можем импортировать блок для датчика 4-20мА.

Метод get_channel_current_value(number_channel: int, analog_inputs: classInfoAnalogInputModule) позволяет получить значение с АЦП соответствующего канала.

И собрав нехитрую конструкцию, получить информацию о давлении которое приходит на датчик.

Блок с параметрами датчика нужен для соответствующего масштабирования согласно параметрам реального датчика.

Насосом у нас управляет частотный преобразователь. Импортируем содержимое папки invertor_drive.

Функциональный блок частотника и его методы.

Добавляем блок в проект, подключаем данные со входов ПЛК, используя метод get_di. ain_value (float) — это аналоговый вход частотника, подключаем туда наше давление, которое мы собираемся контролировать. set_point (float) — это уставка по давлению.

start_id (bool) — сигнал на старт частотного преобразователя; auto_id (bool) — когда True, то работает ПИД-регулятор, когда False — режим manual; manual_hz — значение выходной частоты в режиме manual (Hz) ;active_id (bool) — флаг готовности к работе насоса; alarm_on (bool) — это флаг аварийного состояния, когда он активен, частотник не стартует. P, I, D — это коэффициенты регулятора, по умолчанию (2, 10, 0). min, max _range — это нижний и верхние пределы значения на выходе регулятора. aout_value — сюда мы подключим частоту на выходе регулятора и она на выходе автоматически масштабируется в значение тока 4-20мА.

Для регулятора импортируем блок распаковки настроек регулятора.

PID регулятор возьмем из библиотеки Util.lib которая идет в комплекте с Codesys (через менеджер библиотек добавляем в проект).

Частотник готов к работе и теперь им можно управлять.

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

Реализация модуля аналогового вывода.

Для работы насосной станции предусмотрены 3 режима. Single — одиночный режим работы, когда выбираем насос и он всегда работает; Cycle — режим циклического переключения насосов. Задаем время переключения и активные насосы по очереди работают. Cascade — режим каскадного включения насосов, при недостатке давления на выходе. Чтобы насос участвовал в работе его флаг active должен быть True

Блоки режимов работы станции.

Каждый блок может управлять до 8-ми насосов. Притом для цикла и каскада необходимо более 2х активных насосов.

Рулит этими режимами — селектор.

В селекторе предусмотрен режим обработки ошибок, например таких как: не выбран режим работы или не задан опорный насос и пр.

Обработкой всех ошибок занимается alarm_manager. Для аварий частотного преобразователя сделан свой блок. Сюда собираются все аварийные флаги и в случае нештатной ситуации генерируется код аварии и сообщение.

Менеджер возвращает нам флаг аварии, код аварии и расшифровку в виде информационного сообщения.

Не забываем вывести наши выходные сигналы на выходы ПЛК.

Конфигурируем выходы ПЛК.

Можно запустить эмуляцию и проверить как работают режимы.

Для работы функциональных блоков в фреймворке реализованы functions project. Простенькие функции для работы с массивами, функция масштабирования диапазона и функция для задания времени.

Общие функции фреймворка.

Вот в принципе и всё. Я надеюсь что основная мысль понятна. С помощью фреймворка для контроллера буквально за 15-20 минут можно реализовать программу для нескольких групп насосов работающих независимо друг от друга. Останется дело за малым, сконфигурировать вывод параметров на HMI. Но об этом в следующий раз.

Код проекта с примером

Концевые (механические) выключатели серии TZ-8

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

  • Коммутация 2-х цепей
  • Высокая прочность конструкции
  • Встроенный переключатель с двойным пружинным механизмом
  • Серия с клеммой заземления
  • Легкое подключение проводов
  • Металлический ролик
  • Пыле- и влагозащищенное исполнение (IP65)

 

 

Каталог на концевые выключатели (PDF)

Типы выключателей

МодельПереключающий механизмКонтактная группа
TZ-8104рычаг с роликом поворотный 
TZ-8108регулируемый рычаг с роликом поворотный
TZ-8107шток регулируемый поворотный
TZ-8111кнопка нажимная
TZ-8112шток с горизонтальным роликом нажимной
TZ-8122шток с вертикальным роликом нажимной
TZ-8166шток пружинный с диэлектриком на отклонение
TZ-8167шток пружинный на отклонение
TZ-8169шток пружинный с утоньшением на отклонение

Электрические характеристики

НапряжениеНеиндуктивнаяИндуктивная
резисторлампакатушкамотор
НЗНРНЗНРНЗНРНЗНР
250 V AC51. 50.7321.0
500 V AC510.531.51.8
15 V DC5343
30 V DC5343
125 V DC0.4

Технические характеристики

Скорость срабатывания0.05…50 см/сек
Частота срабатываниямеханическая: 120 переключений/мин
электрическая: 30 переключений/мин
Контактная группаН.О. + Н.З.
Сопротивление контактов< 15 мОм
Сопротивление изоляции100 МОм (500 В AC)
Диэлектрическая прочность~1000 В AC в теч. минуты контакт-контакт
Износоустойчивостьмеханическая: >10^7 циклов
электрическая: >10^5 циклов
ВибропрочностьБез разрушений: 10…55 Гц, ампл. = 1.5мм, по осям
Ударопрочностьмеханическая: 100g
без сбоев: 30g
КорпусМеталл с пластиковой крышкой
Рабочая температура-5…+65 °C
Влажность< 95%
Масса120…190 г
Степень защитыIP65

Рабочие характеристики

МодельTZ-8104, TZ-8107,
TZ-8108
TZ-8111TZ-8112,
TZ-8122
TZ-8166, TZ-8167,
TZ-8168, TZ-8169
Макс. усилие срабатывания, г750900150
Макс. усилие отпускания, г100150
Рабочий ход, мм20°1.5 мм30 мм
Общий ход, мм50°4 мм
Отклонение хода, мм12°1 мм
26±0. 8 мм37±0.8 мм

Внешний вид и габаритные размеры

TZ-8104 рычаг с роликом поворотный
TZ-8107 шток регулируемый поворотныйTZ-8108 регулируемый рычаг с роликом поворотный  TZ-8111 кнопка нажимная
    
 TZ-8112 шток с горизонтальным роликом нажимной
 TZ-8122 шток с вертикальным роликом нажимной TZ-8166 шток пружинный с диэлектриком на отклонение TZ-8167 шток пружинный на отклонение
    
 TZ-8169 шток пружинный с утоньшением на отклонение
 

Брандмауэры SonicWall TZ | Приобрести технологию брандмауэра нового поколения

Просмотрите таблицу ниже или нажмите на название продукта, чтобы получить дополнительную информацию
ТЗ270 ТЗ300 ТЗ350 ТЗ370 ТЗ400 ТЗ470 Операционная система СоникОС СоникОС СоникОС СоникОС СоникОС СоникОС Интерфейсы 8x1GbE, 2 порта USB 3. 0, 1 консоль 5x1GbE, 1 USB, 1 консоль 5x1GbE, 1 USB, 1 консоль 8x1GbE, 2 порта USB 3.0, 1 консоль 7x1GbE, 1 USB, 1 консоль 8x1GbE, 2×2,5GbE, 2 порта USB 3.0, 1 консоль Поддержка PoE TZ300P — 2 порта Н/Д Н/Д Н/Д Н/Д Н/Д Пользователи SSO 1000 500 500 1000 500 2 500 Интерфейсы VLAN 64 25 25 128 50 128 Максимальное количество точек доступа 16 8 8 16 16 32 Межсетевой экран Thruput 2 Гбит/с 750 Мбит/с 1 Гбит/с 3 Гбит/с 1,3 Гбит/с 3,5 Гбит/с Предотвращение угроз Thruput 750 Мбит/с 235 Мбит/с 335 Мбит/с 1 Гбит/с 600 Мбит/с 1,5 Гбит/с Инспекция приложений Thruput 1 Гбит/с 375 Мбит/с 600 Мбит/с 1,5 Гбит/с 1,2 Гбит/с 2 Гбит/с IPS Thruput 1 Гбит/с 300 Мбит/с 400 Мбит/с 1,5 Гбит/с 900 Мбит/с 2 Гбит/с Защита от вредоносных программ Thruput 750 Мбит/с 235 Мбит/с 335 Мбит/с 1 Гбит/с 600 Мбит/с 1,5 Гбит/с Точек на дюйм SSL Thruput 300 Мбит/с 60 Мбит/с 65 Мбит/с 500 Мбит/с 180 Мбит/с 600 Мбит/с IPSec VPN Thruput 750 Мбит/с 300 Мбит/с 430 Мбит/с 1,3 Гбит/с 900 Мбит/с 1,5 Гбит/с Максимальное количество соединений (SPI) 750 000 100 000 100 000 900 000 150 000 1 000 000 Максимальное число подключений (DPI) 150 000 90 000 90 000 200 000 125 000 250 000 Максимальное количество подключений (DPI SSL) 25 000 25 000 25 000 30 000 25 000 35 000 Новых подключений в секунду 6000 5000 6000 9000 6000 12 000 VPN-туннели Site-to-Site 50 10 15 100 20 150 Максимальное количество клиентов IPSec VPN 5 (200) 1 (10) 1 (10) 5 (200) 2 (25) 5 (200) Максимальное количество лицензий SSL VPN 1 (50) 1 (50) 1 (75) 2 (100) 2 (100) 2 (150) Форм-фактор Рабочий стол Рабочий стол Рабочий стол Рабочий стол Рабочий стол Рабочий стол Блок питания 36 Вт Внешний 24 Вт Внешний 65 Вт — TZ300P 24 Вт Внешний 36 Вт Внешний 24 Вт Внешний 36 Вт Внешний

Сцепление Саут-Бенд — SBCK05074-TZ | Сцепление South Bend 94-01 Dodge Ram 1500 3.

9L / 94-99 Dodge Dakota 5.2L Stg 2 Ежедневный комплект сцепления — K05074-TZ

нажмите, чтобы увеличить