-
Подпрограммы
Собственно программа состоит из нескольких подпрограмм. К примеру, есть автоматический режим работы станка, описанный в подпрограмме avto. Соответственно, для вызова из PLC_PRG использую:
IF avtomat THEN (*Условие работы автоматического режима*)
avto();
END_IF
Включаем автоматический режим, и если условия соблюдаются, ПЛК выполняет подпрограмму avto. Но если условие перестает соблюдаться, выхода, переменные и т.д. остаются в таком состоянии, каком и были в подпрограмме avto. Мне необходимо сделать, что если условие перестанет соблюдаться, то все переменные, которые вызывались в подпрограмме avto становились FALSE. Конечно, можно сделать подпрограмму, которая будет это выполнять, но если переменных очень много, то это не очень удобно. Нельзя ли как-нибудь по другому? :)
-
В SFC есть системные флаги SFCInit и SFCReset.....
-
В ST бы что-нибудь подобное ;)
-
Вот вариант
Попробуй так:
IF avtomat THEN (*Условие работы автоматического режима*)
avto();
else
prgMan(); (*Выполняется в ручном режиме*)
END_IF
А программа prgMan() описывает работу в ручном режиме.
ЗЫ удачки:)
-
Пробовал) Собственно, так у меня и есть) Но тоже не очень удобно. Видно много хочу) совсем обленился)))
-
ещё вариант
IF avtomat THEN (*Условие работы автоматического режима*)
avto(Enabled:=True);
prgMan(Enabled:=False)
else (*Выполняется в ручном режиме*)
avto(Enabled:=False);
prgMan(Enabled:=True);
END_IF
Enabled - входная переменные в программах avto() и prgMan() и по переднему/заднему фронту соответственно переводишь программы в нужное состояние (закрытие клапанов, выключение насосов и тд.) Дальше уже ньюансы, которые от сюда невидны :-)
-
спасибо) правда сделал уже по другому, но на следующий раз пригодиться!
-
А я бы главный цикл организовал бы так:
VAR
status:int:=1;
END_VAR
CASE status OF
1: Init(); //начальная иницилизация
status:=10;
10:avto();
20:prgMan();
END_CASE
proverka();// проверяем условия работы
состояния работы изменяется протым присвоением переменной status нужного числа, после инициализации по умолчанию включается автоматический режим. Если какое либо условие не соблюдается то командой status:=20; врубается другой режим работы...