Программирование энкодера в SIEMENS Tia Portal

Введение

Энкодер в промышленной автоматике — это «глаза» системы управления. Используется в качестве обратной связи в ПЛК, к примеру: на какой угол повернулся вал электродвигателя, в какой точке находится механизм, с какой скоростью и в каком направлении он движется.

Типы энкодеров:

  • Инкрементальные — считают шаги от момента включения. При отключении «забывают» позицию (нужна калибровка/возврат в «дом».
  • Абсолютные — всегда знают свою точную координату. При отключении питания, перемещении вала и повторном включении передают актуальные данные.

Подключение

В примере рассматривается инкрементальный энкодер с двухфазным выходом (каналы A и B) без использования индексной Z-метки. Выходной каскад выполнен на транзисторе типа PNP с открытым коллектором.
Энкодер подключен к высокоскоростным входам ПЛК Siemens S7-1200 CPU 1215C DC/DC/DC.

Красный и черный провода энкодера необходимо подключить к блоку питания, в примере это Mean Well NDR-240-24 в выходным напряжением 24 VDC. Желтый провод — сигнал А, зеленый провод — сигнал В подключаются к высокоскоростным входам ПЛК — DI0.0 и DI0.1

Программирование

В среде разработки 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» определяет область памяти куда производится запись значения с высокоскоростного счетчика.

Находясь в меню «Properties» перейти к вкладке «General» ➢ параметр настройки высокоскоростных входов «High speed counters (HSC)» ➢ нажать «HSC1» ➢ в открывшихся параметрах активировать высокоскоростной счетчик поставив ✔ «Enable this high speed counter».
Раздел «Hardware inputs» определяет физические входа высокоскоростного счетчика у контроллера

7. Вернуться к папке «PLC tags» ➢ создать таблицу «Bit_Memory» ➢ добавить в нее переменную:

  • HSC_1CV — Значение с высокочастотного входа счетчика 1. Назначить этой переменной тип Dint и область памяти %ID1000;
Вернуться к папке «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 — расчетное значение длины в м.;
Перейти к папке «PLC data types» ➢ создать тип данных «Encoder» ➢ прописать переменные

9. Создать блок данных «DB_Encoder» ➢ добавить в него переменную «Encoder_M1» с типом данных «Encoder».

Создание типа данных энкодер и блока данных энкодера необходимо с целью масштабирования системы когда используется больше одного высокоскоростного счетчика HSC.

Создать блок данных «DB_Encoder»

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. Необходим для инициализации счетчика значением, сохраненным перед последним выключением ПЛК

Создать организационный блок «OB_Encoder_Startup» ➢ добавить инструкцию «CTRL_HSC»
Организационный блок «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. Прописать математические фенкции расчета: длины окружности; веса одного импульса; пройденной длины в миллиметрах; пройденной длины в метрах.

Создать функциональный блок «FB_Encoder»
Прописать входа
Прописать функции расчета: длины окружности; веса одного импульса; пройденной длины в миллиметрах; пройденной длины в метрах

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;
Передача значения счетчика энкодера в переменную блока данны Обнуление счетчика энкодера
Раскрыть «Network 2» ➢ перенести из «Project Tree» функциональный блок «FB_Encoder» ➢ привязать входы и выходы

Написание программы окончено, необходимо код в работе

Проверка работы

1. В «Project tree» выделить «CPU [CPU 1215C DC/DC/DC]» ➢ нажать кнопку компиляции ➢ при возникших ошибках устранить их.

2. Нажать кнопку загрузки проекта в контроллер ➢ в окне «Extended download to device» выполнить поиск подключенного контроллера нажатием кнопки «Start search» ➢ при успешном поиске нажать кнопку «Load» ➢после загрузки нажать кнопку «Finish».

В «Project tree» выделить «CPU [CPU 1215C DC/DC/DC]» ➢ нажать кнопку компиляции ➢ при возникших ошибках устранить их
Нажать кнопку загрузки проекта в контроллер
в окне «Extended download to device» выполнить поиск подключенного контроллера нажатием кнопки «Start search».
Нажать кнопку «Load».

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, что практически идентично измеренному расстоянию.

В блоке «Main» подключиться к режиму онлайн мониторинга нажатием «Go online», а затем символ очков «Monitoring on/off
Произвести сброс текущего значения счетчика активацией бита «DB_Encoder».Encoder_M1.In_Reset_counts» и его последующего сброса.
Задать входные параметры функционального блока «FB_Encoder» в «Network 2».
Произвести 1 полный оборот энкодера и сравнить полученный результат с расчетным

При измерения угла поворота вместо пройденного расстояния, в текущей программе достаточно изменить только функциональный блок FB_Encoder, остальные области программы не требуют исправления.

Источник: Khan_ASU