Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 33

Тема: TON в St

  1. #21

    По умолчанию

    CH_time:=T#10s;



    IF workpomp=12 AND
    status1.15=FALSE AND (*H1 - Remote*)
    status2.15=FALSE (*H2 - Remote*)

    (*AND bakurov>urovfiremin_ret*) (*ïðîâåðê&#224 ; îñóù-ñÿ â äðóãîì áëîêå*)
    THEN
    CH_timer();
    (*-------------------------- ïóñê èç ïîëíîãî îñòàíîâ&#224 ; ---------------------------------*)
    IF narab1+narabotkaK<=narab2 AND
    status1.1=FALSE AND (*&#224;&#226;&#224;&#240;&#232;&#233; &#205;1- &#237;&#229;&#242; *)
    status1.10=FALSE AND (* &#205;1- &#241;&#242;&#238;&#239; *)
    status2.10=FALSE (* &#205;2- &#241;&#242;&#238;&#239;*)

    THEN
    START_INV(nomer_INV:=1 ); (*&#231;&#224;&#239;&#243;&#241;&#242;&#232;&#236 ; &#207;&#215;1*)


    ELSIF narab1+narabotkaK>narab2 AND
    status2.1=FALSE AND (*&#205;2- &#237;&#229;&#242; &#224;&#226;&#224;&#240;&#232;&#233;*)
    status2.10=FALSE AND (* &#205;2- STOP *)
    status1.10=FALSE (*&#205;1- STOP *)

    THEN
    START_INV(nomer_INV:=2 ); (*&#231;&#224;&#239;&#243;&#241;&#242;&#232;&#236 ; &#207;&#215;2*)

    (*-------------------------- &#239;&#243;&#241;&#234; &#241; &#245;&#238;&#228;&#224; (&#239;&#229;&#240;&#229;&#234;&#235;&#254;&#247;& #229;&#237;&#232;&#229 ----------------------------*)
    ELSIF TRIG_CH12.Q1=TRUE OR (*&#243;&#230;&#229; &#232;&#228;&#184;&#242; &#239;&#229;&#240;&#229;&#234;&#235;&#254;&#247;&# 229;&#237;&#232;&#229;
    narab1>(narab2+24) AND *)
    (narab1+narabotkaK)>(narab2+1) AND (*&#226;&#240;&#229;&#236;&#229;&#237;&#237;&#238 ; &#205;&#192;&#203;&#192;&#196;&#202;&#192;*)
    status2.1=FALSE AND (*&#205;2- &#237;&#229;&#242; &#224;&#226;&#224;&#240;&#232;&#233;*)
    status2.10=FALSE AND (* &#205;2- STOP *)
    status1.10=TRUE AND (*&#205;1- run *)
    pomptimer.IN=FALSE (*&#237;&#229; &#226;&#234;&#235;&#254;&#247;&#229;&#237; &#226;&#242;&#238;&#240;&#238;&#233; &#237;&#224;&#241;&#238;&#241;*)

    THEN TRIG_CH12(SET:=TRUE , RESET1:=FALSE); (*&#244;&#235;&#224;&#227; &#239;&#229;&#240;&#229;&#234;&#235;-&#255;*)
    (*POMP_CH12();
    &#239;&#235;&#224;&#226;&#237;&#238;&#229; &#239;&#229;&#240;&#229;&#234;&#235;&#254;&#247;&# 229;&#237;&#232;&#229; &#237;&#224;&#241;&#238;&#241;&#238;&#226; &#241; 1-&#227;&#238; &#237;&#224; 2*)

    (************************************************* ************************************************** ******)
    (************************************************* ************************************************** ******)
    (************************************************* ************************************************** ******)
    (************************************************* ************************************************** ******)
    UST_INV (invustavka:=invust , dk:= Pinv2k, Pinv:=Pinv2, ustavka=>invust2 );

    (*&#199;&#224;&#239;&#243;&#241;&#242;&#232;&#236 ; &#207;&#215;2 &#241; &#231;&#224;&#228;&#224;&#237;&#237;&#238;&#233 ; &#243;&#241;&#242;&#224;&#226;&#234;&#238;&#233 ; *)
    CH_time:=T#10s;
    IF status2.10=FALSE (* &#205;2- &#241;&#242;&#238;&#239; *)
    THEN CH_ch:=9;

    END_IF
    IF status2.1=FALSE AND (*&#224;&#226;&#224;&#240;&#232;&#233; &#205;2- &#237;&#229;&#242;*)
    status2.10=FALSE (* &#205;2- &#241;&#242;&#238;&#239; *)
    THEN CH_timer(IN:=FALSE);(**)
    comword2.14:=TRUE;
    comword2.15:=TRUE;
    comword2.10:=TRUE; (*&#231;&#224;&#239;&#243;&#241;&#242;&#232;&#236 ; &#207;&#215;2*)
    (*
    CH_timer.IN:=FALSE;
    CH_timer.PT:=CH_time; (*start timer*)
    CH_timer.IN:=TRUE;*)

    CH_timer(IN:=TRUE, PT:=CH_time); (* start timer*)

    ELSE comword2.10:= comword2.10; (*&#209;&#206;&#206;&#193;&#217;&#200;&#210; &#238;&#225; &#192;&#194;&#192;&#208;&#200;&#200;*)
    END_IF

    (*&#209;&#237;&#232;&#230;&#224;&#229;&#236; &#239;&#238;&#253;&#242;&#224;&#239;&#237;&#238 ; &#243;&#241;&#242;&#224;&#226;&#234;&#243; &#207;&#215;1 (&#234;&#224;&#230;&#228;&#251;&#233; &#240;&#224;&#231; &#237;&#224; 10%) *)
    CHtimerPT:=CH_timer.ET;
    IF
    CH_ch >=8 AND CH_timer.Q=TRUE

    OR
    CH_ch >=2 AND
    CH_ch <8 AND
    CH_timer.Q=TRUE AND
    ( (invust2-200)<PIDfeedback2 AND PIDfeedback2<(invust2+100) )

    THEN
    CH_timer(IN:=FALSE); (*, pt:=CH_time)*)
    CH_invust:=(invust-invust/100*(100-CH_ch*10));(*ust:= &#234;&#238;&#240;&#238;&#247;&#229; (100-CH-ch*10)% :-) *)
    CH_ch:=CH_ch-1;
    UST_INV (invustavka:=CH_invust , dk:= Pinv1k, Pinv:=Pinv1, ustavka=>invust1 );


    (* Pvalue:=invust-Pinv2k ; (*&#208;&#231;&#224;&#228;&#239;&#247;*)
    Pvalue:=Pvalue*50/Pinv2 ; (*&#243;&#241;&#242;&#224;&#226;&#234;&#224; &#228;&#235;&#255; &#207;&#215; 2*)
    invust2:= REAL_TO_WORD (Pvalue*100);
    *)
    IF CH_ch<8
    THEN CH_timer (PT:=CH_time);
    ELSE CH_timer (PT:=CH_time*10);
    END_IF
    CH_timer (IN:=status2.10); (*TRUE start timer*)
    CH_timer (IN:=TRUE); (* start timer*)
    END_IF
    (*
    IF
    CH_ch >=2 AND
    CH_ch <8 AND
    CH_timer.Q=TRUE AND
    ( (invust2-200)<PIDfeedback2 AND PIDfeedback2<(invust2+100) )

    THEN
    CH_timer(IN:=FALSE); (*, pt:=CH_time)*)
    CH_invust:=(invust-invust/100*(100-CH_ch*10));(*ust:= &#234;&#238;&#240;&#238;&#247;&#229; (100-CH-ch*10)% :-) *)
    CH_ch:=CH_ch-1;
    UST_INV (invustavka:=CH_invust , dk:= Pinv1k, Pinv:=Pinv1, ustavka=>invust1 );

    CH_timer (IN:=TRUE, PT:=CH_time); (*start timer*)
    END_IF
    *)
    IF (CH_ch <2 AND CH_timer.Q=TRUE)
    THEN
    (*CH_timer.IN:=FALSE;*)
    comword1.14:=FALSE;
    comword1.15:=FALSE;
    comword1.10:=FALSE; (*STOP &#207;&#215;1*)
    TRIG_CH12(SET:=FALSE , RESET1:=TRUE); (*&#241;&#225;&#240;&#238;&#241;&#232;&#236; &#244;&#235;&#224;&#227; &#239;&#229;&#240;&#229;&#234;&#235;&#254;&#247;&# 229;&#237;&#232;&#255;*)
    CH_timer(IN:=FALSE);
    osnovpomp:=2; (*&#231;&#224;&#239;&#238;&#236;&#237;&#232;&#236 ; &#237;&#238;&#236;&#229;&#240; &#237;&#238;&#226;&#238;&#227;&#238; &#238;&#241;&#237;&#238;&#226;&#237;&#238;&#227;&# 238; &#237;&#224;&#241;&#238;&#241;&#224;*)

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








    (*________________________________________________ ________________*)


    ELSIF TRIG_CH21.Q1=TRUE OR
    (*narab2> (narab1+24) AND*)
    (narab1+narabotkaK)<(narab2) AND (*&#226;&#240;&#229;&#236;&#229;&#237;&#237;&#238 ; &#205;&#192;&#203;&#192;&#196;&#202;&#192;*)
    status1.1=FALSE AND (*&#205;1- &#237;&#229;&#242; &#224;&#226;&#224;&#240;&#232;&#233;*)
    status1.10=FALSE AND (*&#205;1- STOP *)
    status2.10=TRUE AND (* &#205;2- run*)
    pomptimer.IN=FALSE (*&#237;&#229; &#226;&#234;&#235;&#254;&#247;&#229;&#237; &#226;&#242;&#238;&#240;&#238;&#233; &#237;&#224;&#241;&#238;&#241;*)

    THEN TRIG_CH21(SET:=TRUE , RESET1:=FALSE); (*&#244;&#235;&#224;&#227; &#239;&#229;&#240;&#229;&#234;&#235;-&#255;*)
    (* POMP_CH21();
    &#239;&#235;&#224;&#226;&#237;&#238;&#229; &#239;&#229;&#240;&#229;&#234;&#235;&#254;&#247;&# 229;&#237;&#232;&#229; &#237;&#224;&#241;&#238;&#241;&#238;&#226; &#241;&#238; 2-&#227;&#238; &#237;&#224; 1*)

    (************************************************* ************************************************** ******)
    (************************************************* ************************************************** ******)
    (************************************************* ************************************************** ******)
    (************************************************* ************************************************** ******)
    UST_INV (invustavka:=invust , dk:= Pinv1k, Pinv:=Pinv1, ustavka=>invust1 );

    (*&#199;&#224;&#239;&#243;&#241;&#242;&#232;&#236 ; &#207;&#215;1 &#241; &#231;&#224;&#228;&#224;&#237;&#237;&#238;&#233 ; &#243;&#241;&#242;&#224;&#226;&#234;&#238;&#233 ; *)
    CH_time:=t#10s;
    IF status1.10=FALSE (*&#205;1- STOP *)
    THEN CH_ch:=9;

    END_IF
    IF status1.1=FALSE AND (*&#224;&#226;&#224;&#240;&#232;&#233; &#205;1- &#237;&#229;&#242;*)
    status1.10=FALSE AND (*&#205;1- &#241;&#242;&#238;&#239;*)
    status1.15=FALSE (*&#205;1- &#226; &#228;&#232;&#241;&#242;.&#240;&#229;&#230;&#232;& #236;&#229;*)
    (**)
    THEN CH_timer();
    (*CH_timer(IN:=FALSE);*)
    comword1.14:=TRUE;
    comword1.15:=TRUE;
    comword1.10:=TRUE; (*&#231;&#224;&#239;&#243;&#241;&#242;&#232;&#236 ; &#207;&#215;1*)
    (* CH_timer.IN:=FALSE;*)
    CH_timer(IN:=TRUE, PT:=CH_time); (*start timer*)


    ELSE comword1.10:= comword1.10; (*&#209;&#206;&#206;&#193;&#217;&#200;&#210; &#238;&#225; &#192;&#194;&#192;&#208;&#200;&#200;*)
    END_IF

    (*&#209;&#237;&#232;&#230;&#224;&#229;&#236; &#239;&#238;&#253;&#242;&#224;&#239;&#237;&#238 ; &#243;&#241;&#242;&#224;&#226;&#234;&#243; &#207;&#215;2 (&#234;&#224;&#230;&#228;&#251;&#233; &#240;&#224;&#231; &#237;&#224; 10%) *)
    IF
    (CH_ch >=8 AND CH_timer.Q=TRUE)

    THEN CH_timer();
    CH_timer(IN:=FALSE); (*, pt:=CH_time)*)
    CH_invust:=(invust-invust/100*(100-CH_ch*10));(*ust:= &#234;&#238;&#240;&#238;&#247;&#229; (100-CH-ch*10)% :-) *)
    CH_ch:=CH_ch-1;
    UST_INV (invustavka:=CH_invust , dk:= Pinv2k, Pinv:=Pinv2, ustavka=>invust2 );


    (* Pvalue:=invust-Pinv2k ; (*&#208;&#231;&#224;&#228;&#239;&#247;*)
    Pvalue:=Pvalue*50/Pinv2 ; (*&#243;&#241;&#242;&#224;&#226;&#234;&#224; &#228;&#235;&#255; &#207;&#215; 2*)
    invust2:= REAL_TO_WORD (Pvalue*100);
    *)
    CH_timer (IN:=TRUE, PT:=CH_time*10); (*start timer*)

    END_IF

    IF
    CH_ch >=2 AND
    CH_ch <8 AND
    CH_timer.Q=TRUE AND
    ( (invust1-200)<PIDfeedback1 AND PIDfeedback1<(invust1+100) )

    THEN CH_timer();
    CH_timer(IN:=FALSE); (*, pt:=CH_time)*)
    CH_invust:=(invust-invust/100*(100-CH_ch*10));(*ust:= &#234;&#238;&#240;&#238;&#247;&#229; (100-CH-ch*10)% :-) *)
    CH_ch:=CH_ch-1;
    UST_INV (invustavka:=CH_invust , dk:= Pinv2k, Pinv:=Pinv2, ustavka=>invust2 );

    CH_timer (IN:=TRUE, PT:=CH_time); (*start timer*)

    END_IF

    IF (CH_ch <2 AND CH_timer.Q=TRUE)
    THEN CH_timer();
    (*CH_timer(IN:=FALSE);*)
    comword2.14:=FALSE;
    comword2.15:=FALSE;
    comword2.10:=FALSE; (*STOP &#207;&#215;2*)
    TRIG_CH21(SET:=FALSE , RESET1:=TRUE); (*&#241;&#225;&#240;&#238;&#241;&#232;&#236; &#244;&#235;&#224;&#227; &#239;&#229;&#240;&#229;&#234;&#235;&#254;&#247;&# 229;&#237;&#232;&#255;*)
    CH_timer(IN:=FALSE);
    osnovpomp:=1; (*&#231;&#224;&#239;&#238;&#236;&#237;&#232;&#236 ; &#237;&#238;&#236;&#229;&#240; &#237;&#238;&#226;&#238;&#227;&#238; &#238;&#241;&#237;&#238;&#226;&#237;&#238;&#227;&# 238; &#237;&#224;&#241;&#238;&#241;&#224;*)

    END_IF

  2. #22

    По умолчанию

    ferret, вот тот участок, который не работает . Суть его это останов одного ПЧ, который работает под ПИД и включение другого ПЧ тоже под ПИД (ротация насосов). Таймер отсчитывает время между выдачей пониженой уставки на останавливаемый ПЧ. ПЧ управляются по модбас. К каждому ПЧ подключен свой датчик давления. В этом коде два (зеркальных) переключения С ПЧ на ПЧ. Первый работает когда в режиме отладки "вручную" запускаешь таймер CH_timer. Обратное переключение не работает (тоже пока понять не могу почему)... А так вообще переключение работает. Вставлял одну часть кода в другую часть программы (часть для тестирования) и всё нормально работало.

  3. #23

    По умолчанию

    версия Codesys v2.3.9.41 сборка июль 26,2013

  4. #24
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    покуда выполнение таймера будет внутри условий, ошибки в его работе будут всегда
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #25

    По умолчанию

    Почему? Если программа постоянно заходит в это условие до его полного исполнения
    Тогда куда нужно в общей программе вставить вот это CH_timer(); ? Поместить в самом начале?

  6. #26

    По умолчанию

    Цитата Сообщение от RomanB Посмотреть сообщение
    Почему? Если программа постоянно заходит в это условие до его полного исполнения
    Тогда куда нужно в общей программе вставить вот это CH_timer(); ? Поместить в самом начале?
    Меня смущают вызовы в стиле:
    CH_timer();
    CH_timer(IN:=FALSE);
    Получается по два раза вызывается функциональный блок. А что нельзя было в конце кода написать
    CH_timer();
    А в условиях делать в виде
    CH_timer.IN:=TRUE или CH_timer.IN:=FALSE;
    Только есть вероятность, что в разных участках кода будут разные значения записываться CH_timer.IN при передаче в таймер тут уж логику нужно подключать или Cross References смотреть...в общем задачка.
    Последний раз редактировалось ferret_maybe; 22.03.2017 в 18:30.

  7. #27

    По умолчанию

    ferret, В вашем комментарии ощущается какая то не уверенность... Я делал по разному... Вот это последний вариант, после того как мне дали рекомендацию в моей ветке "Почему не работает TON внутри FB ". Изначально этот зеркальный код планировалось поместить в отдельный ФБ и его вызывать (использовать как подпрограмму), так как этот код понадобиться ещё в паре мест. Но ФБ не заработал вообще ( И дабы не тратить время, я тупо начал вставлять копии в основную прогу... Длинно, неудобно... А он всё равно не работает

  8. #28

    По умолчанию

    Цитата Сообщение от RomanB Посмотреть сообщение
    ferret, В вашем комментарии ощущается какая то не уверенность...
    Неуверенность только в организации вашей программы и она заключается в том, что нет гарантии, что не выполнится два условия IF. В одном будет команда на запуск таймера, а ниже по коду выполнится другой IF в котором будет команда на останов таймера. В результате будет передаваться в вызов последнее выполненное условие...Как-то так) Но проблема точно не в Codesys.

  9. #29

    По умолчанию

    ... грубите, хамите. "А ТС уверен. Уверено копипастит неработающее"- я написал что этот же алгоритм в другой части (в той части где я проверяю разные алгоритмы без работы основного кода) проги этот алгоритм работает. Поэтому я его начал вставлять в основную часть проги. А тут даже в самом начале таймер не запускается. Есть подозрение что проблема связана с задержками при опросе ПЧ по модбас. Не в самом модбасе, а в задержках внутри ПЧ. где то что то не успевает

  10. #30

    По умолчанию

    (*AND bakurov>urovfiremin_ret*) (*&#239;&#240;&#238;&#226;&#229;&#240;&#234;&#224 ; &#238;&#241;&#243;&#249;-&#241;&#255; &#226; &#228;&#240;&#243;&#227;&#238;&#236; &#225;&#235;&#238;&#234;&#229;*)
    THEN" здесь вызов в х.з. каком условии с х.з. каким IN"
    Все эти условия долгоиграющие. В данном случае идёт речь о наполненности бака выше минимума. А он однозначно выше....

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Непонятки с TON
    от olegsv в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 08.06.2011, 19:27
  2. TON
    от ward в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 15.04.2011, 16:25
  3. Прикол с TP, TON и TOF
    от Горшунов Сергей в разделе ПЛК1хх
    Ответов: 19
    Последнее сообщение: 08.07.2009, 14:08
  4. Ton не сбрасывается!
    от kanava в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 02.10.2008, 23:08

Ваши права

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