Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 28

Тема: Запись переменной

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

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Жалко только, что при отключении питания ничего не сохраняется.
    Да, мой косяк.
    Исправил
    Код:
    FUNCTION_BLOCK RunTime_Counter      //имя функционального блока
        VAR_INPUT                       //объявление входных переменных
            Run : BOOL;                 //разрешение работы
            Set : BOOL;                 //запись уставок времени
            Res : BOOL;                 //сброс счетчиов
            SetHour, SetMin, SetSec, SetOn: UDINT;     //входы уставок
            Work_ : udint;      //Вход для энергонезависимоцй переменной наработки
            cOn_ : udint; //Вход для энергонезависимой перееменной количество включений
        END_VAR   
        VAR_OUTPUT                      //объявление выходных переменных
            Work, cOn : UDINT;  //выходы для энергонезависимых переменных
            sHour, sMin, sSec, sOn: UDINT;     //выходы времени и количества включений
        END_VAR   
        VAR                             //объявление локальных переменных
            T, T1: UDINT;
            RunTrig : SYS.RTRIG;
            init : BOOL:=true; 
        END_VAR
        
        T:= TIME_TO_UDINT(GET_TIME());
        
        if Init then //Инициализация при первом включении
            Work := Work_;
            cOn := cOn_;
            SetHour := Work / 3600;
            SetMin := (Work / 60) mod 60;
            SetSec := Work mod 60;
            SetOn:=cOn;
            T1 := T;
            Init := false;
        end_if
        
        RunTrig(I := Run);    
        if Run then
            if T-T1 >= 1000 then 
                Work := Work_ + 1;
                T1 := T;
            end_if
            cOn := cOn_ + bool_to_udint(RunTrig.Q);
            sHour := Work / 3600;
            sMin := (Work / 60) mod 60;
            sSec := Work mod 60;
            sOn:=cOn; 
        else
            T1 := T;
            sHour := SetHour;
            sMin := SetMin;
            sSec := SetSec;
            sOn := SetOn;
            if Set then
                Work := sHour * 3600 + sMin * 60 + sSec;
                cOn := sOn;
            end_if
            if Res then
                sHour := 0;
                sMin := 0;
                sSec := 0;
                sOn := 0;
                Work := 0;
                cOn := 0;
            end_if
        end_if
         
    END_FUNCTION_BLOCK

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

    По умолчанию

    А можно и в квадратиках
    Вложения Вложения

  3. #13

    По умолчанию

    Ну вот. Не успел. А так сам хотел. За меня все сделали)

  4. #14

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    А можно и в квадратиках
    А генератор на блинк на сколько точен?
    И что как лучше: ФБ на ST или макрос на ФБ с точки зрения оптимизации работы и памяти?
    Последний раз редактировалось pahotnyh; 18.04.2025 в 12:10.

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

    По умолчанию

    Цитата Сообщение от pahotnyh Посмотреть сообщение
    А генератор на блинк на сколько точен?
    В среднем, время цикла

    И что как лучше: ФБ на ST или макрос на ФБ с точки зрения оптимизации работы и памяти?
    Никогда не задумывался об этом - памяти хватает, быстродействия для моих задач тоже. Для меня главное, какой язык удобнее для решения конкретной задачи

  6. #16

    По умолчанию

    Цитата Сообщение от pahotnyh Посмотреть сообщение
    А генератор на блинк на сколько точен?
    И что как лучше: ФБ на ST или макрос на ФБ с точки зрения оптимизации работы и памяти?
    На блинк, будет время уходить, на ПР вообще не точные часы, а с блинком ещё хуже.

    Как по мне, то работать со временем, с расчётами на ST намного лучше. Большой минус пока один, нельзя использовать энергонезависимые прямо в ФБ.
    Надеюсь допилят.
    По памяти, даже сравнивая последние 2 проекта, разница в 1% ПЗУ, на ST больше, как раз из-за вывода переменных за пределы ФБ.
    Последний раз редактировалось kondor3000; 18.04.2025 в 16:46.

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

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    На блинк, будет время уходить, на ПР вообще не точные часы, а с блинком ещё хуже..
    Если блинк правильно приготовить, то с чего это времени уплывать?
    Если кому не лень, можно устроить батл
    Безымянный.png

  8. #18

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Если блинк правильно приготовить, то с чего это времени уплывать?
    Если кому не лень, можно устроить батл
    Безымянный.png
    Ну это на железе надо проверять. У меня его нет..

  9. #19

    По умолчанию

    И еще раз к вопросу целесообразности ротации оборудования по м/ч (заехал на вахту и могу поделиться живыми данными).
    ДГУ работают периодически для заряда АКБ на установленных вдоль трубопровода блоках местной и дистанционной автоматики. В 9 из 10 блок-боксах на ДГУ я реализовал алгоритм ротации по м/ч. На 10-й, производства Элеси, простая поочередная ротация от Zelio. Количество активных ДГУ разное. Дельта - 24 м/ч.



    1 2 3 4 5 6 7 8 9 ЭЛЕСИ
    1797 1310 2240 2809 1313 1601 1927 1489 2871 1773
    1785 1304 2236 2814 1302 1608 1924 1489 2861 2618
    1921 1528

    Именно возможность менять наработку и количество пусков (а так же выработку ЭЭ и т.д.) позволило перенести данные при замене контроллеров. Картина маслом..
    P.S. В ситуации как у 8 агрегаты имеют приоритеты пуска.
    Последний раз редактировалось pahotnyh; 21.04.2025 в 15:45.

  10. #20

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Да, мой косяк.
    Исправил
    Код:
    FUNCTION_BLOCK RunTime_Counter      //имя функционального блока
        VAR_INPUT                       //объявление входных переменных
            Run : BOOL;                 //разрешение работы
            Set : BOOL;                 //запись уставок времени
            Res : BOOL;                 //сброс счетчиов
            SetHour, SetMin, SetSec, SetOn: UDINT;     //входы уставок
            Work_ : udint;      //Вход для энергонезависимоцй переменной наработки
            cOn_ : udint; //Вход для энергонезависимой перееменной количество включений
        END_VAR   
        VAR_OUTPUT                      //объявление выходных переменных
            Work, cOn : UDINT;  //выходы для энергонезависимых переменных
            sHour, sMin, sSec, sOn: UDINT;     //выходы времени и количества включений
        END_VAR   
        VAR                             //объявление локальных переменных
            T, T1: UDINT;
            RunTrig : SYS.RTRIG;
            init : BOOL:=true; 
        END_VAR
        
        T:= TIME_TO_UDINT(GET_TIME());
        
        if Init then //Инициализация при первом включении
            Work := Work_;
            cOn := cOn_;
            SetHour := Work / 3600;
            SetMin := (Work / 60) mod 60;
            SetSec := Work mod 60;
            SetOn:=cOn;
            T1 := T;
            Init := false;
        end_if
        
        RunTrig(I := Run);    
        if Run then
            if T-T1 >= 1000 then 
                Work := Work_ + 1;
                T1 := T;
            end_if
            cOn := cOn_ + bool_to_udint(RunTrig.Q);
            sHour := Work / 3600;
            sMin := (Work / 60) mod 60;
            sSec := Work mod 60;
            sOn:=cOn; 
        else
            T1 := T;
            sHour := SetHour;
            sMin := SetMin;
            sSec := SetSec;
            sOn := SetOn;
            if Set then
                Work := sHour * 3600 + sMin * 60 + sSec;
                cOn := sOn;
            end_if
            if Res then
                sHour := 0;
                sMin := 0;
                sSec := 0;
                sOn := 0;
                Work := 0;
                cOn := 0;
            end_if
        end_if
         
    END_FUNCTION_BLOCK
    1. Не подтягивает переменную Час, выставленную по умолчанию, соответственно, тоже самое произойдет с записанной в память наработкой.
    2. SetOn, cOn дублируют друг друга. Достаточно как и со временем одной петли переменных.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. Запись переменной из Облака в проект
    от Чили-Рома в разделе Облачный сервис OwenCloud
    Ответов: 2
    Последнее сообщение: 26.11.2018, 08:09
  2. Запись и чтение значения переменной
    от kastor163 в разделе СПК2xx (архив)
    Ответов: 5
    Последнее сообщение: 15.06.2017, 12:20
  3. Запись OPC переменной
    от ALEXSP в разделе Master SCADA 3
    Ответов: 3
    Последнее сообщение: 04.12.2015, 15:32
  4. Запись в переменной из другой FB
    от DmitriiAnyushin в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 22.09.2015, 15:12
  5. Ответов: 4
    Последнее сообщение: 24.04.2009, 09:44

Ваши права

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