AndrySS
Назначаем одному входу булеву переменную с именем Mode.
Пишем PRG с именем ManualMode, где прописана логика работы в ручном режиме.
Пишем PRG с именем AutoMode, где прописана логика работы в автоматическом режиме.
В PLC_PRG пишем следующее:
IF Mode THEN ManualMode();
ELSE AutoMode();
END_IF;
Как-то так.
Для надежности можно назначить два входа каждый для активации своего режима, но физически они должны быть сделаны на трехпозиционном переключателе, причем при нуле на каждом входе должны сбрасываться необходимые переменные и регистры для исключения нештатных ситуаций.
ЗЫ: Все имена в примере - условные.
zendo057, спасибо! Именно так я и сделал.
Но в данном случае возникает другая проблема.
По технологии насосы/задвижки должны запускаться и останавливаться в определенной последовательности, т.е. друг за другом. А при переключении режимов все переменные сбрасываются в 0.
Например, при включенном режиме АВТ и при нажатии оператором кнопки ПУСК открывается ЗАДВИЖКА1, включается НАСОС1, открывается ЗАДВИЖКА2, открывается ЗАДВИЖКА3, происходит циркуляция раствора в течении какого-то времени, затем, закрывается ЗАДВИЖКА3, закрывается ЗАДВИЖКА2, отключается НАСОС1, закрывается ЗАДВИЖКА1. В автомате отрабатывает все отлично.
Если же оператор во время процесса (когда процесс уже работает в автомате) хочет переключить режим с АВТ на РУЧ, то происходит сброс всех управляющих (выходных) переменных и механизмы останавливаются/закрываются одновременно. Т.е. последовательность закрытия не соблюдается и происходит нарушение технологического режима.
Как быть в этом случае?
Делаю это с помощью основной программы-переключателя, на которой висит ввод-вывод и аварийные события.
Программы "автомат" "ручной" организуются в виде отдельных POU, вызываемых по событию.
При таком написании нужно воздержаться от применения таймеров типа TOF (они "замораживаются" при отсутствии вызовов программы).