Как измерить цикл сканирования PMP20 из программы?
Контроллер измеряет цикл сам и хранит три значения в системных регистрах: SD010 — текущий цикл сканирования, SD011 — минимальный за время работы, SD012 — максимальный. Единица измерения — микросекунды.
Зачем эти три числа нужны на объекте:
- Текущий цикл показывает нагрузку прямо сейчас. Его выводят на сервисный экран панели вместе с версией программы — это первое, что спрашивают при разборе странного поведения машины.
- Максимальный цикл — самое ценное значение. Именно он определяет, успевает ли логика за процессом: если максимум в разы больше типичного, значит есть редкая, но тяжёлая ветка программы — цикл с большим числом повторов, обработка массива, обмен по связи.
- Минимальный цикл служит точкой отсчёта: разница между минимумом и максимумом показывает неравномерность нагрузки.
Что делать с большим циклом. Проверьте циклы FOR-NEXT с большим числом повторов, обмен по связи в основной программе и последовательности BLOCK. Обмен по Modbus разносят по циклам: один запрос за цикл вместо всей очереди сразу. Тяжёлые вычисления выносят в редко выполняемые ветки по условию.
Верхняя граница задана сторожевым таймером: его уставка лежит в системном flash-регистре SFD2 и по умолчанию равна 200 мс. Если цикл превысит уставку, контроллер зафиксирует срабатывание сторожевого таймера, и в регистре SD450 появится значение 1.
Для измерения интервалов внутри цикла регистры времени цикла не годятся — там нужен высокоскоростной кольцевой счётчик с шагом 0,1 мс или точные таймеры ET.
Прикреплённая документация
Георгий Жуков
Ведущий инженер