Как в PMP20 обновить вход или выход немедленно?
Обычно контроллер работает с образом процесса: входы читаются один раз в начале цикла, выходы выдаются в конце. Для случаев, когда ждать конца цикла нельзя, есть две команды немедленного доступа — LDD читает состояние физической клеммы прямо сейчас, OUTD немедленно выдаёт состояние на выходную клемму.
Где это нужно:
- Длинный цикл сканирования. Если программа объёмная и цикл достигает десятков миллисекунд, между появлением сигнала и реакцией выхода проходит до двух циклов. Для отсечки, отрезки, остановки по метке эта задержка уже критична.
- Внутри подпрограммы прерывания. Прерывание отрабатывает между циклами, и образ процесса в этот момент не обновляется. Чтение обычной командой даст состояние на начало цикла, а не фактическое.
- Ожидание внутри одной цепи. Когда программа в цикле ждёт изменения сигнала, обычная команда всегда читает одно и то же значение — образ не меняется до конца цикла.
Чем платим. Каждое обращение к физической клемме занимает время, поэтому массово заменять обычные команды на немедленные нельзя: цикл вырастет. Немедленный доступ применяют точечно, к двум-трём критичным сигналам.
Что учесть при отладке: значение, прочитанное немедленной командой, может отличаться от того, что показывает монитор среды, — монитор отображает образ процесса. Это нормально и не является ошибкой.
Если задержка нужна ещё меньше, чем даёт немедленный доступ, задачу решают уже не так: быстрые импульсы считает высокоскоростной счётчик, а реакция за пределами цикла делается входом внешнего прерывания.
Прикреплённая документация
Георгий Жуков
Ведущий инженер