Программирование энкодера в SIEMENS Tia Portal
Введение
Энкодер в промышленной автоматике — это «глаза» системы управления. Используется в качестве обратной связи в ПЛК, к примеру: на какой угол повернулся вал электродвигателя, в какой точке находится механизм, с какой скоростью и в каком направлении он движется.
Типы энкодеров:
- Инкрементальные — считают шаги от момента включения. При отключении «забывают» позицию (нужна калибровка/возврат в «дом».
- Абсолютные — всегда знают свою точную координату. При отключении питания, перемещении вала и повторном включении передают актуальные данные.
Подключение
В примере рассматривается инкрементальный энкодер с двухфазным выходом (каналы 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. Прописать математические фенкции расчета: длины окружности; веса одного импульса; пройденной длины в миллиметрах; пройденной длины в метрах.



3. Перейти в блок «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, остальные области программы не требуют исправления.
Источник: Khan_ASU
