Страница 2 из 8 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 72

Тема: Управление работой вентиляторов

  1. #11

    По умолчанию

    mech1, mech2... сигнал включения механизмов, bool
    vent1, vent2... выходные с контроллера, тоже bool
    в теле программы:
    vent1 := mech1 or mech2;
    vent2 := mech1 or ...
    vent3 := mech2 or ...

    таймеры предложены были на случай импульсного управления двигателями

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

    По умолчанию

    вот наверно так но не сосем еще понял
    PROGRAM PRG_3
    VAR
    Stop1 : TP:= ( PT := T#1s);
    Start1 : TP:= ( PT := T#1s);
    Stop2 : TP:= ( PT := T#1s);
    Start2 : TP:= ( PT := T#1s);
    Stop3 : TP:= ( PT := T#1s);
    Start3 : TP:= ( PT := T#1s);
    Stop4 : TP:= ( PT := T#1s);
    Start4 : TP:= ( PT := T#1s);
    fan: WORD;

    Do1: BOOL;
    Do2: BOOL;
    Do3: BOOL;
    Do4: BOOL;

    setmech : ARRAY[1..4] OF BYTE := 2#0001, 2#0011, 2#0111, 2#1111;
    mech : ARRAY[1..4] OF BOOL;
    fan:=0;
    FOR i :=1 TO 4 DO
    fan:=SEL( mech[i], fan, fan OR setmech[i] );
    END_FOR
    END_VAR
    (************************************************* ****)
    Fan:= Mech1 OR Mech2 OR Mech3 OR Mech4;
    Start1(IN:=Fan.0,Q=>Do1 );
    Stop1(IN:=NOT Fan.0,Q=>Do1 );
    но еще 4 ошибки пр компиляции наверно я еще не до конца понял что где дописать нужно


    да еще это все будет работать с таким ФБ
    VAR_GLOBAL CONSTANT(* Для хранения аварий механизмов *)
    Ok : WORD := 0;
    xReidi : BYTE := 0; (* Номера битов флага аварий *)
    xSped : BYTE := 1;
    xPodpor : BYTE := 2;
    xTok : BYTE := 3;
    END_VAR
    (************************************************* ***********)


    FUNCTION_BLOCK CULER (*Функциональный блок для управления ВЕНТИЛЯТОРОМ*)
    VAR_INPUT
    auto : BOOL; (* Автоматический режим работы *)
    man_start,
    man_stop : BOOL; (* Экранные кнопки СТАРТ и СТОП *)
    auto_start,
    auto_stop : BOOL; (* Сигналы в режиме автомат СТАРТ и СТОП *)
    sens_reidi : BOOL; (* Включение (обратная связь ?) *)
    reset : BOOL; (* Сигнал сброса аварии *)
    END_VAR
    VAR_OUTPUT
    out : BOOL; (* Выходы на пускатель *)
    fAlarm : WORD; (* Флаг аварий *)
    END_VAR
    VAR
    step : (stop, start, alarm); (* Состояние управляющего процесса *)
    timer_reidi : TON; (* Контроль включения *)
    RTRIG_auto_start: R_TRIG;
    RTRIG_auto_stop: R_TRIG;
    END_VAR
    (************************************************* *******)
    CASE step OF

    stop:
    timer_reidi(in:=FALSE);
    fAlarm := Ok;
    RTRIG_auto_start(CLK:=auto_start);
    step := SEL( SEL( auto, RTRIG_auto_start.Q, man_start), step, start);

    start:
    timer_reidi(in:= NOT sens_reidi, pt:=T#2s, Q=> fAlarm.xReidi );
    RTRIG_auto_stop(CLK:=auto_stop);
    step := SEL(man_stop OR RTRIG_auto_stop.Q, step, stop);
    step := SEL(fAlarm <> Ok, step, alarm);

    alarm :
    step := SEL(reset, step, stop);
    END_CASE
    out := step=start;

  3. #13

    По умолчанию

    у вас вентили как управляться то должны, импульсом/постоянно?

  4. #14

    По умолчанию

    Цитата Сообщение от alexval2006 Посмотреть сообщение
    вот наверно так
    Код:
    PROGRAM PRG_3
    VAR
    Stop1 : TP:= ( PT := T#1s);
    Start1 : TP:= ( PT := T#1s);
    Stop2 : TP:= ( PT := T#1s);
    Start2 : TP:= ( PT := T#1s);
    Stop3 : TP:= ( PT := T#1s);
    Start3 : TP:= ( PT := T#1s);
    Stop4 : TP:= ( PT := T#1s);
    Start4 : TP:= ( PT := T#1s);
    fan: WORD;
    
    Do1: BOOL;
    Do2: BOOL;
    Do3: BOOL;
    Do4: BOOL;
    Do5: BOOL;
    Do6: BOOL;
    
    setmech : ARRAY[1..4] OF BYTE := 2#0011, 2#0101, 2#0110, 2#0111;
    mech : ARRAY[1..4] OF BOOL;
    trig1_start: r_trig;
    trig1_stop: f_trig;
    trig2_start: r_trig;
    trig2_stop: f_trig;
    trig3_start: r_trig;
    trig3_stop: f_trig;
    END_VAR 
    
    fan:=0;
    FOR i :=1 TO 4 DO
    fan:=SEL( mech[i], fan, fan OR setmech[i] );
    END_FOR
    
    trig1_start(clk := fan.0);
    trig1_stop(clk := fan.0);
    trig1_start(clk := fan.1);
    trig1_stop(clk := fan.1);
    trig1_start(clk := fan.2);
    trig1_stop(clk := fan.2);
    
    Start1(IN := trig1_start.q, Q => Do1);
    Stop1(IN := trig1_stop.q, Q => Do2 );
    Start2(IN := trig2_start.q, Q => Do3);
    Stop2(IN := trig2_stop.q, Q => Do4);
    Start3(IN := trig3_start.q, Q => Do5);
    Stop3(IN := trig3_stop.q, Q => Do6);
    запуск вентилей секундным импульсом с нечетных выходов, остановка с четных
    это если у вас надо подключиться параллельно коробочке включения вентиля с 2мя кнопками "вкл и выкл"
    Последний раз редактировалось swerder; 08.09.2011 в 17:04.

  5. #15

    По умолчанию

    если со входа in этого TP не снять true то он будет продолжать выдавать true на выходе. задание pt = 1s теряет смысл

  6. #16

    По умолчанию

    да, перепутал, триггеры излишни
    Цитата Сообщение от Валенок Посмотреть сообщение
    Код:
    Stop1,Start1,
     Stop2,Start2,
     Stop3,Start3,
     Stop4,Start4 : TP:= ( PT := T#1s);
    Дося так же хорошо стирает. Зачем платить больше ?
    дело вкуса, мне больше нравится первый вариант
    Последний раз редактировалось swerder; 08.09.2011 в 21:18.

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

    По умолчанию

    товарищи яж писал управляем функциональными блоками включения вентиляторов а уже он запускает пускатель суть аналогична обычному пуск стоп толь с защитами и выбором режима автомат ручное

  8. #18

    По умолчанию

    если надо только управлять блоком из поста 14, то пользуйте решение из #3 привязав
    auto_start := vent*;
    auto_stop := not vent*;

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

    По умолчанию

    не рещение валенка полностью устраевает работает на отлично сейча прилажую его к маршутам запуска элеватора

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

    По умолчанию

    продолжу тему вот прилаживаю к маршрутам ниже переведён код суть такая чтобы маршруты работающие параллельно могли использовать одновременно одни и те же вентиляторы у меня получилось с 16 вентиляторами но мне этого мало хотел сделать на 32 но что то не выходит возможно нельзя в массиве использовать 32битные двоичные числа а только 16битные
    Код:
    FUNCTION_BLOCK set_cul_march_EL
    VAR_INPUT
    	in: WORD;
    END_VAR
    
    VAR_OUTPUT
    	Do1, Do2, Do3, Do4, Do5, Do6, Do7, Do8, Do9, Do10,
           Do11, Do12, Do13, Do14, Do15, Do16, Do17, Do18,
           Do19, Do20, Do21, Do22, Do23, Do24, Do25, Do26,
           Do27, Do28, Do29, Do30, Do31, Do32: BOOL;
    END_VAR
    
    VAR
    	Stop1, Start1, Stop2, Start2, Stop3, Start3, Stop4, Start4, Stop5, Start5, Stop6, Start6,
           Stop7, Start7, Stop8, Start8, Stop9, Start9, Stop10, Start10, Stop11, Start11, Stop12,
           Start12, Stop13, Start13, Stop14, Start14, Stop15, Start15, Stop16, Start16, Stop17,
           Start17, Stop18, Start18, Stop19, Start19, Stop20, Start20, Stop21, Start21, Stop22,
           Start22, Stop23, Start23, Stop24, Start24, Stop25, Start25, Stop26, Start26, Stop27,
           Start27, Stop28, Start28, Stop29, Start29, Stop30, Start30, Stop31, Start31, Stop32,
           Start32, Stop33, Start33, Stop34, Start34, Stop35, Start35, Stop36, Start36, Stop37,
           Start37, Stop38, Start38, Stop39, Start39, Stop40, Start40, Stop41, Start41, Stop42,
           Start42, Stop43, Start43, Stop44, Start44, Stop45, Start45, Stop46, Start46, Stop47,
           Start47, Stop48, Start48, Stop49, Start49, Stop50, Start50, Stop51, Start51, Stop52,
           Start52, Stop53, Start53, Stop54, Start54, Stop55, Start55, Stop56, Start56, Stop57,
           Start57, Stop58, Start58, Stop59, Start59, Stop60, Start60, Stop61, Start61, Stop62,
           Start62, Stop63, Start63, Stop64, Start64, Stop65, Start65, Stop66, Start66, Stop67,
           Start67, Stop68, Start68, Stop69, Start69, Stop70, Start70, Stop71, Start71, Stop72,
           Start72, Stop73, Start73, Stop74, Start74, Stop75, Start75, Stop76, Start76, Stop77,
           Start77, Stop78, Start78, Stop79, Start79, Stop80, Start80, Stop81, Start81, Stop82,
           Start82, Stop83, Start83, Stop84, Start84, Stop85, Start85, Stop86, Start86, Stop87,
           Start87, Stop88, Start88, Stop89, Start89, Stop90, Start90, Stop91, Start91, Stop92,
           Start92, Stop93, Start93, Stop94, Start94, Stop95, Start95, Stop96, Start96, Stop97,
           Start97, Stop98, Start98, Stop99, Start99, Stop100, Start100, Stop101, Start101,
           Stop102, Start102, Stop103, Start103, Stop104, Start104, Stop105, Start105, Stop106,
           Start106, Stop107, Start107, Stop108, Start108, Stop109, Start109, Stop110, Start110,
           Stop111, Start111, Stop112, Start112, Stop113, Start113, Stop114, Start114, Stop115,
           Start115, Stop116, Start116, Stop117, Start117, Stop118, Start118, Stop119, Start119,
           Stop120, Start120, Stop121, Start121, Stop122, Start122, Stop123, Start123, Stop124,
           Start124, Stop125, Start125, Stop126, Start126, Stop127, Start127, Stop128, Start128,
           Stop129, Start129, Stop130, Start130, Stop131, Start131, Stop132, Start132, Stop133,
           Start133, Stop134, Start134, Stop135, Start135, Stop136, Start136, Stop137, Start137,
           Stop138, Start138, Stop139, Start139, Stop140, Start140, Stop141, Start141, Stop142,
           Start142, Stop143, Start143, Stop144, Start144, Stop145, Start145, Stop146, Start146,
           Stop147, Start147, Stop148, Start148, Stop149, Start149, Stop150, Start150, Stop151,
           Start151, Stop152, Start152, Stop153, Start153, Stop154, Start154, Stop155, Start155,
           Stop156, Start156, Stop157, Start157, Stop158, Start158, Stop159, Start159, Stop160,
           Start160
    :TP:= ( PT := T#2s);
    
    	fan: WORD;(*32 bita*)
    	i: WORD;(*32 bita*)
    
    	mech : ARRAY[1..160] OF BOOL;
    	setmech : ARRAY[1..160] OF BYTE :=
           (*В этом массиве хранитса состояние вентиляторов
           для каждого из 160 маршрутов норий №1-4*)
    (*16*)
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
    (*32*)
    далее одно и тоже непоказано для экономии места
    (*160*)
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000,
           2#00000000000000000000000000000000;
    END_VAR
    (***********************************************)
    
    fan:=0;
    FOR i :=1 TO 160 DO
    	fan:=SEL( mech[i], fan, fan OR setmech[i] );
    END_FOR
    (*
    mech[0]:=in.0;
    mech[1]:=in.1;
    mech[2]:=in.2;
    mech[3]:=in.3;
    *)
    	Start1(IN :=  fan.0 OR fan.2, Q =>Do1);
    	Stop1(IN :=  NOT fan.0 OR fan.2, Q => Do2);
    	Start2(IN :=  fan.1 OR fan.3, Q => Do3);
    	Stop2(IN :=  NOT fan.1 OR fan.3, Q => Do4);
    Последний раз редактировалось alexval2006; 13.09.2011 в 18:07.

Страница 2 из 8 ПерваяПервая 1234 ... ПоследняяПоследняя

Ваши права

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