Сообщение от
Рашид
Здравствуйте. Простая задача - покрутить шаговый двигатель. Надо три сигнала - разрешение (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 мс (но это не точно). И что делать с этим?
Тестовый проект во вложении.