Программная среда CoDeSyS 3.5
9 постов
9 постов
7 постов
5 постов
2 поста
3 поста
3 поста
2 года назад заказчик дал задание на автоматизацию постов налива бензина. На каждый пост своё управление. Затем все собираем в кучу в SCADA систему. К сожалению проект пришлось заморозить, так как требовалось кучу разрешительной документации. Сама программа работала «на столе». На реальном объекте испытать не удалось. Пишу статью, может для кого-то пригодятся «Фичи» в CoDeSyS 3.5.
Приветствую всех читателей сайта, с вами на связи автор — Семен. И я продолжаю писать статьи по пром. автоматизации.
Пост налива — это некая металлоконструкция с лестницей и гибким шлангом, либо сверху, либо снизу. Этот шланг подводят к бензовозу и наполняют его топливом. Выглядит он следующим образом:
Топливо наполняется вот таким вот шлангом:
Что находится примерно в составе оборудования.
Насос
Клапан большого налива
Клапан малого налива
Массовый расходомер
Различные сигнализации
Какие задачи были поставлены в реализации программы:
Универсальность — передача данных для верхнего уровня либо по Ethernet, либо по RS-485.
Подключение различных видов массовых расходомеров — по импульсу или по Modbus.
Фиксация различных аварий и защит и запись в аварийный журнал.
Запуск программы по месту или удаленно.
Различные клапана подачи топлива, либо два клапана либо регулирующий кран.
Управление постом налива реализовывали на базе ПЛК200 с применение CoDeSyS 3.5.
Ну начнем с того, что я разбивал все процессы и задачи на подпрограммы — чтобы потом легче было находить косяки при отладке.
Дерево проектов выглядит примерно так:
В основной программе создан подраздел действие (ACT), сюда я записываю различные преобразования данных, передачу данных и привязку физических входов-выходов.
Тело программы (PLC_PRG) с логикой.
И различные функциональные блоки и функции. Аварии(Avarii_post) и Регулирующий кран(kran)/
Опрос модуля ввода аналогового, панели оператора и массового расходомера по интерфейсу RS-485.
Обязательно ручной режим, включение насосов, задвижек, клапанов, кранов и т.д.
Расчет расхода сделал примерно таким, без учета цены импульса. Знаю, что код кривоват, если есть варианты получше, подскажите, как написать?
Выбор режима для расхода и задвижки делал через CASE.
Запуск пошаговой программы реализован через CASE. При отладке наглядно показано, где программа остановилась и по какой ПРИЧИНЕ.
Обработчик стоповой кнопки, все прописано, когда, куда и что должно остановиться.
Обработчик аварий и отправка сообщений через массив.
Аварийная ситуация и что должно произойти.
Ставили ещё маленькую панель оператора, вот такая была менюшка:
Ну и что предполагалось быть в мнемосхеме Master SCADA 3.12. Ставили именно её.
На этом я заканчиваю, если будут вопросы, пишите.
Появляются задачи, когда нужно на экране ПР200 или ПР205 или ПР225 задать доли секунды или доли минуты.
На примере покажу, как это сделать.
Заходим в программу Owen Logic, возьмем пример ПР200.
После этого добавляем переменную типа Float. Изначально в таймер задаются значения в миллисекундах. Если нам нужны минуты, то нужно преобразовать сначала в секунды, а потом в минуты. Получаем такое интересное число 60 000. Переменную умножаем на это число и подаем в блок таймера.
Таким образом можем ввести минуты с долями. Часто просят сделать секунды с долями. Потому что для работы автомата задержка с целочисленной секундой бывает много. Если нужны секунды с долями, то умножаем просто на 1000.
Результат:
Для настройки экрана заходим в менеджер экранов.
Добавляем блок на экран и присваиваем переменную.
На этом я заканчиваю, всем пока-пока.
Пишу этот пост в основном для новичков, которые вот вот начинают осваивать программируемое реле и ПО для них.
Начнем с простого сравнения чисел с плавающей запятой.
Создаем проект и добавляем необходимые элементы.
Для сравнения чисел с плавающей запятой нужны элементы с приставкой f.
Операция Вх1 > Вх2.
Операция Вх1 < Вх2.
Операции Вх1 ≥ Вх2 и Вх1 ≤ Вх2, к сожалению среда позволяет делать только с целочисленными значениями. Чтобы выполнить в целочисленном варианте, я просто умножаю на 100 перевожу в целочисленный и сравниваю.
Если знаете как сделать с плавающей точкой, напишите в комментариях.
Требуется запустить центробежный насос, который должен проработав 3 секунды выключиться и, кроме того, необходимо вести учет числа включений. простой запуск механизма осуществляется на Codesys 2.3.
Приветствую всех дорогие читатели, на связи Гридин Семен. Запускаю серию статей совсем простых программ, как раз для начинающих.
Перед программированием работы насоса нужно сконфигурировать входы/выходы ПЛК, для этого одному из дискретных входов присваиваем значение «Pusk», а одному из дискретных выходов значение «Nasos».
Для управления работой насоса и учета числа включений потребуются: элемент счетчик CTU, элемент таймер TP и переменная «Counter».
Кнопка «Пуск» устанавливает значение «1» на переменной «Pusk», которая включает одновременно счетчик CTU1 и таймер TP1. Число включений суммируется и выводится в переменную «Counter» с выхода CV счетчика. А с выхода таймера TP1 устанавливается булевская переменная «Nasos», которая управляет дискретным выходом ПЛК в зависимости от времени установленного на входе PT таймера, в данном случае это 3 секунды.
Для создания визуализации пуска насоса нужно создать новый объект визуализации на закладке «Визуализации» организатора объектов, разместить на форме элемент «Кнопка», пару прямоугольников для изображения трубопровода, еще 1 эллипс и прямоугольник для насоса, отдельно прямоугольник для создания надписи с количеством включений насоса.
Кнопку «Пуск» нужно в разделе «Конфигурирование элемента – Категория – Ввод – Переменная-кнопка» связать с переменной «Pusk», которая в свою очередь связана с дискретным входом ПЛК. Изображение насоса сконфигурировано в разделе «Конфигурирование элемента – Переменные – Изм. Цвета», нужно вписать переменную «Nasos», а также установить обычный (серый) и тревожный (зеленый) цвета. Прямоугольник для вывода числа включений насоса на панели конфигурирования элемента связан с переменной «PLC_PRG.Counter» в разделе «Конфигурирование элемента – Переменные – Выв_текста».
На этом заканчиваю, всем спасибо, пока-пока.
Линия задержки используется для создания задержки на один цикл передачи значения с выхода компонента на вход.
Для создания линии задержки следует нажать на кнопку на панели вставки и построить линию между выходом и входом компонента. Будет проведена красная пунктирная линия.
На вход I1 блока арифметического сложения (целочисленный тип) подается константа, значение которой равно 1. На вход I2 по линии задержки подается значение с выхода блока Q, которое было вычислено в предыдущем цикле.
Таблица вычисления по циклам.
Чем удобно программируемое реле ОВЕН? Тем, что оно способно выполнять задачи таймера реального времени(ClockWeek). Можно написать абсолютно гибкую программу с кучей параметров по дате и времени. Эти параметры могут выполнять другие не основные функции.
Для этих задач есть несколько вариантов функциональных блоков, у всех разные настройки и степень «Умности». Давайте рассмотрим их в нашей статье.
Приветствую всех, с вами автор блога, пишу статью по реализации вышеназванного функционала.
Рассмотрим самый простой недельный таймер.
Все относительно просто, задаем дату и время включения и выключения.
Но, это удобно, когда заранее известны параметры программы.
Таймер, который позволяет вносить изменения в настройки.
Находится он в онлайн базе макросов. В разделе таймеры и счетчики.
Таблица входов и выходов параметров.
Таймер будет активен (ob_On=1) если:
Разрешена работа таймера (Enable=1)
Текущий день недели совпадает с выбранным (bm_WeekDay)
Время включения (On_h и On_m) меньше времени выключения (Off_h и Off_m).
Текущее время больше времени включения И меньше времени выключения
Время включения (On_h и On_m) больше времени выключения (Off_h и Off_m).
Текущее время больше времени включения ИЛИ меньше времени выключения
Если следующий день недели не используется, то таймер выключится
Вот таким образом выглядит подключение макроса.
Недельный Таймер, который я чаще всего использую.. Он удобный, гибкий. У него есть несколько режимов работы.
Выглядит таймер, вот таким образом.
Входы и выходы макроса.
Недельный таймер предназначен для организации выдачи управляющих воздействий
на объект в зависимости от дня недели и текущего времени. Таймер автоматически
определяет текущий день недели по входам «Год», «Месяц», «День» на которые
необходимо подать сервисные переменные часов реального времени.
Текущее время на таймер заводится через входы «Часы» и «Минуты». Таймер может находиться в одном из трех состояний, которые определяется по входу «Режим работы».
«Режим работы»=0 — таймер выведен из работы
«Режим работы»=1 — в этом режиме выход таймера Q1 будет установлен в «1» если
совпадут следующие условия:
на вход «Все дни недели» будет подана лог.1 или как минимум на один из входов дня недели
текущее время станет равно или больше заданного времени включения, выбранногочерез входа «Часы.ON» и «Минуты.ON»
совпадет текущий день недели с выбранным через входы дней недели, или если будет установлен вход «Все дни недели» совпадет заданное время включения с текущим временем
«Режим работы»=2 — Данный режим работает аналогично режиму 1, но только один раз.
После того как выход Q1 таймера отключится, выход «Режим работы» установится в
значение «0» — запрет работы таймера, таймер не будет работать до следующего изменения режима работы через вход «Режим работы». Не зависимо от того сколько дней недели будет выбрано, срабатывание произойдет только один раз в ближайший выбранный день.
В принципе этот таймер забит по максимуму на любые варианты и для любых решений задач. Мне хватает функционала.
Пользуйтесь, на этом я завершаю
На днях как-то приiлось ставить прибор ТРМ12. и я задумался, как реализовать ПИД в Owen Logic. В Codesys 2.3 и 3.5 у меня есть понимание и рабочие алгоритмы, которые стоят на объектах. Для Программируемых реле у меня не было решений.
Приветствую всех, уважаемые читатели. Напишу краткий пост об этом решений.
На сайте ОВЕН выложили примеры для ПР205 о макросе с ПИД-регулятором. Но там с аналоговым выходом от 0-100 %.
Его можно немного доработать и мы получаем ПИД для задвижки с дискретными выходами.
Вставляем макрос в менеджере компонентов в разделе управляющие и регулирующие модули RegKZR.
Его входные и выходные параметры:
Правильно указываем полный ход задвижки. Иначе будет недорегулирование или перерегулирование. Можно потерять точность.
С уважением, Гридин Семен
Приветствую всех читателей, у меня есть вопрос.
У меня есть кусок кода - при измерении размера кирпича, выполняются различные условия.
Исходные данные размер кирпича уставка, давление пресса и отклонения по размеру минимальное и максимальное.
Как мне можно обойтись без if else, если это вообще получается в коде? Слишком громоздкий код, постоянные ошибки.