Ранее я уже чуть-чуть коснулся этого проекта. Состав автоматики : панель shneider, контроллер haiwell, 6 частотников, датчики...
Задача стояла следующая: управлять шестью насосами с частотными приводами по общему датчику давления. Связь между устройствами по RS485, протокол модбас. При этом еще должна была быть ротация насосов по времени. Вкратце так.
Изначально я думал реализовать все функции в ПЛК, а тачпанель для отображения, но потом пересмотрел эту концепцию из-за не особой дружелюбности IDE хайвела, при этом контроллер решил оставить мастером в сети.
Функции в ПЛК:
- Связь со всеми устройствами
- Контроль работы насосов
- масштабирование датчиков
- ПИД регулятор
Функции в панели:
- редактирование и хранение уставок
- человеко-машинный интерфейс
- ротация насосов
- распределение нагрузки по насосам.
- В ТЗ было указано: что 4 насоса в работе (ротации), 2 резервных (включаются, если рабочих не хватает).
Режимы работы насосов:
- выкл. (выведен из работы)
- ручной пуск (всегда работает, с постоянной скоростью)
- автоматический (ротация + ПИД)
Для ручного режима есть уставка "скорость", с которой он будет работать в ручном запуске.
Подзабыл немного, сейчас буду вспоминать. Для начала откроем проект в хайвеле:
Структура программы в ПЛК
Сейчас у меня нет цели подробно описывать работу в средах программирования для панели и хайвела. Цель - описать структуру, чтоб мог сам вспомнить месяцев через 6, что же я здесь натворил.
Красным выделены блоки чтения значений режимов насосов с панели. Изначально, была задумка из панели получать число 0-4, и обрабатывать его в контроллере, но в итоге трансформировалось в решение, обрабатывать режимы в панели (легче сделать ротацию и включение резервов в скриптах в панели). Из панели получаю 0 - выкл, 1 -вкл.
Здесь еще отправка температуры в панель. Статусов насосов (число из двух битов (0- если текущая частота ПЧ больше 0, 1 - насос в аварии (сформированной контроллером) ). По моему в панели не использую (уже не помню :) )
Аварии формируются следующим образом. Если есть команда на запуск ПЧ, и в течении контрольного времени мы видим скорость "0", то фомируем аварию "нет запуска ПЧ". Подразумевалось, что будут прессостаты на насосах, но их нет.
Теперь посмотрим subprogramms
Не получилось сделать одну функцию для всех насосов, пришлось тупо скопипастить для каждого. Здесь версия с использованием внутреннего тактового генератора (на сименсе сработал такой подход, здесь считает один счетчик и все)
Систему имен в ПЛК использовал следующую:
V1 - режим первого насоса, V2 - второго ...
V11 - контрольное время для первого, V12 - для второго ...
V31 - частота из ПЧ1, V32 - частота из ПЧ2 ...
V41 - статус насоса 1, V42 - статус насоса 2 ...
т.е. номер переменной заканчивается на номер насоса.
Проект делал с большими перерывами, поэтому может чехарда с переменными, но проект работает.
Вкратце так. Осталась тачпанель.