Просмотр полной версии : ПЛК110-60.К-М (М02) и высокочастотный таймер - быстрый выход. Срабатывает вачдог.
Здравствуйте. Простая задача - покрутить шаговый двигатель. Надо три сигнала - разрешение (ENA), Направление (DIR) - медленные сигналы, обычные выхода справятся и тактовый (PUL), быстрый, порядка 5 кГц (а лучше больше). Знаю, что быстрые входа/выхода у ПЛК110 имеются, решил использовать связку высокочастотный таймер (прерывание) плюс непосредственная запись в быстрые выхода. Скорость моторчика меняю изменяя период вызова таймера (с шагом 20 мкс, разумеется, хотя это довольно дискретно), далее инициализирую таймер. В обработке прерывания от таймера тупо инвертирую сигнал на первом быстром выходе, таким образом и получаю искомый меандр. В самой программе реализовал что-то вроде плавного разгона (меняю период вызова таймера от предустановленного максимума до минимума. Делаю это через заданный интервал времени, для начала выбрал 100 мс). Так вот, если я начинаю более шустро, чем каждые 100 мс, понижать период таймера, ПЛК зависает, перезагружается. Такое иногда случается и на 100 мс. Аналогично с подключенным драйвером шагового двигателя и без него (было подозрение на помехи от движка. Нет.). Моторчик, кстати, раскручивается (но хотелось бы темп ускорить). В debug.txt появляется в итоге запись:
2022. 1.24 14:23:19 # 0 KERNEL LOADED
2022. 1.24 14:23:19 # 17 E PLC was reset by watchdog!
2022. 1.24 14:23:20 # 2 PLC STOPED
2022. 1.24 14:23:20 # 3 M
Last run module Id =834271162
2022. 1.24 14:23:20 # 3 M Last post module Id =-1430524739
2022. 1.24 14:23:20 # 3 M local_status =10020915
2022. 1.24 14:23:20 # 3 M local data #1 =baef29e7
2022. 1.24 14:23:20 # 3 M local data #2 =f8017def
2022. 1.24 14:23:20 # 3 M local data #3 =6ecf71cf
2022. 1.24 14:23:20 # 3 M local data #4 =f3edd1e9
Из чего можно сделать вывод, что ПЛК повис и был перезагружен. От чего такое может быть? Видимо, это происходит, если инициализируешь высокочастотный таймер чаще, чем раз в 100 мс (но это не точно). И что делать с этим?
Тестовый проект во вложении.
Во вложении архив, в котором файлы специальной программы управления ШД для Овен 110М2.
Делаете полный заводской сброс своего ПЛК, файлы PRU0.prg и PRU1.prg просто копируете в корень файловой системы ПЛК, третий файдл экспортируете в проект. Будет добавлено несколько POU для управления сопроцессора быстрых входов\выходов ПЛК.
И не нужно будет использовать всякие таймеры.
A.Simonov
25.01.2022, 11:28
Здравствуйте. Простая задача - покрутить шаговый двигатель. Надо три сигнала - разрешение (ENA), Направление (DIR) - медленные сигналы, обычные выхода справятся и тактовый (PUL), быстрый, порядка 5 кГц (а лучше больше). Знаю, что быстрые входа/выхода у ПЛК110 имеются, решил использовать связку высокочастотный таймер (прерывание) плюс непосредственная запись в быстрые выхода. Скорость моторчика меняю изменяя период вызова таймера (с шагом 20 мкс, разумеется, хотя это довольно дискретно), далее инициализирую таймер. В обработке прерывания от таймера тупо инвертирую сигнал на первом быстром выходе, таким образом и получаю искомый меандр. В самой программе реализовал что-то вроде плавного разгона (меняю период вызова таймера от предустановленного максимума до минимума. Делаю это через заданный интервал времени, для начала выбрал 100 мс). Так вот, если я начинаю более шустро, чем каждые 100 мс, понижать период таймера, ПЛК зависает, перезагружается. Такое иногда случается и на 100 мс. Аналогично с подключенным драйвером шагового двигателя и без него (было подозрение на помехи от движка. Нет.). Моторчик, кстати, раскручивается (но хотелось бы темп ускорить). В debug.txt появляется в итоге запись:
2022. 1.24 14:23:19 # 0 KERNEL LOADED
2022. 1.24 14:23:19 # 17 E PLC was reset by watchdog!
2022. 1.24 14:23:20 # 2 PLC STOPED
2022. 1.24 14:23:20 # 3 M
Last run module Id =834271162
2022. 1.24 14:23:20 # 3 M Last post module Id =-1430524739
2022. 1.24 14:23:20 # 3 M local_status =10020915
2022. 1.24 14:23:20 # 3 M local data #1 =baef29e7
2022. 1.24 14:23:20 # 3 M local data #2 =f8017def
2022. 1.24 14:23:20 # 3 M local data #3 =6ecf71cf
2022. 1.24 14:23:20 # 3 M local data #4 =f3edd1e9
Из чего можно сделать вывод, что ПЛК повис и был перезагружен. От чего такое может быть? Видимо, это происходит, если инициализируешь высокочастотный таймер чаще, чем раз в 100 мс (но это не точно). И что делать с этим?
Тестовый проект во вложении.
Добрый день.
В ветке конфигурации, зайдите в настройки ПЛК и попробуйте там увеличить минимальное время цикла с 1мс до 10мс, скажем, и посмотреть на результат.
Во вложении архив, в котором файлы специальной программы управления ШД для Овен 110М2.
Делаете полный заводской сброс своего ПЛК, файлы PRU0.prg и PRU1.prg просто копируете в корень файловой системы ПЛК, третий файдл экспортируете в проект. Будет добавлено несколько POU для управления сопроцессора быстрых входов\выходов ПЛК.
И не нужно будет использовать всякие таймеры.
Попробую, спасибо. Но что не так с прерываниями по таймеру, тоже хотелось бы узнать. Мало ли, приспичит под быстрые процессы использовать.
Добрый день.
В ветке конфигурации, зайдите в настройки ПЛК и попробуйте там увеличить минимальное время цикла с 1мс до 10мс, скажем, и посмотреть на результат.
Увеличил. Так же ребутнулся ПЛК после нескольких прогонов инициализаций таймера (с интервалом в 100 мс).
Во вложении архив, в котором файлы специальной программы управления ШД для Овен 110М2.
Делаете полный заводской сброс своего ПЛК, файлы PRU0.prg и PRU1.prg просто копируете в корень файловой системы ПЛК, третий файдл экспортируете в проект. Будет добавлено несколько POU для управления сопроцессора быстрых входов\выходов ПЛК.
И не нужно будет использовать всякие таймеры.
.... а есть какой-нибудь мануал к этому или что-нибудь, чтобы разобраться с содержимым? Скопировал, установил, но пока не разобрался, что к чему.
Трофимов Артем
25.01.2022, 13:10
вы переинициализируете таймер прерывания без его остановки - надо выполнить ClearIRQ перед новым SetIRQ
вы переинициализируете таймер прерывания без его остановки - надо выполнить ClearIRQ перед новым SetIRQ
Да, действительно, если выполнить ClearIRQ() перед SetIRQ(TIRQ), то никаких зависаний не наблюдается. Спасибо.
Рашид
а есть какой-нибудь мануал к этому или что-нибудь, чтобы разобраться с содержимым?
Программа написана в среде HardellaIDE местными умельцами. Как такового мануала нет, надо читать про возможности среды, там объяснен принцип работы сопроцессора быстрых входов-выходов. В общих чертах - в начале цикла основной POU вызываем программу чтения из PRU, выполняем свою программу, в конце цикла основной POU вызываем программу записи в PRU. Программа в PRU выполняется независимо от основной программы на собственном физическом сопроцессоре, причем не использует даже основной процессор.
--
А в вашем способе есть один ключевой недостаток - отсутствие времени разгона\торможения ШД. Это может привести к выходу из строя драйвера ШД при останове.
Рашид
Программа написана в среде HardellaIDE местными умельцами. Как такового мануала нет, надо читать про возможности среды, там объяснен принцип работы сопроцессора быстрых входов-выходов. В общих чертах - в начале цикла основной POU вызываем программу чтения из PRU, выполняем свою программу, в конце цикла основной POU вызываем программу записи в PRU. Программа в PRU выполняется независимо от основной программы на собственном физическом сопроцессоре, причем не использует даже основной процессор.
--
А в вашем способе есть один ключевой недостаток - отсутствие времени разгона\торможения ШД. Это может привести к выходу из строя драйвера ШД при останове.
Понял, буду изучать. Но по поводу недостатка, я как раз и пытался его обойти, реализовав разгон (что нужен разгон стало ясно в самом начале, когда я попытался шустро прокрутить ШД, кроме визга и писка ничего не вышло). В этой тестовой программе не пытаюсь сразу на всю катушку крутить ШД, а формирую меандр с нарастающей частотой частотой от 1 кГц до 5 кГц (с шагом 38 Гц). В итоге мотор довольно плавно раскручивается, без срывов, работает весьма шустро. Но остановку плавную пока не делал, это да, сейчас просто мотор колом встаёт.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot