Введение
Энкодер в промышленной автоматике — это «глаза» системы управления. Используется в качестве обратной связи в ПЛК, к примеру: на какой угол повернулся вал электродвигателя, в какой точке находится механизм, с какой скоростью и в каком направлении он движется.
Типы энкодеров:
- Инкрементальные - считают шаги от момента включения. При отключении «забывают» позицию (нужна калибровка/возврат в «дом».
- Абсолютные - всегда знают свою точную координату. При отключении питания, перемещении вала и повторном включении передают актуальные данные.
Подключение
В примере рассматривается инкрементальный энкодер с двухфазным выходом (каналы A и B) без использования индексной Z-метки. Выходной каскад выполнен на транзисторе типа PNP с открытым коллектором.
Энкодер подключен к высокоскоростным входам ПЛК Siemens S7-1200 CPU 1215C DC/DC/DC.
Программирование
В среде разработки Tia Portal создать новый проект и добавить контроллер CPU.
1. В "Project tree", открыть "PLC tags" ➢ создать таблицу "Discrete_inputs".
2. В "Project tree" перейти к папке "CPU [CPU 1215C DC/DC/DC]" ➢ "Device configuration" ➢ выделить контроллер ➢ в меню "Properties", вкладка "IO tags" ➢ назначить имена входным переменным: DI_Encoder_A - %I0.0 и DI_Encoder_B - %I0.1
3. Находясь в меню "Properties" перейти к вкладке "General" ➢ раздел настройки высокоскоростных входов "High speed counters (HSC)" ➢ нажать "HSC1" ➢ в открывшихся параметрах активировать высокоскоростной счетчик поставив ✔ "Enable this high speed counter".
4. В разделе "Function" установить следующие параметры:
- Type of counting - count (тип высокоскоростного входа - счетчик);
- Operating phase - A/B counter (рабочие фазы - А/В счетчик);
- Initial counting direction - Count up (начальное направление счета - счет вверх);
5. Раздел "Hardware inputs" определяет физические входа высокоскоростного счетчика у контроллера.
6. Раздел "I/O addresses" определяет область памяти куда производится запись значения с высокоскоростного счетчика.
7. Вернуться к папке "PLC tags" ➢ создать таблицу "Bit_Memory" ➢ добавить в нее переменную:
- HSC_1CV - Значение с высокочастотного входа счетчика 1. Назначить этой переменной тип Dint и область памяти %ID1000;
8. В "Project tree" перейти к папке "PLC data types" ➢ создать тип данных "Encoder" ➢ прописать следующие переменные:
- In_Value - значение полученное с высокоскоростного входа для записи после включения ПЛК;
- In_Reset_counts - Бит обнуления подсчета;
- In_Quantity_imp - количество импульсов на оборот;
- In_Diamert_Circle - длина окружности в мм.;
- Out_Lenght_mm - расчетное значение длины в мм.;
- Out_Lenght_m - расчетное значение длины в м.;
9. Создать блок данных "DB_Encoder" ➢ добавить в него переменную "Encoder_M1" с типом данных "Encoder".
Создание типа данных энкодер и блока данных энкодера необходимо с целью масштабирования системы когда используется больше одного высокоскоростного счетчика HSC.
10. Создать организационный блок "OB_Encoder_Startup" ➢ добавить инструкцию "CTRL_HSC" ➢ прописать следующие входа:
- HSC - "Local~HSC_1" - указание к какому высокоскоростному счетчику обращаться инструкции;
- DIR - True - включение нового направления подсчета;
- CV - True - включение нового значения счетчика;
- RV - False - включение нового перекрестного значения (не задано);
- PERIOD - False - включение нового периода изменения частоты (не задано);
- NEW_DIR - 1 - направление счета вверх;
- NEW_CV - "DB_Encoder".Encoder_M1.In_Value - новое значение счетчика;
- NEW_RV - 0 - новое перекрестное значение (не задано);
- NEW_PERIOD - 0 - новый период изменения частоты (не задано);
Организационный блок "OB_Encoder_Startup" исполняется один программный цикл при переходе ПЛК из режима STOP в режим RUN. Необходим для инициализации счетчика значением, сохраненным перед последним выключением ПЛК.
11. Создать функциональный блок "FB_Encoder" ➢ прописать следующие переменные:
Input
- In_Value - DInt - значение полученное с высокоскоростного входа;
- In_Quantity_imp - Int - количество импульсов на оборот;
- In_Diametr_circle - Real - длина окружности вала в мм;
Output
- Out_Lenght_mm - Real - расчетное значение длины в миллиметрах;
- Out_Lenght_m - Real - расчетное значение длины в метрах;
Static
- Circumreference - Real - Расчетное значение длины окружности;
- Impulse_Weight - Real - Вес одного импульса (пройденная длина за 1 имп.);
12. Прописать математические фенкции расчета: длины окружности; веса одного импульса; пройденной длины в миллиметрах; пройденной длины в метрах.
13. Перейти в блок "Main" ➢"Network 1" ➢ добавить инструкции:
- MOVE - запить значения с высокоскоростного счетчика в блок данных. Необходимо для вызова последнего значения из блока данных при включении ПЛК;
- CTRL_HSC - принудительное обнуление счетчика. Используется для калибровки или сбросе в "нулевой точке".
14. Раскрыть "Network 2" ➢ перенести из "Project Tree" функциональный блок "FB_Encoder" ➢ привязать входы и выходы:
- In_Value - "DB_Encoder".Encoder_M1.In_Value;
- In_Quantity_imp - "DB_Encoder".Encoder_M1.In_Quantity_imp;
- In_Diametr_circle - "DB_Encoder".Encoder_M1.In_Diamert_Circle;
- Out_Lenght_mm - "DB_Encoder".Encoder_M1.Out_Lenght_mm;
- Out_Lenght_m - "DB_Encoder".Encoder_M1.Out_Lenght_m;
Написание программы окончено, необходимо код в работе
Проверка работы
1. В "Project tree" выделить "CPU [CPU 1215C DC/DC/DC]" ➢ нажать кнопку компиляции ➢ при возникших ошибках устранить их.
2. Нажать кнопку загрузки проекта в контроллер ➢ в окне "Extended download to device" выполнить поиск подключенного контроллера нажатием кнопки "Start search" ➢ при успешном поиске нажать кнопку "Load" ➢после загрузки нажать кнопку "Finish".
3. В блоке "Main" подключиться к режиму онлайн мониторинга нажатием "Go online", а затем символ очков "Monitoring on/off" ➢ произвести сброс текущего значения счетчика активацией бита "DB_Encoder".Encoder_M1.In_Reset_counts" и его последующего сброса ➢ задать входные параметры функционального блока "FB_Encoder" в "Network 2":
- "DB_Encoder".Encoder_M1.In_Quantity_imp - количество импульсов на оборот энкодера (в примере 600 имп./об.)
- "DB_Encoder".Encoder_M1.In_Diamert_Circle - диаметр подключенного к энкодеру устройства (в примере 107 мм)
4. Произвести 1 полный оборот энкодера и сравнить полученный результат с расчетным. Блок "FB_Encoder" на выходе "OUT_Lenght_mm" отдал значение 338, что практически идентично измеренному расстоянию.
При измерения угла поворота вместо пройденного расстояния, в текущей программе достаточно изменить только функциональный блок FB_Encoder, остальные области программы не требуют исправления.