Си б
Рисунок 16. ПрограммаАдемонстрация работы детекторов фронтов и реверсивного счетчика
Переменные A и B связаныДс дискретными входами точно так же, как в предыдущей задаче. С первого дискретного входа значение сигнала подается на вход блока R TRIG, объявленного как переменная RT1, со второго – на F_TRIG, объявленный, как переменная FT1. Выход FT1 связан с переменной F, которая далееИподана на вход CD (уменьшение на единицу) счетчика. Выход RT1 подан напрямую на вход CU (увеличение на единицу) счетчика. Переменная X, объявленная, как целое число, связана со счетным выходом счетчика CV. Выходы сброса счетчика на ноль (RESET) и загрузки в него начального значения (LOAD) в данном примере не используются и на них подается логический ноль – логическая константа «ложь» – FALSE.
21
Си б А
Рисунок 17. Программа демонстрацияДработы детекторов фронтов
Поскольку счетчик CTUD используется не полностью, при компиляции данный пример сгенерирует одно Ипредупреждение, но, несмотря на это, пример работает нормально. Тестирование примера просто: если первый слева тумблер переводится из нижнего положения в верхнее, переменная X увеличивается на единицу, если второй слева тумблер переводится из верхнего положения в нижнее, переменная X уменьшается на единицу. Следует обратить внимание, что детекторы фронтов, счетчики и таймеры не являются базовыми (то есть, непредставимыми простыми операторами) программными единицами. Все функциональные блоки можно реализовать программно с помощью базовых операций. В доказательство этого составим программу для того же самого примера без применения счетчиков и детекторов фронтов. Программа показана на рисунке 17.
22
Стоит сказать об арифметических операциях. Они реализованы в виде стандартных функций ADD (сложение) и SUB (вычитание). При значении логической единицы на входе EN блок работает, не работает при логическом нуле на входе EN. Во встроенной справке приведен перечень всех операций, осуществляемых с помощью стандарт-
Сных функций с входом EN.
Детектор фронта в этом примере реализован следующим образом: объявлены две дополнительные переменные, по одной на каждый детект руемый с гнал, в самом конце программы, после использования текущ х значений сигналов, они сохраняются в объявленные переменныецикл, значен я переменных используются в следующем обороте ц кла программы как значения, сохраненные в прошлом шаге, и так про сход т каждый . Первые две строки программы представляют собойменно детектирование сигнала, единовременную проверку его значен я в прошлом и настоящем шагах.
Задача 2. Управление освещением в комнате
Услов е: есть комната, в двери стоят два датчика регистрации пересечения линии: снаружи Аи внутри комнаты, они подсоединены к ПЛК. Также к ПЛК подсоединен включатель комнатного освещения, есть возможность использовать еще одну кнопку. Тре уется составить программу, которая управляет автоматическим включением и выключением света в комнате.
Программа, являющаяся решениемДзадачи показана на рисунке 18. Если человек входит в комнату, то он пересекает сначала наружный датчик, потом внутренний, и в момент пересечения внутреннего датчика внешний датчик уже регистрирует присутствие человека в дверях. Процесс выхода из комнаты относительно датчиков происходит так же, только датчики следует поменятьИместами. Таким образом, по переднему фронту одного датчика в сочетании с уже сработавшим другим получим короткий импульс, обозначающий вход, или выход одного человека. Далее требуется реализовать счет людей, это можно сделать с помощью реверсивного счетчика. Также, если значение счетчика больше, или равно 1, следует включить свет, если нет, то выключить. Предположим, что возможна ситуация, когда человек, находясь в комнате, может выйти из нее не через дверь, а, например, выпрыгнуть в окно. Тогда свет останется гореть и в том случае, если все вышли. Для этого стоит использовать кнопку принудительного гашения света, которую следует расположить с наружной стороны
двери, кнопку соединить со сбросом счетчика.
23
Си б
Рисунок 18. РешениеАзадачи обДавтоматическом включении света, сделанное с помощью типовых функциональных блоков
Приведем назначение переменных. OUTER SENSOR и INNER_SENSOR – переменные, связанные с внутренним и наружным датчиком пересечения линии. Устанавливаются, если линия пересечена посторонним объектом и сбрасываются, еслиИпересечения нет. RESET_BUTTON кнопка гашения света. QUIT и ENTER – внутренние переменные, устанавливающиеся в единицу в моменты соответственно выхода из комнаты и входа в нее. LIGHT – переменная, связанная с реле включения света, CTR – переменная счетчика вошедших в комнату.
24
Си б А
Рисунок 19. Решение задачи обДавтоматическомИвключении света, сделанное без типовых функциональных блоков
На рисунке 19 изображено решение той же задачи, но без применения типовых функциональных блоков.
Переменные IS1 и OS1 хранят значения переменных INNER_SENSOR и OUTER_SENSOR за предыдущий цикл. Функция GT – сравнение двух чисел на входе, и, если «верхнее» больше, чем «нижнее», функция возвращает логическую единицу. MOVE – пересылка значения. Слева указывается его источник, а справа – приемник, значение может быть любого типа, переменные источника и приемника должны быть одного и того же, или совместимых типов. Подробнее про совместимость типов можно узнать из лекционного материала.
25