Страница 14 из 1041 ПерваяПервая ... 4121314151624641145141014 ... ПоследняяПоследняя
Показано с 131 по 140 из 10404

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #131

    По умолчанию

    а как же тогда программу писать? Ведь чтобы оперировать этими переменными надо их описать, иначе работать не будет... Не могли бы вы объяснить как так?
    Чтобы понять рекурсию нужно понять рекурсию

  2. #132

    По умолчанию

    Цитата Сообщение от S.A.D. Посмотреть сообщение
    а как же тогда программу писать? Ведь чтобы оперировать этими переменными надо их описать, иначе работать не будет... Не могли бы вы объяснить как так?
    Конечно.
    Есть 2 варианта работы с переменными:
    1. Объявлять в конфигурации ПЛК.
    2. Объявлять в программе через МЭК адрес (те самые AT %...). Есть такая строчка в автодеклараторе.

    А дальше в программе нажимает е волшебную кнопку F2.
    Если переменные объявили в Конфигурации ПЛК - они в глобальных.

  3. #133

    По умолчанию

    всем спасибо за ответы - для порядка объявил все переменные в глобальных, подцепил OPC, мастерскаду - сижу играюсь
    Правда возник вопрос, как реализовать дистанционное включение/выключение исполнения программы в контроллере. Просто у оператора в скаде должна быть возможность переключаться между автоматическим и ручным (вкл исполнение и выкл соответственно) режимами. Я так понимаю это как-то надо прописать программно и так же посредством переменной типа BOOL включать/выключать программу) щас буду рыть литературу на предмет как это сделать)) Если подскажете буду очень рад))

    Дело в том что оператор должен иметь возможность управления только частью обрудования. В то же время например обогрев шкафа управления(на улице будет стоять) должен включаться/выключаться автоматически, без ведома оператора.
    есть мысль ввести переменную AUTO_MANUAL и в начале программы проверять в коком она состоянии, если TRUE то перейти на метку 1(и пошла выполняться программа) если FALSE то проскакивает момент исполнения основной части программы и переходит сразу к части обогрева шкафа.
    а эту переменную AUTO_MANUAL и будет руками изменять оператор)) Если она FALSE, то можно спокойно вручную управлять оборудованием))
    Метод может и тупой но это единственное что я придумал)
    Чтобы понять рекурсию нужно понять рекурсию

  4. #134

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Глубоко имхо.
    При переходе в ручной режим постоянно слать в какой-нить регистр какое-нить необычное число типа 25904.

    tof(in:=регистр=25904, pt:=аварийноевремядляпереходававторежим, q=>manual);
    регистр:=0;

    if manual then
    ..
    else
    ..
    end_if
    не совсем понял


    а кто знает как в ST сделать переход? А то в списке операторов для этого языка перехода не предусмотрено, хотя редактор на JMP реагирует выделив его синим, но вот сам синтаксис меток и как их объявлять не найду никак
    Чтобы понять рекурсию нужно понять рекурсию

  5. #135

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Несмотря на то, что лично я считаю отсутствие в st goto ошибкой,
    тем не менее - а зачем он тут вам ?
    IF - это и есть goto.


    Ну я имею ввиду авторежим приоритетным. Чтоб небыло неопределенного режима при потере связи.
    хм...очень правильная мысль про авторежим в приоритет...
    не могли бы вы подробнее описать как работает ваша идея?

    У меня получается такая идея:
    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;
    Чтобы понять рекурсию нужно понять рекурсию

  6. #136

    По умолчанию

    вот зараза))) не даёт специально зациклить через while(((
    Чтобы понять рекурсию нужно понять рекурсию

  7. #137

    По умолчанию

    Цитата Сообщение от S.A.D. Посмотреть сообщение
    WHILE AUTO_MANUAL=FALSE DO (*выполяется только обогрев пока включён ручной режим*)
    IF T_SHKAF<3 THEN OBOGREV:=TRUE;
    ELSIF T_SHKAF>5 THEN OBOGREV:=FALSE;
    END_IF;
    END_WHILE;
    у вас сдесь плк зациклится и будет перезагружаться
    p.s. кейсом пробуйте)

  8. #138

    По умолчанию

    swerder
    в кейсе надо чтоб переменная AUTO_MANUAL была целого типа, а у меня она получается BOOL.
    Как сделать чтоб она была целого не могу сообразить, ведь мне этой переменной надо управлять с команды через MasterSCADA.
    Чтобы понять рекурсию нужно понять рекурсию

  9. #139

    По умолчанию

    bool_to_byte пробовали?
    пишите прям
    case bool_to_byte(AUTO_MANUAL) of
    0: ;
    1: ;
    end_case;
    должно работать

  10. #140

    По умолчанию

    Цитата Сообщение от swerder Посмотреть сообщение
    bool_to_byte пробовали?
    пишите прям
    case bool_to_byte(AUTO_MANUAL) of
    0: ;
    1: ;
    end_case;
    должно работать
    большое спасибо)) Помогло)) Теперь буду знать что так можно))
    Вот ещё бы разобраться теперь как сделать чтоб контроллер переключался в автоматический режим при обрыве связи с внешним миром))
    Чтобы понять рекурсию нужно понять рекурсию

Страница 14 из 1041 ПерваяПервая ... 4121314151624641145141014 ... ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •