а как же тогда программу писать? Ведь чтобы оперировать этими переменными надо их описать, иначе работать не будет... Не могли бы вы объяснить как так?
а как же тогда программу писать? Ведь чтобы оперировать этими переменными надо их описать, иначе работать не будет... Не могли бы вы объяснить как так?
Чтобы понять рекурсию нужно понять рекурсию
Конечно.
Есть 2 варианта работы с переменными:
1. Объявлять в конфигурации ПЛК.
2. Объявлять в программе через МЭК адрес (те самые AT %...). Есть такая строчка в автодеклараторе.
А дальше в программе нажимает е волшебную кнопку F2.
Если переменные объявили в Конфигурации ПЛК - они в глобальных.
всем спасибо за ответы - для порядка объявил все переменные в глобальных, подцепил OPC, мастерскаду - сижу играюсь
Правда возник вопрос, как реализовать дистанционное включение/выключение исполнения программы в контроллере. Просто у оператора в скаде должна быть возможность переключаться между автоматическим и ручным (вкл исполнение и выкл соответственно) режимами. Я так понимаю это как-то надо прописать программно и так же посредством переменной типа BOOL включать/выключать программу) щас буду рыть литературу на предмет как это сделать)) Если подскажете буду очень рад))
Дело в том что оператор должен иметь возможность управления только частью обрудования. В то же время например обогрев шкафа управления(на улице будет стоять) должен включаться/выключаться автоматически, без ведома оператора.
есть мысль ввести переменную AUTO_MANUAL и в начале программы проверять в коком она состоянии, если TRUE то перейти на метку 1(и пошла выполняться программа) если FALSE то проскакивает момент исполнения основной части программы и переходит сразу к части обогрева шкафа.
а эту переменную AUTO_MANUAL и будет руками изменять оператор)) Если она FALSE, то можно спокойно вручную управлять оборудованием))
Метод может и тупой но это единственное что я придумал)
Чтобы понять рекурсию нужно понять рекурсию
хм...очень правильная мысль про авторежим в приоритет...
не могли бы вы подробнее описать как работает ваша идея?
У меня получается такая идея:
IF AUTO_MANUAL=TRUE THEN GOTO <метка1>;
ELSE GOTO <метка2>;
<метка1>
IF SVET<50 THEN A:=TRUE;
ELSE A:=FALSE;
END_IF;
IF SVET<40 THEN B:=TRUE;
ELSE B:=FALSE;
END_IF;
IF SVET<=20 THEN C:=TRUE;
ELSE C:=FALSE;
END_IF;
<метка2>
IF T_SHKAF<3 THEN OBOGREV:=TRUE;
ELSIF T_SHKAF>5 THEN OBOGREV:=FALSE;
END_IF;
не понял как тоже самое сделать только через if без применения меток((
можно ещё сделать через while:
WHILE AUTO_MANUAL=FALSE DO (*выполяется только обогрев пока включён ручной режим*)
IF T_SHKAF<3 THEN OBOGREV:=TRUE;
ELSIF T_SHKAF>5 THEN OBOGREV:=FALSE;
END_IF;
END_WHILE;
IF SVET<50 THEN A:=TRUE; (*исполнение основной программы*)
ELSE A:=FALSE;
END_IF;
IF SVET<40 THEN B:=TRUE;
ELSE B:=FALSE;
END_IF;
IF SVET<=20 THEN C:=TRUE;
ELSE C:=FALSE;
END_IF;
Чтобы понять рекурсию нужно понять рекурсию
вот зараза))) не даёт специально зациклить через while(((
Чтобы понять рекурсию нужно понять рекурсию
swerder
в кейсе надо чтоб переменная AUTO_MANUAL была целого типа, а у меня она получается BOOL.
Как сделать чтоб она была целого не могу сообразить, ведь мне этой переменной надо управлять с команды через MasterSCADA.
Чтобы понять рекурсию нужно понять рекурсию
bool_to_byte пробовали?
пишите прям
case bool_to_byte(AUTO_MANUAL) of
0: ;
1: ;
end_case;
должно работать