а как же тогда программу писать? Ведь чтобы оперировать этими переменными надо их описать, иначе работать не будет... Не могли бы вы объяснить как так?
Вид для печати
а как же тогда программу писать? Ведь чтобы оперировать этими переменными надо их описать, иначе работать не будет... Не могли бы вы объяснить как так?
Конечно.
Есть 2 варианта работы с переменными:
1. Объявлять в конфигурации ПЛК.
2. Объявлять в программе через МЭК адрес (те самые AT %...). Есть такая строчка в автодеклараторе.
А дальше в программе нажимает е волшебную кнопку F2.
Если переменные объявили в Конфигурации ПЛК - они в глобальных.
всем спасибо за ответы - для порядка объявил все переменные в глобальных, подцепил OPC, мастерскаду - сижу играюсь :D
Правда возник вопрос, как реализовать дистанционное включение/выключение исполнения программы в контроллере. Просто у оператора в скаде должна быть возможность переключаться между автоматическим и ручным (вкл исполнение и выкл соответственно) режимами. Я так понимаю это как-то надо прописать программно и так же посредством переменной типа 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;
должно работать