Страница 795 из 856 ПерваяПервая ... 295695745785793794795796797805845 ... ПоследняяПоследняя
Показано с 7,941 по 7,950 из 8553

Тема: CODESYS V3.5. Вопросы и ответы

  1. #7941

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Не проще ли переключать выходы, указанные в массиве?
    И если выход в блоке, просто удалять его из массива.
    А как это сделать? Поделитесь пожалуйста

  2. #7942
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,993

    По умолчанию

    Ну контролировать что у вас заблокировано и вносить в массив разрешенные. Количество разрешенных параметр счетчика, по импульсу перебирать массив, сбрасывая счетчик, когда массив заканчивается, чтобы возвращаться с первому элементу массива.

  3. #7943

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Ну контролировать что у вас заблокировано и вносить в массив разрешенные. Количество разрешенных параметр счетчика, по импульсу перебирать массив, сбрасывая счетчик, когда массив заканчивается, чтобы возвращаться с первому элементу массива.
    ST для меня пока дремучий лес. Только изучаю

  4. #7944

    По умолчанию

    Цитата Сообщение от shvitaliy Посмотреть сообщение
    ST для меня пока дремучий лес. Только изучаю
    Вариант кода
    Скрытый текст:
    Код:
    FUNCTION_BLOCK Circle
    VAR_INPUT
         IN: BOOL ;
         alar1,alar2,alar3,alar4 : BOOL ;
    END_VAR
    VAR_OUTPUT
        run       : WORD;       (*число запущенных котлов*)
        nonorm    : WORD;          (*число котлов в нерабочем состоянии*)
        boil1,boil2,boil3,boil4: BOOL ;
    END_VAR
    VAR
        i, j    : WORD;
        main    : WORD:=0;    (*номер основного котла*)
        amount :WORD:=1;   (*необходимое число котлов*)
        boiler    : ARRAY[0..4] OF BOOL; (*запуск котла*)
        alarm    : ARRAY[0..4] OF BOOL; (*авария котла исключает его из работы*)
        num      : WORD:=4;     (*общее число котлов*)
        R_Trig1:  R_TRIG;
    END_VAR
    
    //  PRG
    run := 0;          (*Сбрасываем переменные для нового расчета*)
    nonorm := 0;
    
    alarm[1]:=alar1; alarm[2]:=alar2; alarm[3]:=alar3; alarm[4]:=alar4;    (* Формируем массив аварий *)
    
    FOR i:=1 TO num DO        (*Определяем сколько котлов в нерабочем состоянии*)
        nonorm := nonorm + BOOL_TO_WORD(alarm[i]);
    END_FOR
    
      R_Trig1(Clk:=IN);  (* Переключаем основной котел*)
    IF R_Trig1.Q THEN
        main:=main+1;
        IF main>num THEN main:=1; END_IF
           FOR i:=0 TO num-1 DO
           boiler[i]:= FALSE;
           END_FOR
    END_IF
    
    WHILE alarm[main] AND nonorm < num DO main :=SEL(main=NUM, main+1,1); END_WHILE        (*Назначаем основной котел*)
    
    FOR i := main TO main+num-1 DO  (*Запускаем необходимое число котлов, остальные останавливаем*)
        j := SEL(i>num, i, i-num);
        IF NOT alarm[j] AND run<amount
        THEN boiler[j] := TRUE; run := run+1;
        ELSE boiler[j] := FALSE;
        END_IF
    END_FOR
    
    boil1:=boiler[1]; boil2:=boiler[2]; boil3:=boiler[3]; boil4:=boiler[4];  (* Формируем  выходы *)
    IF run>num THEN run:=0; END_IF
    Последний раз редактировалось kondor3000; 30.12.2024 в 13:12.

  5. #7945
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,438

    По умолчанию

    В одной из тем форума подобное рассматривали:

    Сигнализация включённых входов_14.PNG

    Сигнализация включённых входов_14.owle

    И, здесь подобный алгоритм рассматривали:
    https://owen.ru/forum/showthread.php?t=36564
    Последний раз редактировалось Сергей0308; 30.12.2024 в 17:13.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  6. #7946

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Вариант кода
    Скрытый текст:
    Код:
    FUNCTION_BLOCK Circle
    VAR_INPUT
         IN: BOOL ;
         alar1,alar2,alar3,alar4 : BOOL ;
    END_VAR
    VAR_OUTPUT
        run       : WORD;       (*число запущенных котлов*)
        nonorm    : WORD;          (*число котлов в нерабочем состоянии*)
        boil1,boil2,boil3,boil4: BOOL ;
    END_VAR
    VAR
        i, j :UDINT;
        main    : WORD:=0;    (*номер основного котла*)
        amount  : WORD:=1;   (*необходимое число котлов*)
        boiler  :ARRAY[0..4] OF BOOL; (*запуск котла*)
        alarm   :ARRAY[0..4] OF BOOL; (*авария котла исключает его из работы*)
        num     : WORD:=4;     (*общее число котлов*)
        R_Trig1:  R_TRIG;
    END_VAR
    
    //  PRG
    run := 0;          (*Сбрасываем переменные для нового расчета*)
    nonorm := 0;
    
    alarm[1]:=alar1; alarm[2]:=alar2; alarm[3]:=alar3; alarm[4]:=alar4;    (* Формируем массив аварий *)
    
    FOR i:=1 TO num DO        (*Определяем сколько котлов в нерабочем состоянии*)
        nonorm := nonorm + BOOL_TO_WORD(alarm[i]);
    END_FOR
    
      R_Trig1(Clk:=IN);  (* Переключаем основной котел*)
    IF R_Trig1.Q THEN
          main:=main+1;
        IF main>4 THEN main:=1; END_IF
           FOR i:=0 TO 3 DO
               boiler[i]:= FALSE;
           END_FOR
    END_IF
    
    WHILE alarm[main] AND nonorm < num DO main :=SEL(main=NUM, main+1,1); END_WHILE        (*Назначаем основной котел*)
    
    FOR i := main TO main+num-1 DO  (*Запускаем необходимое число котлов, остальные останавливаем*)
        j := SEL(i>num, i, i-num);
        IF NOT alarm[j] AND run<amount
        THEN boiler[j] := TRUE; run := run+1;
        ELSE boiler[j] := FALSE;
        END_IF
    END_FOR
    
    boil1:=boiler[1]; boil2:=boiler[2]; boil3:=boiler[3]; boil4:=boiler[4];  (* Формируем  выходы *)
    IF run>4 THEN run:=0; END_IF
    Спасибо за помощь! Проверил код, отлично работает.
    Подскажите пожалуйста, как прикрутить еще одно условие?
    Если на входе пропадает сигнал, то активный выход отключается, все остальные условия сохраняются.
    Последний раз редактировалось shvitaliy; 30.12.2024 в 12:54.

  7. #7947

    По умолчанию

    Цитата Сообщение от shvitaliy Посмотреть сообщение
    Спасибо за помощь! Проверил код, отлично работает.
    Подскажите пожалуйста, как прикрутить еще одно условие?
    Если на входе пропадает сигнал, то активный выход отключается, все остальные условия сохраняются.
    Какой сигнал и на каком входе? Куда пропадает?
    In просто переключает, а аварии выставляете если они есть.

  8. #7948

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Какой сигнал и на каком входе? Куда пропадает?
    In просто переключает, а аварии выставляете если они есть.
    Если in пропадает, то активный выход отключается

  9. #7949

    По умолчанию

    Цитата Сообщение от shvitaliy Посмотреть сообщение
    Если in пропадает, то активный выход отключается
    Не понятно куда он может пропасть, вы можете только отследить его отсутствие в течении например 10 секунд, по таймеру.
    Тогда отключить выходы, можно задав main:=0; в конце ФБ, а так же сбросить последний элемент массива (маску) выходов, можно так
    Код:
    TOF1(IN:=In , PT:=T#10s);
    IF NOT TOF1.Q THEN main:=0; boiler[4]:= FALSE; END_IF
    Последний раз редактировалось kondor3000; 30.12.2024 в 15:40.

  10. #7950

    По умолчанию

    Спасибо большое

Страница 795 из 856 ПерваяПервая ... 295695745785793794795796797805845 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 4011
    Последнее сообщение: 09.12.2025, 16:11
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 849
    Последнее сообщение: 16.11.2025, 08:58
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 273
    Последнее сообщение: 08.09.2025, 13:21
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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