Показано с 1 по 8 из 8

Тема: Подпрограммы

  1. #1

    По умолчанию Подпрограммы

    Собственно программа состоит из нескольких подпрограмм. К примеру, есть автоматический режим работы станка, описанный в подпрограмме avto. Соответственно, для вызова из PLC_PRG использую:

    IF avtomat THEN (*Условие работы автоматического режима*)
    avto();
    END_IF

    Включаем автоматический режим, и если условия соблюдаются, ПЛК выполняет подпрограмму avto. Но если условие перестает соблюдаться, выхода, переменные и т.д. остаются в таком состоянии, каком и были в подпрограмме avto. Мне необходимо сделать, что если условие перестанет соблюдаться, то все переменные, которые вызывались в подпрограмме avto становились FALSE. Конечно, можно сделать подпрограмму, которая будет это выполнять, но если переменных очень много, то это не очень удобно. Нельзя ли как-нибудь по другому?

  2. #2

    По умолчанию

    В SFC есть системные флаги SFCInit и SFCReset.....
    Последний раз редактировалось Nik; 25.08.2009 в 21:37.

  3. #3

    По умолчанию

    В ST бы что-нибудь подобное
    Последний раз редактировалось Wanted; 25.08.2009 в 23:04.

  4. #4

    Smile Вот вариант

    Попробуй так:

    IF avtomat THEN (*Условие работы автоматического режима*)
    avto();
    else
    prgMan(); (*Выполняется в ручном режиме*)
    END_IF

    А программа prgMan() описывает работу в ручном режиме.
    ЗЫ удачки
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  5. #5

    По умолчанию

    Пробовал) Собственно, так у меня и есть) Но тоже не очень удобно. Видно много хочу) совсем обленился)))

  6. #6

    Smile ещё вариант

    IF avtomat THEN (*Условие работы автоматического режима*)
    avto(Enabled:=True);
    prgMan(Enabled:=False)
    else (*Выполняется в ручном режиме*)
    avto(Enabled:=False);
    prgMan(Enabled:=True);
    END_IF

    Enabled - входная переменные в программах avto() и prgMan() и по переднему/заднему фронту соответственно переводишь программы в нужное состояние (закрытие клапанов, выключение насосов и тд.) Дальше уже ньюансы, которые от сюда невидны :-)
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  7. #7

    По умолчанию

    спасибо) правда сделал уже по другому, но на следующий раз пригодиться!

  8. #8

    По умолчанию

    А я бы главный цикл организовал бы так:
    VAR
    status:int:=1;
    END_VAR
    CASE status OF
    1: Init(); //начальная иницилизация
    status:=10;
    10:avto();
    20rgMan();
    END_CASE
    proverka();// проверяем условия работы

    состояния работы изменяется протым присвоением переменной status нужного числа, после инициализации по умолчанию включается автоматический режим. Если какое либо условие не соблюдается то командой status:=20; врубается другой режим работы...

Ваши права

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