Приветствую вас, дорогие читатели!
Сегодня 3-тья часть цикла «АСУшник за неделю»:).
В прошлой записи говорилось о функциях, и в самом конце записи я дал вам интересную задачу, надеюсь, что у вас возник интерес её решить.
Сегодняшний раздел не менее важен, ведь все программы просто не могут быть без Таймеров, Счётчиков и Триггеров. О них и пойдёт речь.
Занудство:
Если вы нашли ошибки, или неточности, не стесняйтесь мне об этом сообщить, с большой радостью сделаю интернет грамотнее.
Да, мне тоже не нравится Дзен, бесконечная реклама из-за которой невозможно нормально читать материал, но другой площадки для написания статей у меня нет.
Функциональные Блоки.
В чём принципиальное отличие Функции от Функционального блока?
Функциональный блок имеет встроенную память, он запоминает что было с ним в предыдущем цикле\циклах, функция же «обнуляется» каждый цикл.
Функциональный блок всегда «тяжелее» функции, чем больше Функциональных блоков в программе, тем дольше она выполняется, это нужно запомнить. Причем, если бы мы программировали на ST и создавали свои собственные Функции и Функциональные блоки, то предпочтение стоило бы отдавать именно функциям, если есть такая возможность, но, это про более сложное программирование, вам это нужно пока просто помнить.
Время цикла.
Современные ПЛК обладают мощными процессорами, которые прокручивают весь ваш код мгновенно, за 1 миллисекунду, или быстрее, или медленнее.
Что такое время цикла – это время, за которое ПЛК выполняет программу, читает входы – выполняет программу – пишет выходы, в это время, конечно же, не входит физический процесс, 300мс на включение контактора или реле не учитываются, потому, если вы в один цикл реле включили, а в другой цикл его выключили, скорее всего ничего и не произойдёт, потому и важно понимать физические процессы.
В прошлой записи, в последнем её примере вы видели с какой скоростью нарастает цифра вымышленного диммера, так вот, скорость нарастания или убывания напрямую зависит от времени цикла и не является постоянной величиной. Одно дело время цикла 1 мс, совсем другое 50 мс.
В любом ПЛК время цикла всегда зависит от сложности выполняемой программы, чем больше кубиков – тем дольше программа будет выполнятся. Например, на умных домах что я обычно делаю, время цикла доходит до 20мс. Усложнение программы, в большинстве своём происходит из-за большого количества Функциональных Блоков (далее ФБ): Таймеры, Счётчики, Триггеры и прочее. По этой причине, всегда стоит думать о том, как правильно организовать программу, если можно использовать 1 таймер вместо трёх – именно так и делайте. Чем проще программа – тем лучше.
Причем программа должна быть и функционально проще, и зрительно. Если для большей наглядности (чтения программы), требуется добавить промежуточные действия – не стесняйтесь, вам же самим потом будет проще её разобрать.
Соблюдайте баланс!
Комментарии.
Чем больше программа, тем сложнее её понять. Для упрощения понимания в OwenLogic есть специальная функция – «Комментарии», находится она в 7-ом функциональном поле. Комментируйте – сами же себе скажете спасибо.
Триггеры.
Триггеры – неотъемлемая часть любой программы. Триггеры бывают разного функционального назначения, и вся суть триггера заключается в том, чтобы формировать на выходе определенный сигнал, после определенного события на входе:). Сейчас станет проще.
RTRIG – от слова Rising, восход, восходящий, поднимающийся или, по OwenLogic-овскому – Детектор переднего фронта. Сколько копий (от слова копьё) поломано при выяснении правильного словесного определения названия RTRIG – не сосчитать…
Но, главное – конечно не название, а суть и принцип работы.
Блок RTRIG имеет 1 вход и 1 выход, при появлении на входе логической единицы (True), на выходе (сразу же), на 1 цикл программы, появляется True. Следующее True на выходе появится лишь тогда, когда на входе пропадёт True, и снова появится.
Где это нужно? На любой физической кнопке, требующей или включение, или выключение. Зачем? Затем, что физические кнопки могут залипнуть, и в вашем техпроцессе может произойти коллизия.
FTRIG – от слова Falling (Закат:), шутка. Детектор заднего фронта.
Схож с RTRIG, только True на выходе появляется на 1 цикл лишь тогда, когда на входе пропадает 1-ца. Вы держите кнопку 5 секунд, отпускаете её и на выходе формируется True, на один цикл, на мгновение:).
Зачем нужна? Например, поджечь световой индикатор, когда произошло отключение контактора. Дополнительные контакты контактора разъединились, произошло событие и фиксация 1-цы на выходе, на 1 цикл.
RS и SR триггеры. Set-Reset – зафиксируй\сбрось, как только на вход S (достаточно сигнала длительностью 1 цикл RTRIG например) поступает импульс True, так на выходе Q появляется – True. Соответственно, чтобы сбросить состояние выхода (Q) нужно сделать Reset – подать импульс True на R. Но не всё так просто!
RS и SR триггеры хоть и работают очень похоже, всё же в них есть огромная разница – ПРИОРИТЕТ!
Что выше – то и главнее. В случае с RS, если на R постоянно True, тогда на выходе Q всегда будет False, независимо от того, что на входе S. У SR триггера ситуация отличная, Set – приоритет, если на нем True – на выходе Q всегда будет True, независимо от состояния на входе R. Пример использования такого триггера – запуск установки только после того, как повернут ключ на разрешение запуска. Ключ – это True на R, а кнопка Start – это True на S, пока ключ не будет в положении False, S нам ничего не даст, и да, я говорю про RS триггер:). И ещё один пример – кассир в гипермаркете при отмене покупки, пока старший кассир не повернет ключ, покупку отменить нельзя.
DTRIG, не помню когда он появился в OwenLogic, но если честно, года 2 назад я на него не обращал внимания, возможно ошибаюсь.
Этот триггер весьма своеобразно описан. Давайте попробую описать его проще.
Будем считать, что у данного триггера всего 2 входа и 1 выход.
Если на входе D – True, тогда триггер готов к работе, как только на входе C появляется True, на выходе Q формируется True. Предполагается, что вход C – импульсный вход.
Если после запуска триггера на входе D фиксируется False, триггер ждёт, когда на входе C появится True, после чего на выходе Q будет False.
Где он может пригодиться, я думаю многие зададутся этим вопросом:), ну предположим на конвейере, рабочая смена закончена, выключатель D переводим в положение False, ждём, когда деталь доедет до последней точки назначения и получаем сигнал True от датчика на вход C. Я, честно сказать, никогда и нигде не видел применения этого триггера.
Так как ФБ сложнее функций, предлагаю сделать небольшой пример:
Имеется пилорама. (В реальной жизни не применять:))
- Разрешением на работу служит ключ, поворачиваем ключ по часовой стрелке – True, против часовой – False.
- Для того чтобы запустился двигатель установки – нужно нажать кнопку старт.
- Есть датчик перегрузки, при сигнале с которого станок останавливается. Повторный запуск установки требует нажатия кнопки старт.
- Есть датчик финального положения бревна. По сигналу которого происходит пневмосброс досок, а в случае завершения работы – отключение установки.
- Индикация аварии и включенного ключа.
- Q1 – выход для запуска всех механизмов, Q7 – пневматический сброс досок, F1 – авария, перегрузка, F2 – индикатор ключа.
Таймеры.
Знать нужно лишь 3 таймера, несмотря на то что в OwenLogic их 5.
TON – Таймер на включение. Например, постановка на охрану, включили выключатель (True на вход блока), и у вас есть 5 минут чтобы выйти из дома, после 5-ти минут на выходе блока сформируется True.
TOF – Таймер с задержкой отключения. При установке True на входе блока, на выходе сразу же формируется True. Например, вы вышли из дома ночью, выключили выключатель (False на входе блока), и через 5 минут свет выключается (Выход станет False через 5 минут).
TP – Таймер формирующий выходной импульс заданной длительности. Например, наполнение кормушки для кошки, вы нажали на кнопку, и кормушка открыта 20 секунд, в течении которых кормушка наполняется из резервуара с кормом.
Чем примечателен таймер TP? Он единственный из всех таймеров может делать сброс отсчёта. Если TON и TOF запустить, остановить их уже нельзя, а TP можно!
Как это сделать? Всё очень просто, изменить время уставки!
Для того чтобы «на лету» менять уставку блока, можно воспользоваться Селектором (SEL), и блоком записи W из функционального поля 7. Перетащим его на поле программы, вставим SEL, привяжем вход SEL, добавим 2 константы, 0 и 2000 – готово!
Обратите внимание, запись в блок производится в миллисекундах, 2 секунды – 2000мс.
Так же в OwenLogic присутствует 2 интервальных таймера Clock, принцип их прост – выполнение включения и выключения в течении какого-то суточного времени, например кормить кошку каждый день в 14-00, а в среду не кормить, чтобы не располнела:).
Давайте дополним алгоритм нашей пилорамы:
- Имеется маслосистема, которую нужно заполнять каждый старт установки. Максимальное время заполнения маслосистемы 5 секунд. Если приходит команда что маслосистема наполнена – останавливаем подачу масла.
- Команда на пневматический сброс длиться 3 секунды.
- Во время работы пневматического сбрасывателя не должен работать компрессор. После того как выполнен пневматический сброс требуется подождать 2 секунды для запуска компрессора.
- Компрессор работает только тогда, когда ключ в положении True.
Счётчики.
Как и таймеры, счётчики очень важны. На практике, в ST счётчик реализуется крайне просто, и его не требуется использовать как отдельный ФБ, достаточно написать строчку:
IF DI_1 THEN Count_1:= Count_1+1; END_IF //Немного сложнее:), но суть такая.
Но с Кубиками всё немного иначе.
В CFC OwenLogic существует 3 счётчика: CT, CTU, CTN.
CT – Считает до заданной уставки, затем делает импульс. По кругу. Например, уставка - 5. Подаем на вход блока 1-0-1-0-1-0-1-0-1 и на 5-ой True на выходе блока происходит формирование True на 1 цикл (мгновение).
CTU – Схож с CT, но при достижении уставки, формирует True, которая будет на выходе блока до того момента, пока не будет произведен сброс счетчика, подачей на вход R – True.
CTN – Универсальный счётчик, на выходе которого формируется счётное число. Может считать как в + так и в -, для этого у него есть входы Up и Down (U, D). Reset (R) предназначен для того, чтобы на выходе устанавливать заданную уставку.
Например, в офис запускают утром 100 человек, жмут кнопку R. В офисе есть вход и выход, и там, и там датчики, на входе U, на выходе D. К обеду смотрим сколько человек в офисе осталось:).
Генераторы и Регуляторы.
В OwenLogic есть 2 стандартных блока BLINK и PID.
BLINK – генератор импульсов заданной длительности, нужен, например, чтобы поморгать лампочкой, в случае аварии. Пока на входе BLINK – True, на выходе генерация сигналов False-True-False…True-False, заданной длительности, как только на входе False, так на выходе тоже устанавливается 0.
PID - Пропорционально-интегрально-дифференциальный регулятор, для любого АСУшника стыдно не знать аббревиатуру. Для чего нужен, ну, чтобы в чайнике температуру 80 градусов поддерживать:), или в инкубаторе нужную температуру для будущих птичек. В природе ПИД регуляторов существует очень много, странно что никто Нобелевскую премию по ПИД регулированию не получил. В нашем случае – самый простой ПИД регулятор, которого хватит вам на 99.9% жизненных ситуаций, с ПР точно:).
Вот, наверное, и вся база, давайте сделаем простой пример по счетчикам и генератору, а регулятор оставим на потом, в любом случае продемонстрировать его в теоретическом курсе не получится, но мы что-нибудь придумаем, позже.
Пример:
1. Каждое 5-тое срабатывание датчика уровня дает команду на заполнение ёмкости маслосистемы из основного резервуара длительностью 5 секунд на выход Q4 (DO4).
2. Каждый 5-ый пневматический сброс зажигается лампа Технического Обслуживания (Q5), сброс состояния лампы производим нажатием кнопки Reset_TO.
3. Каждое 3-тье ТО, мигаем индикатором 3 секунды.
Обратите внимание на ФБ CTN1, его выход соединен с переменной TO3 другой линией – это «Линия задержки» из функционального поля 7.
Что такое «Линия задержки». Это процедура, выполняемая в следующем цикле, то есть запись числа происходит не в момент, когда мы сосчитали нажатия Reset_TO, а только на следующий цикл. Зачем это надо? Если бы я не сделал данной «линии задержки», программа ругнулась бы и высветила соединительную линию Желтым цветом, программа продолжила бы функционировать, возможно даже правильно, но, смотрите на парадоксальную ситуацию, в момент записи 2-ки происходит установка счётчика равная 2-ум (Равенство на 2 через RTRIG устанавливает счётчик в число 2) – бесконечный цикл, потому нам важно сначала отработать алгоритм сброса с триггером и лишь потом в следующем цикле видеть 2-ку на выходе. Я сделал это специально, чтобы вы смогли понять, что такое линия задержки.
Ну и в завершении этого блока расскажу вам что такое Макросы.
Макросы – это ваш самописный блок, который сделан из нескольких готовых.
Простой пример 4И, или 4ИЛИ:
Таким образом вы можете объединять множество различных блоков – это поможет вам упростить чтение программы, и сконфигурировать конкретные блоки, под конкретные задачи, а затем тиражировать этот блок, например блок управления освещением, комнат много, а алгоритм один общий, с кучей различных функций, которые вы можете использовать, а можете и не использовать.
Функции и ФБ на ST оставим на потом.
Примеры сегодняшних задач можно скачать тут - https://disk.yandex.ru/d/8da_Qyx_1KYYlQ
На сегодня буду закругляться. У меня осталось не рассказанным про коммуникации, и это надо рассказать, чтобы дать базовое понимание и примеры. Скорее всего объединю это с Функциями и ФБ на ST. А уже в завершение сделаем 3 большие примера с подробным разбором.
Предлагаю вам придумать какую-то интересную задачу, и я её решу в примерах, моих задач пока 3. Если найдётся человек, который успеет закинуть интересную задачу – обязательно её решим. Задача должна быть описана максимально подробно.
Ну а в следующей статье продолжим изучать АСУ: