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

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

Комбинированный просмотр

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

    По умолчанию

    Цитата Сообщение от 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. #2

    По умолчанию

    Цитата Сообщение от 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 дублируют друг друга. Достаточно как и со временем одной петли переменных.

  3. #3

    По умолчанию

    Цитата Сообщение от pahotnyh Посмотреть сообщение
    1. Не подтягивает переменную Час, выставленную по умолчанию, соответственно, тоже самое произойдет с записанной в память наработкой.
    2. SetOn, cOn дублируют друг друга. Достаточно как и со временем одной петли переменных.
    Всё подтягивает, уже проверено) введите переменные на входе и нажмите Set. 1 Работа блока Дименсий.jpg
    Наработку подтягивает автоматом.
    Вложения Вложения
    Последний раз редактировалось kondor3000; 21.04.2025 в 20:05.

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

    По умолчанию

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

    2. SetOn, cOn дублируют друг друга. Достаточно как и со временем одной петли переменных.
    Переменные дублируются. А как еще, если вы их выставляете по команде Set. Можно вообще без всех танцев обойтись, просто на экранчике поменять значения и все

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

    По умолчанию

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

  6. #6

    По умолчанию

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

  7. #7

    По умолчанию

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

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

    По умолчанию

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

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

  9. #9

    По умолчанию

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

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

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

    По умолчанию

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

Страница 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

Ваши права

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