Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 44

Тема: ФБ сохранения показаний на ST с энергонезависимостью.

  1. #1

    Unhappy ФБ сохранения показаний на ST с энергонезависимостью.

    Всем доброго времени суток, разрабатываю блок для подсчета показаний
    с импульсного счетчика на ST. Общие показания сохраняются спокойно и после отключения питания остаются,
    но временные показания (сутки, час, месяц, год) слетают после отключения питания.
    С чем может быть связан сброс? Программу прилагаю.
    Прибор: ПР200-24.2.2.0

    З.Ы.: смею высказать свою теорию, что из-за несовпадения даты с сохраненной в локальные переменные блока при повторной подаче питания.
    Ничего не понятно, но очень интересно

  2. #2

    По умолчанию

    Цитата Сообщение от Григори Посмотреть сообщение
    Всем доброго времени суток, разрабатываю блок для подсчета показаний
    с импульсного счетчика на ST. Общие показания сохраняются спокойно и после отключения питания остаются,
    но временные показания (сутки, час, месяц, год) слетают после отключения питания.
    С чем может быть связан сброс? Программу прилагаю.
    Прибор: ПР200-24.2.2.0

    З.Ы.: смею высказать свою теорию, что из-за несовпадения даты с сохраненной в локальные переменные блока при повторной подаче питания.
    Вы же сами всё обнуляете, например кусок кода
    Код:
    if i_nowDay <> l_day then
            l_FlowDay := 0;  // Зачем здесь обнуление?
            l_day := i_nowDay; 
        end_if
    Сначала присваиваете l_FlowDay := i_FlowDay; а потом в коде обнуляете l_FlowDay := 0; // Зачем здесь обнуление? И так везде

  3. #3

    По умолчанию

    kondor3000, Это сравнение числа дня входной переменной с локальной, если не совпадает(по логике происходит на след. день в 00:00), l_FlowDay - переменная с данными по самому потоку (Поток день, дословно) становится равна нулю и считается заново. Аналогичные операции проделываются с годом, часом и месяцем
    Последний раз редактировалось Григори; 27.12.2023 в 19:51.
    Ничего не понятно, но очень интересно

  4. #4

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Вы же сами всё обнуляете, например кусок кода
    Код:
    if i_nowDay <> l_day then
            l_FlowDay := 0;  // Зачем здесь обнуление?
            l_day := i_nowDay; 
        end_if
    Сначала присваиваете l_FlowDay := i_FlowDay; а потом в коде обнуляете l_FlowDay := 0; // Зачем здесь обнуление? И так везде

    Кусок кода с вычислениями расходов:
    Код:
    if i_Imp = TRUE then
           l_flow := l_Flow + ((1 / 1000) * i_ImpMass);
           l_FlowDay := l_FlowDay + ((1 / 1000) * i_ImpMass);
           l_FlowHour := l_FlowHour + ((1 / 1000) * i_ImpMass);
           l_FlowMonth := l_FlowMonth + ((1 / 1000) * i_ImpMass);
           l_FlowYear := l_FlowYear + ((1 / 1000) * i_ImpMass);
        end_if
    Кусок кода со сравнениями переменных дат и времени для сброса когда надо:
    Код:
    if i_nowDay <> l_day then
            l_FlowDay := 0;
            l_day := i_nowDay; 
        end_if
        
        if i_nowHour <> l_hour then
            l_FlowHour := 0;
            l_hour := i_nowHour; 
        end_if
        
        if i_nowMonth <> l_month then
            l_FlowMonth := 0;
            l_month := i_nowMonth; 
        end_if
        
        if i_nowYear <> l_year then
            l_FlowYear := 0;
            l_year := i_nowYear; 
        end_if
    И каждый цикл программы в сравнениях(и просто в коде) происходит перезапись локальных переменных (которые, как я слышал, энергонезависимые).
    Код:
    l_Flow := i_Flow;
    l_FlowYear := i_FlowYear;
    l_FlowMonth := i_FlowMonth;
    l_FlowDay := i_FlowDay;
    l_FlowHour := i_FlowHour;
    l_impMass:= i_ImpMass;
    В таблице переменных все с галочкой на энергонезависимость, но оно все равно сбрасывается

    P.S.: все переменные с i_ - входные, l_ - локальные, а выходные без префикса. Но да, комментариев в коде я оставил мало
    Последний раз редактировалось Григори; 27.12.2023 в 19:50.
    Ничего не понятно, но очень интересно

  5. #5

    По умолчанию

    Просто закомментируйте на время кусок кода с обнулением и проверьте, будут ли сохраняться расходы, при перезагрузке по питанию.
    Возможно надо ввести таймер на несколько секунд, чтобы не обнулялось при подаче питания.
    Последний раз редактировалось kondor3000; 28.12.2023 в 08:50.

  6. #6

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Просто закомментируйте на время кусок кода с обнулением и проверьте, будут ли сохраняться расходы, при перезагрузке по питанию.
    Возможно надо ввести таймер на несколько секунд, чтобы не обнулялось при подаче питания.
    Да, вы правы, если исключить из условия обнуление, он не сбрасывается при перезапуске питания. Как понимаю, задержку на включение действий условия на ST тоже надо сделать.
    TON из оф. видео подойдет же?
    https://www.youtube.com/watch?v=agJTfeRnfy4
    Ничего не понятно, но очень интересно

  7. #7

    По умолчанию

    Цитата Сообщение от Григори Посмотреть сообщение
    Да, вы правы, если исключить из условия обнуление, он не сбрасывается при перезапуске питания. Как понимаю, задержку на включение действий условия на ST тоже надо сделать.
    TON из оф. видео подойдет же?
    https://www.youtube.com/watch?v=agJTfeRnfy4
    Может проще выполнение всего блока отложить на один цикл после включения питания

  8. #8

    По умолчанию

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

  9. #9
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    1,138

    По умолчанию

    Цитата Сообщение от Григори Посмотреть сообщение
    Не совсем понимаю, как это реализовать. Поставить линии задержки на все выходные переменные?
    Еще один вход сделать - разрешение работы

  10. #10

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Просто закомментируйте на время кусок кода с обнулением и проверьте, будут ли сохраняться расходы, при перезагрузке по питанию.
    Возможно надо ввести таймер на несколько секунд, чтобы не обнулялось при подаче питания.
    Переписал ТОН из оф. ролика. Переменная теперь просто сбрасывается с задержкой таймера после включения.
    Делал условие для выключения таймера, тоже не помогает

    Код:
    function_block Flowmeter //имя функционального блока.
    
        var_input //объявление входных переменных
            i_Imp:          bool; //переменная считывания переднего фронта импульса
            i_ImpMass:      real; //переменна цены импульса
            i_Flow:         real; //Общий поток
            i_FlowYear:     real; //Годовой поток
            i_FlowMonth:    real; //Поток за месяц
            i_FlowDay:      real; //Поток за день
            i_FlowHour:     real; //Поток за час
            
            i_nowYear:     udint; //Текущий год
            i_nowMonth:    udint; //Текущий месяц
            i_nowDay:      udint; //Текущий день
            i_nowHour:     udint; //Текущий час
            i_nowMinute:   udint; //Текущая минута
            i_nowSecond:   udint; //Текущая секунда
        end_var
    
        var_output //объявление выходных переменных
            Flow:           real;
            FlowDay:        real;
            FlowHour:       real;
            FlowMonth:      real;
            FlowYear:       real;
            ImpMass:        real;
        end_var
            
        var //объявление локальных переменных
            TON: TON_FB;
            TON_Q:          BOOL;
            l_Flow:         real;
            l_FlowDay:      real;
            l_FlowHour:     real;
            l_FlowMonth:    real;
            l_FlowYear:     real;
            l_year:        udint;
            l_month:       udint;
            l_day:         udint;
            l_hour:        udint;
            l_minute:      udint;
            l_second:      udint;
            l_impMass:      real;
        end_var
        
        
        
        l_Flow := i_Flow;
        l_FlowYear := i_FlowYear;
        l_FlowMonth := i_FlowMonth;
        l_FlowDay := i_FlowDay;
        l_FlowHour := i_FlowHour;
        l_impMass:= i_ImpMass;
        
        
        if i_Imp = TRUE then
           l_flow := l_Flow + ((1 / 1000) * i_ImpMass);
           l_FlowDay := l_FlowDay + ((1 / 1000) * i_ImpMass);
           l_FlowHour := l_FlowHour + ((1 / 1000) * i_ImpMass);
           l_FlowMonth := l_FlowMonth + ((1 / 1000) * i_ImpMass);
           l_FlowYear := l_FlowYear + ((1 / 1000) * i_ImpMass);
        end_if
        
    
    //Тут на поток за день сделал попытку с таймером
        if i_nowDay <> l_day then
            TON(IN := true, PT:= 5,SEC := i_nowSecond, Q => TON_Q);
                if TON_Q then
                    l_day := i_nowDay; 
                    l_FlowDay := 0;
                end_if
        else 
             TON(IN := false);
        end_if
        
        if i_nowHour <> l_hour then
            l_hour := i_nowHour; 
            //l_FlowHour := 0;
        end_if
        
        if i_nowMonth <> l_month then
            l_month := i_nowMonth; 
            //l_FlowMonth := 0;
        end_if
        
        if i_nowYear <> l_year then
            l_year := i_nowYear; 
            //l_FlowYear := 0;
        end_if
        
        ImpMass := l_impMass;
        Flow := l_Flow;
        FlowHour := l_FlowHour;
        FlowDay := l_FlowDay;
        FlowMonth := l_FlowMonth;
        FlowYear := l_FlowYear;
    
    end_function_block
    Ничего не понятно, но очень интересно

Страница 1 из 5 123 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 11
    Последнее сообщение: 05.05.2020, 16:00
  2. Автоматизация сохранения трендов
    от Vinsen в разделе Master SCADA 3
    Ответов: 12
    Последнее сообщение: 08.10.2018, 11:51
  3. Ошибка сохранения проекта MASTERSCADA
    от AndreMary в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 13.02.2015, 13:04
  4. Ошибка пути сохранения отчета
    от klg в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 01.12.2014, 16:56
  5. режим сохранения графиков
    от soi в разделе OWEN Proces Manager
    Ответов: 1
    Последнее сообщение: 26.03.2012, 10:49

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

Ваши права

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