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

Тема: функциональный блок для управления перекидным клапаном

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    23.01.2008
    Адрес
    Белгородская область, Валуйки
    Сообщений
    274

    По умолчанию функциональный блок для управления перекидным клапаном

    добрый вечер всем написал функциональный блок для управления перекидным клапаном это двух позиционный механизм приводимый в движение электромотором 380В, конечные положения определяющийся индуктивными датчиками сенсоровскими ВБИ. Имеется два режима работы ручной и автомат. В ручном режиме оператор нажимает экранные кнопки в скаде входы A:BOOL; (*Кнопка положение A*) B:BOOL; (*Кнопка положение B*) после чего запускаться таймер настроенный на время перехода механизма от одного в другое конечное положение иначе авария. Выходы OUT_A:BOOL; (*Выход положение A*) OUT_B:BOOL; (*Выход положение B*) управляют реверсивным магнитным пускателем электродвигателя. В автоматическом режиме сигнал AVTO:BOOL; (*Автоматический режим работы FALSE-ручное TRUE-автомат*) механизм управляться сигналами C:BOOL; (*РЕЖИМ АВТОМАТ положение A*) D:BOOL; (*РЕЖИМ АВТОМАТ положение B*) это сигналы от технологического процесса различные механизмы с которыми связан этот клапан.

    В общем есть две проблемы первая не могу добиться нормальной работы с тех пор как добавил автоматический режим вроде и правильно все но хз. Вторая как оптимизировать код может что то улучшить а то у меня ощущение что я написал индусский код.
    ************************************************** *******
    FUNCTION_BLOCK PK(*Функциональный блок для управления перекидным клапаном*)
    (*двух позиционный механизм*)
    VAR_INPUT(*Входные переменные датчики кнопки и тп*)
    AVTO:BOOL; (*Автоматический режим работы FALSE-ручное TRUE-автомат*)
    A:BOOL; (*Кнопка положение A*)
    B:BOOL; (*Кнопка положение B*)
    C:BOOL; (*РЕЖИМ АВТОМАТ положение A*)
    D:BOOL; (*РЕЖИМ АВТОМАТ положение B*)
    SENSOR_A:BOOL; (*Датчик положение A*)
    SENSOR_B:BOOL; (*Датчик положение B*)
    ALARM_RES: BOOL; (*Сигнал сброса аварии*)
    END_VAR
    VAR_OUTPUT(*выходные переменные пускатели аварии и тп*)
    OUT_A:BOOL; (*Выход положение A*)
    OUT_B:BOOL; (*Выход положение B*)
    ALARM_OUT:BOOL; (*Выход авария перекидного клапана*)
    END_VAR
    VAR(*Внутрении переменные для собственных нужд ФБ таймеры и прочее*)
    tim1:TON;
    tim2:TON;
    END_VAR

    ************************************************** ****
    IF AVTO THEN
    (*-------------------------------------------------------------------------*)
    IF C=TRUE AND D=FALSE THEN
    OUT_A:=TRUE;
    END_IF

    IF C=FALSE AND D=TRUE THEN
    OUT_B:=TRUE;
    END_IF
    (*-------------------------------------------------------------------------*)
    ELSE
    (*-------------------------------------------------------------------------*)
    IF A=TRUE AND B=FALSE THEN
    OUT_A:=TRUE;
    END_IF

    IF A=FALSE AND B=TRUE THEN
    OUT_B:=TRUE;
    END_IF

    (*-------------------------------------------------------------------------*)
    END_IF

    IF OUT_A=TRUE THEN
    tim1(IN:=OUT_A, PT:=T#5s);
    ALARM_OUT:=tim1.Q;
    END_IF

    IF SENSOR_A=TRUE THEN
    OUT_A:=FALSE;
    END_IF
    (*-------------------------------------------------------------------------*)
    IF OUT_B=TRUE THEN
    tim2(IN:=OUT_B, PT:=T#5s);
    ALARM_OUT:=tim2.Q;
    END_IF

    IF SENSOR_B=TRUE THEN
    OUT_B:=FALSE;
    END_IF

    IF OUT_A=TRUE THEN
    tim1(IN:=OUT_A, PT:=T#5s);
    ALARM_OUT:=tim1.Q;
    END_IF

    IF SENSOR_A=TRUE THEN
    OUT_A:=FALSE;
    END_IF
    (*-------------------------------------------------------------------------*)
    IF OUT_B=TRUE THEN
    tim2(IN:=OUT_B, PT:=T#5s);
    ALARM_OUT:=tim2.Q;
    END_IF

    IF SENSOR_B=TRUE THEN
    OUT_B:=FALSE;
    END_IF


    (*-------------------------------------------------------------------------*)
    IF OUT_A=TRUE AND OUT_B=TRUE THEN
    ALARM_OUT:=TRUE ;
    END_IF
    (*-------------------------------------------------------------------------*)
    IF ALARM_OUT=TRUE THEN
    OUT_A:=FALSE;
    OUT_B:=FALSE;
    END_IF
    (*-------------------------------------------------------------------------*)
    IF ALARM_RES=TRUE THEN
    ALARM_OUT:=FALSE;
    tim1(IN:=FALSE, PT:=T#5s);
    tim2(IN:=FALSE, PT:=T#5s);
    OUT_A:=FALSE;
    OUT_B:=FALSE;
    END_IF
    Последний раз редактировалось alexval2006; 28.11.2010 в 00:48.

Ваши права

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