В ролике показано подключение инкрементального энкодера с NPN-выходами к ПЛК, параметрирование скоростного счётчика в среде разработки и написание программы для измерения расстояния и частоты вращения двигателя. Также рассмотрено использование аппаратного прерывания по входу сброса для обработки события обнуления энкодера.
- 00:00 Подключение инкрементального энкодера к ПЛК
- 00:43 Параметрирование скоростного счётчика в среде разработки
- 05:20 Создание блока данных и инициализация счётчика
- 07:09 Программа считывания импульсов энкодера
- 09:26 Эксперимент по измерению длины линейки и стола
- 13:48 Настройка аппаратного прерывания по входу сброса
- 15:02 Программа обработки прерывания с таймером
- 16:41 Измерение частоты вращения двигателя
- ПЛК
- инкрементальный энкодер
Кому полезно: Инженерам АСУ ТП, изучающим программирование ПЛК и работу с энкодерами.
Описание составлено автоматически по расшифровке речи в ролике.
Расшифровка видео
0:00 Здравствуйте, мы начинаем важно и что самое главное. Интересная экспериментальная часть программирования промышленных контроллеров, в которой мы будем. Рассматривать тачки, их подключение к параметрированию и работу с ними в программе. В этом видео мы проведем 2 эксперимента, подключим инструментальный энкодер. И с его помощью имелем, например, ширина этого стола линейку. И более точно, чем в предыдущем видео, измерим частоту вращения вала двигателя. Сначала рассмотрим подключение нашего инкодера к. Контроллеру схема и описание подключения находится в так называемом системном руководстве по программированию контроллера 7000 и 200.
0:43 Где скачивать это системное руководство? Я рассказывал в 1 из предыдущих видео про программирование ПЛК инкрементальные кодеры к контроллеру подключаются. К специальным счетным скоростным ходам, которые, по сути дела, находятся на тех же дискретных ходах обычного типа, но отдельно параметрируется в среди. Разработки диапортал, это я покажу чуть позже. Важно понимать, что наш инкрементальный энкодер имеет НПН выходы, поэтому питание на входы конкретного. Полка мы должны подавать по другому, нежели обычно. Это описано вот в этом пункте, то есть для входов, в которые втекает ток, здесь имеется ввиду обычное. Стандартное движение только от плюса к минусу. То есть некое условное обозначение, то есть для втекающих входов у нас подключение вот такое, то есть у нас. + источника питания подается на 1 сигнал, то есть это общий контакт для всех входов и + источника питания уже тем или иным образом коммутируется на входы. То есть либо это ролейный, либо это ПНП, датчики для нашего случая и инструментальный конверс НПН выходами. Мы должны подключить источник питания + источника. Питания на 1 м сигнал, то есть на общей и уже она. Он будет коммутироваться с помощью НПН выходов на необходимые нам входа, покажу, как это выглядит в. схеме вот наша инструментальная квадра на него стандартным образом поддается питание. + + 3 + 2 + 3 + 2 + 3 + она к минусу выхода коммутируется к определенным цифровым. Ходам чуть позднее будет понятно, почему именно так. То есть у нас сигнал, а подается на вход и 0 0 сигнал б на и 0 она-1, а сигнал зед деревообнувление. Подается на вход не и 0, ты-2, а и 0, ты -3. И самое важное, наш вот этот, вот 1 м общий сигнал для входов подается не на + источника питания, она + по той причине, что. У нас НП на выхода коммутирует или, а не + про ПНП и НПНБ очки. Я ранее также рассказывал, кто не совсем понимает, о чем идет речь, прошу посмотреть это видео. Теперь запустили среду разработки программки, а портал сделал я пустой проект, как это делать. Я ранее уже рассказывал соответственно вот наш контроллер. Который лежит на столе базовый, я задал ему настройки сетевые, чтобы можно было с ним иметь коммуникацию. Мы будем рассматривать только часть коса, которая. Касается параметрирования скоростных счетов ходов, чтобы нам отформатировать счетные входы. Мы кликаем на контроллер, нажимаем правую кнопку, нажимаем. Свойства здесь здесь свойств достаточно много, но нас интересуют скоростные счетчики, в частности, нас интересует 1 скоростной счетчик, наш счетчик, а 6 1.
3:26 Далее выставляем режим счета, выставляем, а б инкрементальный энкодер, то есть счетчик, а и б импульсов. Замечу, что у нас используется входа только интегрированные в логический контроллер, то есть другие мы использовать не можем. Если бы могли, могли бы здесь соответственно задавать далее начальный счет, у нас будет вверх начальное значение счетчиков. В данном случае нам это не важно, то есть при старте контроллера будет задаваться какое то отдельное. Значение в нашем случае это не в этом нет необходимости дальше использовать внешний вход. Я его пока активирую, потом я его деактивирую, так как у нас он данном 1 эксперименте не требуется. Сейчас я активирую для того, чтобы показать. Какие входы определяет система автоматически, далее события это отдельная тема? Мы немножко попозже рассмотрим, вот теперь подошли. Мы к аппаратным ходом, который используется для данного счетчика, у нас сигнал, а подключается. К входу и 0 +0 сигнал б подключается к и 0 она-1. И вот как я ранее в схеме показывал, мы вход сброса подключили к и 0, ты -3, а Ник и 0 что-22. То есть это определяется аппаратной частью контроллера, и мы это поменять не можем, вход сброса я. Сейчас отключу, так как он нам не нужен. Вход и 0 33 будет использоваться как обычный дискретный вход, далее. Вот это вот значение, надо запомнить это стартовое значение той области памяти, в которой у нас будет отображаться значение. Счета, который у нас сейчас в данный момент происходит, и надо запомнить. Вот этот вот идентификатор значения, 257 потому что она потребуется нам в программе конфигурирование, параметрирование. Мы уже закончили, то есть у нас этот. Счетчик уже активен, мы можем его использовать в программе для того, чтобы нам этот счетчик использовать. Нам необходимо сначала при старте контроллера его отпрометировать дополнительно. Первоначально мы создадим блок данных.
5:20 В котором у нас будут храниться данные после выключения питания из контроллера и создаем там переменную. Не обязательно создавать отдельный блок данных, можно использовать тот, который уже существует, но в данном случае у нас ни 1 блока. Данных нет, создаем переменную аккаунт тип двойное знаковое целое, число, задаемое стартовое значение. Например, 0 ставим угол галочку ретейн. То есть вот эта перемена должна храниться после выключения питания, далее мы создаем инициационный. Блок данных, который будет у нас запускаться при старте контроллера, я уже про это был крайне рассказывал. Этот стартап и в нем мы будем задавать, точнее, инициализировать значения. То есть у нас есть библиотеки, есть библиотеки С. Технологическими модулями, вот этот колдинг ставим, этот блок, этот блок будет запускаться 1 раз при старте контроллера и инициализировать те данные, которые у нас оставались на момент выключения питания. С контроллера, естественно, убираем.
6:23 Аппаратный идентификатор, с которым будет работать данный блок, в частности, у нас сейчас активирован счетчик, а 6 и 1 соответственно идентификатор 257 символические обозначения изначально. Уже задана при формировании программы, то есть нам нет необходимости их прописывать, и сразу они уже есть. Дальше мы обязательно должны задать направление направление здесь, скажем. Так эти входы они активируют изменения направления, направление может быть либо одни 1 в оборотном направлении, либо + 1 в прямом направлении. Но мы стоим, + 1 чтобы у нас всегда было. Однотипно также мы активируем изменения счета, то есть мы, и мы берем старое значение счета, которое у нас было до момента включения питания в том блоке, который мы только что создали.
7:09 То есть мы сначала создаем, потом при включении питания в эту переменную будет сохраняться значение? Естественно, это значение у нас будет использоваться при старте. Контроллера все то здесь, мы этот блок от прометализовали дальше, чтобы нам этот счетчик использовать. Для начала мы будем просто проконтролируем то значение, которое он у. Нас формирует для этой цели, мы просто напросто берем. Вставляем функцию, Мув, вставляем сюда. Наша отраженная ячейка памяти, в которой находятся импульсы инкундера, посчитаны. То есть я еще раз напомню, вернемся к параметрам, чтобы их еще раз вспомнить. У нас есть идентификатор этого счетчика, 257 который мы использовали в блоке образца.
8:00 Вот он и ячейка памяти размером с двойное слово, в котором будут храниться данные о состоянии счета, то есть в данном случае это ячейка. Памяти 1000 замечу, что она имеет размерность равна 4 Байтам. То есть это двойное слово, оно знаковое, то есть оно может быть и в минусах, + так? Как у нас направление вращения может быть разное, и эта ячейка памяти она находится в области входов. То есть это и д 1000 сейчас мы его? Используем вот нас и д 1000 мы используем эту ячейку памяти, и само значение получено. Мы будем уже помещать в ячейку памяти блоки данных, тот. Который мы используем при старте контроллера, все программа у нас готова, сейчас мы ее закачаем. Посмотрим, как меняется значение после вращения. Энкодера и проведем ряд дальнейших действий для нашего эксперимента. Наша 1 программа считает просто импульсы, мы вращаем в 1 сторону, а. Шинкодер начисляет в 1 сторону и вращаем другую сторону. Он считает в другую сторону, наш энкодер имеет 2000 импульсов на 1 оборот, но так. Как мы используем выход обновления Зеро, то есть мы ранее его не включили в систему. Он считает до тех пор, как пока не переполнится значение.
9:21 Теперь к самому эксперименту, то есть я использовал. Такой сетевой диск диаметром 80 мм для лучшей сцепляемости наклеил вещи за ленту, соответственно наш диаметр диска примерно 81 миллиметр, я прошу эти цифры. Сейчас запомнить, так как они нам понадобятся в программе. Сейчас мы сделаем некое подобие курометра, точнее вот из некого измерителя, которого мы будем. Измерять длину нашей линейки и последствия шлема нашего стола. Теперь мы должны написать программу для нашего эксперимента, соответственно, мы должны перевести. Импульсы инкудрора вы необходимо нам величины, например миллиметра, чтобы это сделать. Вспоминаем значение нашего диаметра 81 миллиметр, вспоминаем формулу. Длины окружности это пи, умноженное на д на диаметр и ее соответственно реализуем, так как мы будем работать с числами, с плавающей точкой мы должны сразу. Перевести наши импульсы наше значение двойное целое должны привести в понятную нам величину, точнее понятную контроль величину с плавающей точкой для этого. Мы должны создать дополнительные перемены, например, в ячейке памяти, там МД. 150 Теперь мы должны определить вес импульса и умножить на полученные значения. Импульсов я здесь сделаю все вычисления. В программе они будут каждый раз вычисляться. По большому счету это не нужно, можно заранее это все просчитать.
10:53 Получаем значение длинной окружности, был какой нибудь с магазином примерно и делим эту длину окружности на 2000 получая вес импульса. И также размещаем в дополнительно вспомогательную переменную, и теперь нам остается только этот вес импульса умножить на фактическое значение импульса, который у нас получается, и мы получим значение в миллиметрах. Также используем дополнительную переменную все наша программа готова, прежде чем экспериментировать с написанной нами программой. Мы должны добавить 1 действие, то есть мы должны. Сбрасывать в 0 по нажатию кнопки для того, чтобы нам иметь исходную точку. Также мы создаем тут сеть, добавляем технологический блок, который мы ранее использовали в об стоп лист. Антиконтроллера активироваться у нас, этот болт будет по нажатию кнопки кнопку. Мы повесим на вход и 0 она-2. Также мы используем аппаратный идентификатор нашего счетчика, 257 и мы. Соответственно, должны задавать при нажатии кнопки новое значение, которое равно 0 чтобы была какая то начальная стартовая точка отсчета. Теперь мы закачиваем программу и смотрим. Как она работает, вот они наши вычисления. То есть мы умножаем число пи на наш диаметр 81 миллиметр полученное значение? Мы делим на 2000 импульсов, получаем вес импульса равным. Вот это 0 ты-107, 1 мм, то есть на каждый импульс, у нас идет приращение расстояния на 0 и так далее. Здесь есть еще ряд знаков после запятой, вот это значение вам могли задать. Сразу физически сюда при умножении и не вычислять каждый раз при работе контроллера. Но это нам пригодится просто для общего понимания, как это все работает, теперь мы проверим. Что у нас срабатывает обновление при нажатии кнопки и попробуем измерить длину нашей линейки? Напомню, что здесь находится величина в миллиметрах, немного покрутим наш диск.
12:54 Видим, что значение меняется, теперь нажмем нашу кнопку сброс для того, чтобы убедиться, что значение обновляется. А теперь измерим длину нашей линейки, опять же, с учетом достаточно большой погрешности, которую мы получим. Получили значение 401 миллиметр, надо понимать, что наша линейка прогудуемая часть равна 40 см. То есть 400 мм теперь то же самое сделаем с ширина нашего стола, сбросили значение и измеряем.
13:40 Получили значение 703 мм. Теперь разберемся с событиями, удалим ненужные нам участки программы, вернемся к параметрированию наших входов. Включим внешний вход сброса, так как инкоменталям кода у нас имеет МП на выходы. Обязательно поставить здесь актив Лол и. Включим вот это событие, то есть это событие происходит, когда на внешний вход сброса, то есть импровизировал. В нашем случае возникает аппаратное пирование, это пирование, мы сейчас добавим это также дополнительный программный блок.
14:20 Который находится находится здесь после того, как мы его добавили и запишем здесь определенный функционал, то есть мы просто будем некий бить и. Устанавливать в единичку, например, литик памяти 600, - х. 600% - все-10, и пропишем обработку данного Витека. Мы сделаем следующий участок, программа При. Тяжелии на входе обнуления зеркала сигнала, то есть у которого будет нас появляться раз в год и 60 ты поворота энкодера, мы будем зажигать лампочку. На 5 секунд, соответственно, используем установленный нами видик в аппаратах, прерываниях, битик м 600, и по этому видео будем включать таймер.
15:02 На 5 секунд и от этого таймера у нас будет зажигаться гореть лампочка. Работа зеленая лампочка, которая у нас находится на выходе ку 0 она1 и. Соответственно, как только у нас это аппаратное прерывание сработало, мы его тут же сбрасываем, чтобы обеспечить как раз работу в течение 5 секунд.
15:23 Загружаем программу в блок контроллер, теперь смотрим, как у нас работает программа. То есть, прошу обращать внимание на лампочку, работа, то есть у нас энкодер, когда мы поворачиваем на 360 карты. Проходит через импульс Зеро, и лампочка загорается на 5 секунд. 5 Секунд она светится и гаснет. Также еще раз повторю, то есть 360 или мы проходим, доходим до импульса обновления. Этот импульс отнуления вызывает перроне, и соответственно это прервание вызывает установку Витека, который у нас используется. Для работы таймера, который в течение 5 секунд зажигает эту лампочку и проведем финальный эксперимент. Посадил Ленкодер на овалы двигателя с помощью термоусадочной трубки, и, по сути дела, мы сейчас. Будем измерять частоту вращения двигателя более точно, чем в предыдущий раз с нашими самодельными энкодерами. Если вы внимание, обратите на предыдущий ролик по инкодерам и на астроформу асограммы вы видите. Что я там немножко слукавил, то есть у нас шайбу в 1 месте были очень близко друг к другу и, по сути дела. Вместо 4 импульсивных коднеров у нас получился 3 импульсный, им Клодер покажу, как это работает.
16:41 Сейчас мы изменим программу для того, чтобы измерить реальную частоту вращения двигателя более точно, чем в предыдущем видео. В прошлый раз мы измеряли количество импульсов, теперь мы измеряем частоту, у нас есть время измерения. Период измерения пусть будет 1 секунда. Мы на это будем ориентироваться, то есть для того, чтобы нам определить частоту вращения в оборотах минуту. Мы должны это учитывать и переходим к программе, теперь мы должны написать по.
17:07 Грамму обработки, то есть надо понимать, что значение переменной у нас в импульсах за секунду. Как мы сделали в конфигурации в проимитировании аппаратной части, естественно, мы эту переменную. Должны поделить на 2000 и потом умножить на 60. Но для того, чтобы не потерять точность, мы должны сначала эту величину целую перевести в число с плавающей точкой, то есть конвертировать, придумаем.
17:33 Придумаем переменную вещественную. Временную, и теперь будем с ней работать. Сначала мы это число делим на 2000, а потом умножаем на 60. Я это делаю также по отдельности, и в программе каждый раз будет выполняться только для наглядности. Чтобы было видно каждый этап вычислений. Программа готова, закачиваем в контроллер и смотрим, как она работает, стартуем вращение двигателя на частоте 15 герц. Как вы видите на экране примерное количество оборотов? Минуту у нас 448 450 или около того можно частоту эту порегулировать.
18:30 Эксперимент закончен, в этом видео мы освоили аппаратное. В различных ракурсах также у нас был в усложнении и виде того, что мы подключали инструментальный Анкодер не со стандартными ПНП выходами, а с нестандартными НПН выходами для данного. Контроллера и провели ряд полезных экспериментов. Все спасибо, надеюсь, что видео было полезным. Делитесь видео с друзьями, смотрите другие видео, подписывайтесь на канал до свидания.
Расшифровка сделана автоматически (Yandex SpeechKit) и может содержать ошибки в терминах.
Подключаем инкрементальный энкодер. Пишем программу простого измерителя расстояния. Измеряем частоту вращения двигателя и изучаем события-прерывания.