если дискретность порядка 1 мс, то единственный способ решения - использование быстрых входов - выходов и прерываний. (старик Котельников говорил что дискретизация минимум в два раза чаще чем требуемая частота ). Точность отработки прерываний (20мкс) достаточно высокая, вот внутри прерывания и делайте счетчик количества прерываний - это будет ваш таймер, рассчитать сколько прерываний будет за мс вроде не сложно.... циклы for? while и прочие способы задержек должны быть прочно забыты при программировании ПЛК. Быстрые выходы регенерят сразу после завершения очередного прерывания, поэтому можно и фазоимпульсное делать ))) но их только 4 штуки. Да, важным моментом является синхронизация переменных прерывания и основной программы.... если не хотите чудес, то переменные прерывания должны считываться в основной цикл посредством своих копий, один раз в начале цикла.
Можно конечно извратиться и установив длительность основного цикла 0 мс, выполнять отсчет пауз по часам реального времени... но флуктуации будут большими...




Ответить с цитированием
