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

Тема: Помощь в программе

  1. #1

    По умолчанию Помощь в программе

    Здравствуйте, если у кого-то есть время, помогите код реализовать в жизнь. Недавно наткнулся на код, в котором было сказано про управление 3 насосами. Мне например надо также, как и там, чтобы переключались по времени, работа была попарно, запускались эти насосы от изменения давления(реле давления), плюс сигнал авария должен быть. Просмотрите код, может что-то неправильно в нем, ошибки какие, вдруг вообще бред. Если кто-то владеет подобным проектом (управление насосами) скиньте пожалуйста, Спасибо. Вот ссылка на код и ниже сам код http://plc24.ru/upravlenie-3-nasosami/#respond


    VAR_INPUT

    Run: BOOL; (*сигнал начала работы программы ротации*)

    Time_Rotat_in:WORD; (*время работы насосов, в часах*)

    Time_zad_on_in: WORD; (*время задержки перед началом работы алгоритма , в секундах*)

    Time_Nech_in: WORD; (*время, в течение которого при запуске двигателя насоса не анализируются показания датчика давления, в секундах*)

    Time_Nech_on_work_in: WORD; (*время, в течение которого при работе двигателя насоса допускаются «провалы» показаний датчика давления, в секундах*)

    Time_Zad_in: WORD; (*время задержки между отключением одного насоса и включением другого, в секундах*)

    p1_on: BOOL; (*сигнал обратной связи (датчик давления, контакт пускателя итд.) насоса №1*)

    p2_on: BOOL; (*сигнал обратной связи (датчик давления, контакт пускателя итд.) насоса №2*)

    p3_on: BOOL; (*сигнал обратной связи (датчик давления, контакт пускателя итд.) насоса №3*)
    END_VAR

    VAR_OUTPUT

    p1_out: BOOL; (*сигнал включения насоса №1*)

    p2_out: BOOL; (*сигнал включения насоса №2*)

    p3_out: BOOL; (*сигнал включения насоса №3*)

    err_p1: BOOL; (*авария насоса №1*)

    err_p2: BOOL; (*авария насоса №2*)

    err_p3: BOOL; (*авария насоса №3*)

    END_VAR

    VAR

    i: WORD; (*переменная которая определяет запуск насосов*)

    Time_zad_on: TIME; (*время задержки перед началом работы алгоритма*)

    Time_Nech: TIME; (*время, в течение которого при запуске двигателя насоса не анализируются показания датчика давления;*)

    Time_Nech_on_work: TIME; (*время, в течение которого при работе двигателя насоса допускаются «провалы» показаний датчика давления*)

    Time_Zad: TIME; (*время задержки между отключением одного насоса и включением другого*)

    Time_rotat: TIME; (*время работы насосов*)

    Tim_off: BOOL;

    Trig1: R_TRIG;

    C_Tim: TON; (*таймер чредования насосов*)

    Time_Rotat_DW: DWORD;

    p1_out_: BOOL;

    p2_out_: BOOL;

    p3_out_: BOOL;

    TON_Zad_Pump1: TON;

    TON_Pump1_Nech: TON;

    Run_Pump: BOOL;

    Run_Trig: R_TRIG;

    Sbros_Trig: F_TRIG;

    TOF_Pump1_Nech: TOF;

    TON_Zad_Pump2: TON;

    TON_Pump2_Nech: TON;

    TOF_Pump2_Nech: TOF;

    TON_Zad_Pump3: TON;

    TON_Pump3_Nech: TON;

    TOF_Pump3_Nech: TOF;

    T_zad2: TIME; (*задержка включения второго насоса при холодном старте*)

    END_VAR

    (*преобразование переменных времени полученых с панели *)

    Time_Rotat_DW:=WORD_TO_DWORD(Time_Rotat_in);(*пере вод в часы*)

    Time_rotat:=DWORD_TO_TIME((Time_Rotat_DW*3600000)/2);

    Time_zad_on:=WORD_TO_TIME(Time_zad_on_in*1000); (*перевод в секунды*)

    Time_Nech:=WORD_TO_TIME(Time_Nech_in*1000);

    Time_Nech_on_work:= WORD_TO_TIME(Time_Nech_on_work_in*1000);

    Time_Zad:=WORD_TO_TIME(Time_Zad_in*1000);(*инициал изация и востановление начальных условий*)

    IF Run=TRUE THEN

    Run_Trig(CLK:=TRUE);

    Sbros_Trig(CLK:=TRUE) ;

    ELSE

    Run_Trig(CLK:=FALSE);

    Sbros_Trig(CLK:=FALSE);

    END_IF

    IF Run_Trig.Q=TRUE THEN

    Run_Pump:=TRUE;

    T_zad2:=T#5s;

    END_IF

    IF Trig1.Q=TRUE THEN

    T_zad2:=T#0s ;

    END_IF

    IF Sbros_Trig.Q= TRUE THEN

    err_p1:=FALSE;

    err_p2:=FALSE;

    err_p3:=FALSE;

    END_IF

    (*запуск таймера ротации насосов*)

    IF Run_Pump=TRUE THEN

    C_Tim(IN:=TRUE , PT:=T#1m );

    END_IF

    (*сброс таймера ротации насосов*)

    IF Run_Pump =FALSE THEN

    C_Tim(IN:=FALSE , PT:=T#0s );

    END_IF

    (*детектирование импульса перехода с насоса на насос*)

    Trig1(CLK:= C_Tim.Q );

    Tim_off:=Trig1.Q;

    (*востановление начальных установок, если идет холодный старт в автомате*)

    IF (Run_Pump=FALSE AND (p3_on= FALSE AND p1_on=FALSE AND p2_on=FALSE)) THEN

    i:=0;

    END_IF

    IF Run=FALSE THEN

    p1_out_:= FALSE;

    p2_out_:=FALSE;

    p3_out_:=FALSE;

    Run_Pump:=FALSE;

    END_IF

    (*подхват насосов на «лету»*)

    IF (Run_Pump=FALSE AND (p1_on= TRUE AND p2_on=TRUE)) THEN

    i:=0;

    END_IF

    IF (Run_Pump=FALSE AND (p2_on= TRUE AND p3_on=TRUE)) THEN

    i:=2;

    END_IF

    IF (Run_Pump=FALSE AND (p3_on= TRUE AND p1_on=TRUE)) THEN

    i:=1;

    END_IF

    (*счетчик*)

    IF (Tim_off=TRUE AND Run_Pump=TRUE ) THEN

    i:=i+1;

    END_IF

    IF i>=3 THEN

    i:=0;

    END_IF

    (*включение насосов*)

    IF (Run_Pump=TRUE AND i=0) THEN

    p1_out_:= TRUE;

    p2_out_:=TRUE;

    p3_out_:=FALSE;

    END_IF

    IF (Run_Pump=TRUE AND i=1) THEN

    p1_out_:= TRUE;

    p2_out_:=FALSE;

    p3_out_:=TRUE;

    END_IF

    IF (Run_Pump=TRUE AND i=2) THEN

    p1_out_:= FALSE;

    p2_out_:=TRUE;

    p3_out_:=TRUE;

    END_IF

    (*перезапуск таймера*)

    IF (Run_Pump=TRUE AND Tim_off=TRUE) THEN

    C_Tim(IN:=FALSE , PT:=T#1m );

    END_IF

    (*управление насосами*)

    (*насос №1*)

    IF p1_out_=TRUE THEN

    TON_Zad_Pump1(IN:=TRUE , PT:=Time_Zad );

    ELSE

    TON_Zad_Pump1(IN:=FALSE , PT:=Time_Zad );

    END_IF

    IF (TON_Zad_Pump1.Q=TRUE AND err_p1=FALSE) THEN

    p1_out:=TRUE;

    END_IF (*формирование задержки включения и защиты от ошибочного включения*)

    IF (p1_out_=TRUE AND p1_out=TRUE) THEN

    TON_Pump1_Nech(IN:=TRUE , PT:=Time_Nech );

    ELSE

    TON_Pump1_Nech(IN:=FALSE , PT:=Time_Nech );

    END_IF

    (*задержка контроля обратной связи после пуска насоса*)

    IF (p1_out=TRUE AND p1_on=FALSE) THEN

    TOF_Pump1_Nech(IN:=FALSE, PT:=Time_Nech_on_work);

    ELSE

    TOF_Pump1_Nech(IN:=TRUE, PT:=Time_Nech_on_work);

    END_IF

    (*задержка при пропадании сигнала обратной связи при работе насоса*)

    IF (Run=TRUE AND p1_out_=TRUE AND TON_Pump1_Nech.Q=TRUE AND p1_on=FALSE AND TOF_Pump1_Nech.Q=FALSE) THEN

    err_p1:=TRUE ;

    Run_Pump:=FALSE ;

    p1_out:=FALSE;

    p2_out_:=TRUE;

    p3_out_:=TRUE;

    END_IF

    (*определение аварии насоса, производиться остановка ротации и принудительное включение оставшихся насосов*)

    IF p1_out_=FALSE THEN

    p1_out:=FALSE;

    END_IF

    (*остановка насоса по истесению времени или аварии*)

    (*насос №2*)

    IF p2_out_=TRUE THEN

    TON_Zad_Pump2(IN:=TRUE , PT:=Time_Zad+T_zad2 );

    ELSE

    TON_Zad_Pump2(IN:=FALSE , PT:=Time_Zad );

    END_IF

    (*здесь все тоже самое*)

    IF (TON_Zad_Pump2.Q=TRUE AND err_p2=FALSE) THEN

    p2_out:=TRUE;

    END_IF

    IF (p2_out_=TRUE AND p2_out=TRUE) THEN

    TON_Pump2_Nech(IN:=TRUE , PT:=Time_Nech );

    ELSE

    TON_Pump2_Nech(IN:=FALSE , PT:=Time_Nech );

    END_IF

    IF (p2_out=TRUE AND p2_on=FALSE) THEN

    TOF_Pump2_Nech(IN:=FALSE, PT:=Time_Nech_on_work);

    ELSE

    TOF_Pump2_Nech(IN:=TRUE, PT:=Time_Nech_on_work);

    END_IF

    IF (Run=TRUE AND p2_out_=TRUE AND TON_Pump2_Nech.Q=TRUE AND p2_on=FALSE AND TOF_Pump2_Nech.Q=FALSE) THEN

    err_p2:=TRUE ;

    Run_Pump:=FALSE ;

    p2_out:=FALSE;

    p1_out_:=TRUE;

    p3_out_:=TRUE;

    END_IF

    IF p2_out_=FALSE THEN

    p2_out:=FALSE;

    END_IF

    (*насос №3*)

    IF p3_out_=TRUE THEN

    TON_Zad_Pump3(IN:=TRUE , PT:=Time_Zad );

    ELSE

    TON_Zad_Pump3(IN:=FALSE , PT:=Time_Zad );

    END_IF

    IF (TON_Zad_Pump3.Q=TRUE AND err_p3=FALSE) THEN

    p3_out:=TRUE;

    END_IF

    IF (p3_out_=TRUE AND p3_out=TRUE) THEN

    TON_Pump3_Nech(IN:=TRUE , PT:=Time_Nech );

    ELSE

    TON_Pump3_Nech(IN:=FALSE , PT:=Time_Nech );

    END_IF

    IF (p3_out=TRUE AND p3_on=FALSE) THEN

    TOF_Pump3_Nech(IN:=FALSE, PT:=Time_Nech_on_work);

    ELSE

    TOF_Pump3_Nech(IN:=TRUE, PT:=Time_Nech_on_work);

    END_IF

    IF (Run=TRUE AND p3_out_=TRUE AND TON_Pump3_Nech.Q=TRUE AND p3_on=FALSE AND TOF_Pump3_Nech.Q=FALSE) THEN

    err_p3:=TRUE ;

    Run_Pump:=FALSE ;

    p3_out:=FALSE;

    p2_out_:=TRUE;

    p1_out_:=TRUE;

    END_IF

    IF p3_out_=FALSE THEN

    p3_out:=FALSE;

    END_IF

    END_PROGRAM

  2. #2
    Пользователь Аватар для Василий Кашуба
    Регистрация
    20.11.2011
    Адрес
    Ставрополь
    Сообщений
    2,490

    По умолчанию

    Вы что хотите запрограммировать ПЛК, или ПР, если ПР, то оно программируется ФБ в Овен Лоджик, тогда нужно подробное ТЗ.
    Последний раз редактировалось Василий Кашуба; 12.06.2013 в 23:55.

  3. #3

    По умолчанию

    Просто ПЛК, модель 100

  4. #4

    По умолчанию

    Еще не хватает в программе реле давления,т.е. нужно будет еще одно условие добавлять, для того, чтобы узнавать о давлении, чтобы в атмосферах оно было в определенном интервале. Если есть подобные проекты, буду очень рад и благодарен.

  5. #5
    Пользователь Аватар для Василий Кашуба
    Регистрация
    20.11.2011
    Адрес
    Ставрополь
    Сообщений
    2,490

    По умолчанию

    Цитата Сообщение от DavidVilla Посмотреть сообщение
    Просто ПЛК, модель 100
    Про ПЛК в другую тему, тут ПР1ХХ.

Похожие темы

  1. О звуках в программе
    от Roman62rus в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 21.05.2013, 12:01
  2. Необычный сбой в программе
    от smk1635 в разделе Программируемые реле
    Ответов: 73
    Последнее сообщение: 06.04.2012, 12:50
  3. Требуется помощь в программе для ПР110
    от melky в разделе Программируемые реле
    Ответов: 14
    Последнее сообщение: 30.11.2011, 14:41
  4. ошибки в программе
    от Lex2aa в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 17.11.2009, 08:08

Ваши права

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