Показано с 1 по 10 из 155

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Вот еще попробовал создать функцию 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.

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

    По умолчанию

    Цитата Сообщение от 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/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #3

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Это делается так
    Код:
    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
    Вариант:
    Код:
    ...
    
    
    BYTE_OF_BIT. 0 := B0 ; BYTE_OF_BIT. 1 := B1 ; BYTE_OF_BIT. 2 := B2 ; BYTE_OF_BIT. 3 := B3 ; BYTE_OF_BIT. 4 := B4 ; BYTE_OF_BIT. 5 := B5 ; BYTE_OF_BIT. 6 := B6 ; BYTE_OF_BIT. 7 := B7 ;
    end_function
    Последний раз редактировалось 1exan; 30.03.2023 в 16:33. Причина: ошибся в названии функции

Похожие темы

  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

Ваши права

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