В материалах, опубликованных ранее:
можно познакомиться с теоретической информацией и практическими работами, связанными с программированием на языке программирования Function Block Diagram в среде программирования PC WorX.
В текущем материале приведём варианты заданий по работе со счётчиками.
Определение. Счетчики – это элементы, ведущие счет импульсов или циклов.
С их помощью также можно организовать циклы, аналогичные циклам for...next, while...do, repeat.
К стандартным счетчикам относятся счетчик вверх CTU, счетчик вниз CTD и реверсивный счетчик CTUD:
Счетчик CTU считает входные импульсы по переднему фронту. При появлении на входе CU переднего фронта сигнала, и если RESET = FALSE, значение CV увеличивается на 1. На входе PV задается значение счета, при достижении которого выход Q устанавливает значение TRUE, и подсчет импульсов прекращается. Если RESET = TRUE, счетчик инициализируется с нулевым значением CV. Выход Q может быть инвертирован.
Счетчик CTD производит обратный отсчет входных импульсов по переднему фронту. При появлении на входе CD переднего фронта сигнала, и если LOAD = FALSE, значение CV уменьшается на 1. По входу PV устанавливается финишное значение счета, при достижении которого выход Q устанавливает значение TRUE, и подсчет импульсов прекращается. Если LOAD = TRUE, счетчик инициализируется со значением CV, равным PV. Выход Q может быть инвертирован.
Счетчик CTUD – реверсивный. Выход CV инкрементируется на единицу по приходу переднего фронта на входе CU, и декрементируется на единицу по переднему фронту на входе CD. Если CV = PV, выход QU устанавливается как TRUE, если CV = 0, выход QD устанавливается в TRUE. Если RESET = TRUE, счетчик инициализируется со значением 0, если LOAD = TRUE, счетчик инициализируется со значением PV. Для запуска процесса счета входы RESET и LOAD должны быть установлены как FALSE. Выходы QU и QD можно инвертировать.
Подробнее можно посмотреть в видео:
Лабораторная работа «Решение задачи освещения и подсчета занятых мест в гараже с использованием счётчиков».
Рассмотрим задачу освещения и подсчета занятых мест в гараже. В качестве исходных данных примем наличие двух датчиков фиксации проезда автомобиля – одного снаружи ворот и одного внутри ворот. Предполагается, что при въезде автомобиля в гараж сначала срабатывает внешний датчик, а затем внутренний, а при выезде наоборот. Режим движения автомобилей таков, что датчики срабатывают с интервалом 0,5 секунд и не должны срабатывать одновременно. Число машиномест в гараже – 15, освещение включено, если в гараже есть машины, и выключается через 5 секунд после выезда последней машины. Подробнее изложение постановки задачи указано в видео:
Пример выполнения лабораторной работы.
Рассмотрим выполнение этого задания на языке Function Block Diagram в среде программирования PC WorX:
На рисунке при помощи таймеров TOF_2, TOF_3 и логических элементов AND организовано разделение машин на въезжающие и выезжающие. Так на вход таймера CU подается логическая единица, в случае срабатывания внешнего датчика, а затем в промежутке времени 0,5 секунд – внутреннего (для входа CD – наоборот, TRUE, если сначала срабатывает внутренний, а затем внешний датчики). Для удобства управления, сигналы датчиков EXTERNAL и INTERNAL заведены на тумблеры 1 и 2 наборного поля. В счетчике CTUD подсчитывается число машин в гараже, при этом на выход OUTPUT1 подается сигнал об отсутствии мест, а на выход OUTPUT2 – сигнал освещения гаража.
Упражнение. В качестве дополнительного Упражнения предлагается написать программу в среде программирования PC WorX, которая осуществляет подсчёт машиномест и управления гаражным освещением для гаража с двумя воротами (и, соответственно, с четырьмя датчиками) для въезда и выезда автотранспорта (можете предложить свой вариант числа заездов в гараж).
Результат в режиме отладки в виде скрина приведите в виде комментария под текущим материалом.