Страница 6 из 13 ПерваяПервая ... 45678 ... ПоследняяПоследняя
Показано с 51 по 60 из 123

Тема: ST функции OWEN Logic

  1. #51
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,276

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    проверить просто, написать одинаковый "тяжелый" код в обеих ветках условия ..
    Сложно как-то.
    Это же, но по бразильской системе.
    Код:
    function jopa: bool;
        var_input
            in : bool;
        end_var
    
        while in do
           ; //максимально тяжелый код
        end_while
        jopa := not in; //инверсия для показать проход функции
    end_function
    
    
    function func: bool;
        var_input
           in : bool;
        end_var
    
        if in then
          func := jopa(true);
        else
          func := jopa(false);
        end_if
    end_function
    func на холст и прилепить вход и выход
    Кто докажет ОБА вызова jop'ы при func(false) ?

  2. #52

    По умолчанию

    Попробовал...
    1.При запуске эмуляции все нормально.
    2.При подаче на вход - бесконечный цикл.
    Что говорит о том, что вроде как выполняется одна функция????
    Но это не точно
    Я заменил "тяжелый код"

    Код:
    // while in do
        //   ; //максимально тяжелый код
       // end_while
       for i := 0 to 1000000 do
           ;
       end_for
    И вот, бесконечный цикл уже на этапе запуска симуляции и она уже не запускается. Это проверка симулятора или как то осуществляется пробег по всем функциям? Хотя лоджик интерпретатор и выполняет код построчно? Не, ну их домыслы, факты на скринах.f1.jpgf11.jpgf111.jpg

  3. #53
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,276

    По умолчанию

    Глубины мысли с for'ом не понял. Продолжаем лепить про исполнение всех веток if ?

  4. #54
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    после прочтения статьи про алгоритмы быстрого умножения написал вариант, проверил, все работает
    Вложения Вложения
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #55

    По умолчанию

    Цитата Сообщение от Денисов Максим Сергеевич Посмотреть сообщение
    Уважаемые коллеги!

    Уже больше года как функции на ST появились в OWEN Logic и многие из вас активно применяют новый функционал в своих проектах, впрочем, как и наши разработчики алгоритмов в различных готовых решениях.
    Мы хотим поделиться с вами некоторыми ST функциями, которые сделают разработку ваших проектов проще и быстрее.
    Нашёл ошибку в функции, Преобразование Даты и Времени в формат UnixTime, в первом посте. Нашёл случайно, работая с преобразованием времени.
    В массиве с 0 по 12, должно быть 13 чисел, а у вас только 12, с января по ноябрь есть , а Декабрь потеряли, нет последнего числа 31. 1 Ошибка в функции .jpg
    Последний раз редактировалось kondor3000; 24.03.2023 в 23:57.

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

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Нашёл ошибку в функции, Преобразование Даты и Времени в формат UnixTime, в первом посте. Нашёл случайно, работая с преобразованием времени.
    В массиве с 0 по 12, должно быть 13 чисел, а у вас только 12, с января по ноябрь есть , а Декабрь потеряли, нет последнего числа 31. 1 Ошибка в функции .jpg
    Массив нужен для нахождения количества дней с начала года до текущего дня. Поэтому в декабре нам нужен только день месяца, к которому мы прибавляем количество дней в предыдущих месяцах

  7. #57

    По умолчанию

    Судя по коду 12 месяц и не нужен, тогда и массив надо сделать с 0 до 11.

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

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Массив нужен для нахождения количества дней с начала года до текущего дня. Поэтому в декабре нам нужен только день месяца, к которому мы прибавляем количество дней в предыдущих месяцах
    Если в массиве задать для месяцев сразу количество дней от начала года до начала месяца (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334), то код можно было упростить - выбросить цикл
    for i:= 0 to (month -1)
    days:= days + DayInMonth[i]
    end_for

    что-то типа этого
    days:= DayInMonth[month] + BOOL_TO_UDINT(month>2 and is_leap);
    Последний раз редактировалось petera; 25.03.2023 в 19:17.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  9. #59

    По умолчанию

    Вот еще попробовал создать функцию fBOOL_INT на ST - аналог макроса BOOL_INT
    Можно конечно еще причесать через FOR...
    Код:
    function fBOOL_INT: udint; //имя функции и тип данных выхода
        var_input //объявление входных переменных
            IN01 : bool; //входная переменная с типом данных bool
            IN02 : bool; //входная переменная с типом данных bool
            IN03 : bool; //входная переменная с типом данных bool
            IN04 : bool; //входная переменная с типом данных bool
            IN05 : bool; //входная переменная с типом данных bool
            IN06 : bool; //входная переменная с типом данных bool
            IN07 : bool; //входная переменная с типом данных bool
            IN08 : bool; //входная переменная с типом данных bool
        end_var
        
        var //объявление локальных переменных
            sel1 : udint; //локальная переменная с типом данных udint
            sel2 : udint; //локальная переменная с типом данных udint
            sel3 : udint; //локальная переменная с типом данных udint
            sel4 : udint; //локальная переменная с типом данных udint
            sel5 : udint; //локальная переменная с типом данных udint
            sel6 : udint; //локальная переменная с типом данных udint
            sel7 : udint; //локальная переменная с типом данных udint
            sel8 : udint; //локальная переменная с типом данных udint
        end_var
        
        if IN01 then sel1 :=1; else sel1 :=0; end_if
        
        if IN02 then sel2 :=2; else sel2 :=0; end_if
        
        if IN03 then sel3 :=4; else sel3 :=0; end_if
        
        if IN04 then sel4 :=8; else sel4 :=0; end_if
        
        if IN05 then sel5 :=16; else sel5 :=0; end_if
        
        if IN06 then sel6 :=32; else sel6 :=0; end_if
        
        if IN07 then sel7 :=64; else sel7 :=0; end_if
        
        if IN08 then sel8 :=128; else sel8 :=0; end_if
            
        fBOOL_INT := sel1+sel2+sel3+sel4+sel5+sel6+sel7+sel8;
        
    end_function
    Последний раз редактировалось Pvalp; 30.03.2023 в 15:34.

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

    По умолчанию

    Цитата Сообщение от Pvalp Посмотреть сообщение
    Вот еще попробовал создать функцию fBOOL_INT на ST - аналог макроса BOOL_INT
    Можно конечно еще причесать через FOR...
    Код:
    function fBOOL_INT: udint; //имя функции и тип данных выхода
        var_input //объявление входных переменных
            IN01 : bool; //входная переменная с типом данных bool
            IN02 : bool; //входная переменная с типом данных bool
            IN03 : bool; //входная переменная с типом данных bool
            IN04 : bool; //входная переменная с типом данных bool
            IN05 : bool; //входная переменная с типом данных bool
            IN06 : bool; //входная переменная с типом данных bool
            IN07 : bool; //входная переменная с типом данных bool
            IN08 : bool; //входная переменная с типом данных bool
        end_var
        
        var //объявление локальных переменных
            sel1 : udint; //локальная переменная с типом данных udint
            sel2 : udint; //локальная переменная с типом данных udint
            sel3 : udint; //локальная переменная с типом данных udint
            sel4 : udint; //локальная переменная с типом данных udint
            sel5 : udint; //локальная переменная с типом данных udint
            sel6 : udint; //локальная переменная с типом данных udint
            sel7 : udint; //локальная переменная с типом данных udint
            sel8 : udint; //локальная переменная с типом данных udint
        end_var
        
        if IN01 then sel1 :=1; else sel1 :=0; end_if
        
        if IN02 then sel2 :=2; else sel2 :=0; end_if
        
        if IN03 then sel3 :=4; else sel3 :=0; end_if
        
        if IN04 then sel4 :=8; else sel4 :=0; end_if
        
        if IN05 then sel5 :=16; else sel5 :=0; end_if
        
        if IN06 then sel6 :=32; else sel6 :=0; end_if
        
        if IN07 then sel7 :=64; else sel7 :=0; end_if
        
        if IN08 then sel8 :=128; else sel8 :=0; end_if
            
        fBOOL_INT := sel1+sel2+sel3+sel4+sel5+sel6+sel7+sel8;
        
    end_function
    Это делается так
    Код:
    function BYTE_OF_BIT: udint; //
    //    (c) PeterA для ворума ОВЕН
        var_input //объявление входных переменных
        B0:BOOL;
        B1:BOOL;
        B2:BOOL;
        B3:BOOL;
        B4:BOOL;
        B5:BOOL;
        B6:BOOL;
        B7:BOOL;
        end_var
        
        BYTE_OF_BIT:= SHL(SHL(SHL(SHL(SHL(SHL(SHL(bool_to_udint(B7),1) + bool_to_udint(B6),1) 
                            + bool_to_udint(B5),1) + bool_to_udint(B4),1) + bool_to_udint(B3),1) 
                            + bool_to_udint(B2),1) + bool_to_udint(B1),1) + bool_to_udint(B0);
    end_function
    Последний раз редактировалось petera; 30.03.2023 в 16:00.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Страница 6 из 13 ПерваяПервая ... 45678 ... ПоследняяПоследняя

Похожие темы

  1. Групповые запросы в Owen Logic. Что хотите видеть в этой функции?
    от EvgenyR в разделе Программируемые реле
    Ответов: 37
    Последнее сообщение: 05.07.2023, 15:26
  2. Owen Logic 2.1 нет экспорта устройства в Owen Cloud.
    от Григори в разделе Среда программирования OWEN Logic
    Ответов: 4
    Последнее сообщение: 12.10.2022, 19:33
  3. Добавление аварийных ситуаций в Owen Logic на ПР200 для отображения в Owen Cloud.
    от Григори в разделе Среда программирования OWEN Logic
    Ответов: 6
    Последнее сообщение: 07.07.2022, 11:09
  4. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Программируемые реле
    Ответов: 401
    Последнее сообщение: 28.07.2016, 19:46
  5. Тригонометрические функции OWEN Logic
    от POMAXA в разделе Среда программирования OWEN Logic
    Ответов: 36
    Последнее сообщение: 13.02.2016, 12:11

Ваши права

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