Страница 7 из 7 ПерваяПервая ... 567
Показано с 61 по 64 из 64

Тема: Подсчет мгновенного расхода жидкости от импульсов.

  1. #61
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,108

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Думаю, проблема в погрешности расчета времени цикла.
    Попробуйте время цикла посчитать так

    Код:
    function_block TimeCycle
        
        var_input
            none : bool;
        end_var
        
        var_output 
            Q : udint;
        end_var
        
        var 
            init : bool;
            t1, t2 : udint;
        end_var
        
        t1 := time_to_udint(get_time());
        if init then
            Q := t1 - t2;
        else
            init := true;
        end_if
        t2 := t1;
    
    end_function_block
    Проще сразу на ST мгновенный расход вычислять, время цикла не нужно вообще
    Простейший вариант
    Код:
    function_block RASHOD_lite   (* (с) PeterA для форума ОВЕН *) 
        var_input
            TIC: BOOL;        (*импульс счетчика*)
            Cimp: REAL;       (*Вес импульса, л*)
        end_var
        
        var_output 
            Q: REAL;        (*мгновенный расход мкуб/час*)
        end_var
        
        var 
            M: BOOL;
            period: TIME;
            start: TIME;
        end_var
    
    IF TIC AND NOT M THEN
        period:= GET_TIME() - start;
        start:= GET_TIME();
    END_IF
    M:= TIC;
    Q:= 3600/udint_to_real(time_to_udint(period)) * Cimp;
    end_function_block
    Более продвинутый вариант - с учетом параметра расходомера Qмин (Минимальный расход) см.ниже
    https://owen.ru/forum/showthread.php...l=1#post470767

    Захват-11.png
    Последний раз редактировалось petera; 01.09.2025 в 12:10.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  2. #62

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Проще сразу на ST мгновенный расход вычислять, время цикла не нужно вообще
    Более продвинутый вариант - с учетом параметра расходомера Qмин (Минимальный расход)
    Более продвинутый вариант не работает 1 Расход.jpg

  3. #63
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,108

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Более продвинутый вариант не работает 1 Расход.jpg
    Спасибо,
    Достаточно было опрометчиво переместить одну строчку, в начало IF и всё...
    Правильный код
    Код:
    function_block RASHOD_Ex   (* (с) PeterA для форума ОВЕН *) 
    
        var_input
            TIC: BOOL;        (*импульс счетчика*)
            Cimp: REAL;       (*Вес импульса, л*)
            Qmin: REAL;        (*Минимальный расход м.куб/час*)
        end_var
        
        var_output 
            Q: REAL;        (*мгновенный расход мкуб/час*)
            overflow: BOOL;        (*Нет расхода (период импульсов больше максимального)*)
        end_var
        
        var 
            M: BOOL;
            period: TIME;
            start: TIME;
            INIT: BOOL;        (*пришел первый, начальный импульс, последовательности*)
            cur_TIME: TIME;    (*текущее время*)
            period2: TIME;     (*сколько прошло времени от фронта импульса*)
        end_var
    
    cur_TIME:= GET_TIME();
    IF TIC AND NOT M THEN    (*если фронт импульса*)
    (* Было тут period2:=cur_TIME- start; *)
        IF NOT INIT THEN        (*если зто первый импульс*)
            INIT:= TRUE;        (*начинаем подсчет времени до фронта следующего импульса*)
            Q:= 0;              (* а пока расход = 0*)
        ELSE                    (*если не первый импульс, то*)
            period:= cur_TIME - start;    (*время между импульсами*)
            Q:= 3600/udint_to_real(time_to_udint(period)) * Cimp;        (*мгновенный расход*)
            overflow:= FALSE;    (*переполнения по времени между импульсами нет*)
        END_IF
    start:= cur_TIME;            (*фиксация времени прихода фронта импульса*)    
    END_IF
    M:= TIC;                    (*пришел фронт импульса*)
    period2:=cur_TIME- start;    (*сколько прошло времени от фронта последнего импульса*)
    IF period2 >= udint_to_time(real_to_udint(3600 * Cimp / Qmin)) THEN (*если от фронта последнего импульса прошло время больше допустимого по Qmin*)
        Q:=0;                    (*значит нет расхода*)
        INIT:= FALSE;            (*следующий импульс будет первым*)
        overflow:= TRUE;         (*флаг переполнения по времени между импульсами*)
    END_IF
    
    end_function_block
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #64

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Проще сразу на ST мгновенный расход вычислять, время цикла не нужно вообще
    Простейший вариант
    Код:
    function_block RASHOD_lite   (* (с) PeterA для форума ОВЕН *) 
        var_input
            TIC: BOOL;        (*импульс счетчика*)
            Cimp: REAL;       (*Вес импульса, л*)
        end_var
        
        var_output 
            Q: REAL;        (*мгновенный расход мкуб/час*)
        end_var
        
        var 
            M: BOOL;
            period: TIME;
            start: TIME;
        end_var
    
    IF TIC AND NOT M THEN
        period:= GET_TIME() - start;
        start:= GET_TIME();
    END_IF
    M:= TIC;
    Q:= 3600/udint_to_real(time_to_udint(period)) * Cimp;
    end_function_block
    Более продвинутый вариант - с учетом параметра расходомера Qмин (Минимальный расход) см.ниже
    https://owen.ru/forum/showthread.php...l=1#post470767

    Захват-11.png
    Благодарю за код на ST - всё прекрасно работает!

Страница 7 из 7 ПерваяПервая ... 567

Похожие темы

  1. Вычисление мгновенного расхода воды
    от kip-pribor в разделе Среда программирования OWEN Logic
    Ответов: 66
    Последнее сообщение: 18.09.2025, 09:07
  2. Учёт расхода жидкости
    от Сема в разделе Телемеханика ЛАЙТ
    Ответов: 41
    Последнее сообщение: 19.03.2018, 13:41
  3. Ответов: 3
    Последнее сообщение: 21.04.2017, 17:12
  4. Скоростной подсчет импульсов.
    от Lihoj в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 14.03.2017, 21:32
  5. Подсчет импульсов (расходомеры)
    от Gans в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 22.05.2007, 13:55

Метки этой темы

Ваши права

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