Страница 5 из 5 ПерваяПервая ... 345
Показано с 41 по 44 из 44

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

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

    По умолчанию

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

    Код:
    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; //Текущая секунда
            in_Time:        udint;
        end_var
    
        var_output //объявление выходных переменных
            Flow:           real;
            FlowDay:        real;
            FlowHour:       real;
            FlowMonth:      real;
            FlowYear:       real;
            ImpMass:        real;
            out_Time:       udint;
        end_var
            
        var //объявление локальных переменных
            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_year := in_Time mod 100;
        l_month := (in_Time / 100) mod 100;
        l_day := (in_Time / 10000) mod 100;
        l_hour := in_Time / 1000000;
        
        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 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;
        end_if
        
        if i_nowHour <> l_hour then
            l_FlowHour := 0;
        end_if
        
        if i_nowMonth <> l_month then
            l_FlowMonth := 0; 
        end_if
        
        if i_nowYear <> l_year then
            l_FlowYear := 0; 
        end_if
        
        ImpMass := l_impMass;
        Flow := l_Flow;
        FlowHour := l_FlowHour;
        FlowDay := l_FlowDay;
        FlowMonth := l_FlowMonth;
        FlowYear := l_FlowYear;
        out_Time := i_nowHour * 1000000 + i_nowDay * 10000 + i_nowMonth * 100 + i_nowYear;  
    
    end_function_block
    Вложения Вложения
    • Тип файла: owle 222.owle (45.0 Кб, Просмотров: 6)

  2. #42

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Ну, вот так можно

    Код:
    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; //Текущая секунда
            in_Time:        udint;
        end_var
    
        var_output //объявление выходных переменных
            Flow:           real;
            FlowDay:        real;
            FlowHour:       real;
            FlowMonth:      real;
            FlowYear:       real;
            ImpMass:        real;
            out_Time:       udint;
        end_var
            
        var //объявление локальных переменных
            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_year := in_Time mod 100;
        l_month := (in_Time / 100) mod 100;
        l_day := (in_Time / 10000) mod 100;
        l_hour := in_Time / 1000000;
        
        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 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;
        end_if
        
        if i_nowHour <> l_hour then
            l_FlowHour := 0;
        end_if
        
        if i_nowMonth <> l_month then
            l_FlowMonth := 0; 
        end_if
        
        if i_nowYear <> l_year then
            l_FlowYear := 0; 
        end_if
        
        ImpMass := l_impMass;
        Flow := l_Flow;
        FlowHour := l_FlowHour;
        FlowDay := l_FlowDay;
        FlowMonth := l_FlowMonth;
        FlowYear := l_FlowYear;
        out_Time := i_nowHour * 1000000 + i_nowDay * 10000 + i_nowMonth * 100 + i_nowYear;  
    
    end_function_block
    Перевод всего времени в UNIX c последующим вытаскиванием дат?
    Последний раз редактировалось Григори; 28.12.2023 в 16:00.
    Ничего не понятно, но очень интересно

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

    По умолчанию

    Цитата Сообщение от Григори Посмотреть сообщение
    Перевод всего времени в UNIX?
    Мне лень писать на ST перевод из юникса в дату, поэтому просто упаковал. А так, да, по хорошему на вход надо подавать дату в юникс формате, и входов меньше будет

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

    По умолчанию

    В, общем, вроде так надо. Ведь нам надо еще синхронизировать импульсы и приращение времени, чтобы при рассогласовании не было погрешности
    Вложения Вложения
    • Тип файла: owle 333.owle (48.7 Кб, Просмотров: 19)

Страница 5 из 5 ПерваяПервая ... 345

Похожие темы

  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

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

Ваши права

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