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

Тема: Макросы в онлайн базе OWEN Logic

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,256

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Функция:

    function Max: udint;
    var_input
    IN1,IN2,IN3,IN4,IN5,IN6,IN7,IN8 : udint;
    end_var

    var
    num : udint := 1;
    end_var

    Max := IN1;
    num := 1;

    if IN2 > Max then Max := IN2; num := 2; end_if;
    if IN3 > Max then Max := IN3; num := 3; end_if;
    if IN4 > Max then Max := IN4; num := 4; end_if;
    if IN5 > Max then Max := IN5; num := 5; end_if;
    if IN6 > Max then Max := IN6; num := 6; end_if;
    if IN7 > Max then Max := IN7; num := 7; end_if;
    if IN8 > Max then Max := IN8; num := 8; end_if;

    Max.28 := num.0;
    Max.29 := num.1;
    Max.30 := num.2;
    Max.31 := num.3;

    end_function
    и как решается проблема двух максимумов?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  2. #2

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    и как решается проблема двух максимумов?
    Это не столько проблема, сколько вопрос необходимой функциональности. Если о наличии более одного максимума нужно сигнализировать, то нужен ещё один выход. Если нужен другой приоритет входов, то нужно сделать соответствующий порядок их обхода.

  3. #3
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    8,342

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Это не столько проблема, сколько вопрос необходимой функциональности. Если о наличии более одного максимума нужно сигнализировать, то нужен ещё один выход. Если нужен другой приоритет входов, то нужно сделать соответствующий порядок их обхода.
    Если Вы говорите, что на ST это просто, сделайте так, что бы при наличии нескольких входов с максимальными значениями их номера выводились одной строкой начиная с самого маленького порядкового номера входа, например, если все входа имеют одинаковое значение, строка будет так выглядеть: "12345678", тем более для восьми значений(одноразрядных) хватает диапазона типа данных(DINT), понятно объяснил?

    Примерно как-то так:

    MAX_3.PNG

    MAX_3_2.PNG

    MAX_3_3.PNG

    MAX_5.owl

    Я к тому, что Вы сами это сказали!

    Могу и в качестве разделителя нолик поставить:

    MAX_3_4.PNG

    MAX_3_5.PNG

    Только тогда меньшее количество входов можно будет записать до переполнения.

    Вот, немного текущий макрос поправил(были небольшие косяки):

    MAX_6.owle
    Последний раз редактировалось Сергей0308; 25.12.2022 в 12:40.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  4. #4

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Если Вы говорите, что на ST это просто, сделайте так, что бы при наличии нескольких входов с максимальными значениями их номера выводились одной строкой начиная с самого маленького порядкового номера входа, например, если все входа имеют одинаковое значение, строка будет так выглядеть: "12345678", тем более для восьми значений(одноразрядных) хватает диапазона типа данных(DINT), понятно объяснил?

    Примерно как-то так:
    ...
    Я к тому, что Вы сами это сказали!

    Могу и в качестве разделителя нолик поставить:
    ...
    Только тогда меньшее количество входов можно будет записать до переполнения.
    Я говорил про конкретную задачу, что её проще на ST сделать
    А код для этой виртуальной задачи такой (в одной функции выводится значение, а в другой - счётчик номера входов):

    Код:
    function Max: udint;
       var_input
            IN1,IN2,IN3,IN4,IN5,IN6,IN7,IN8 : udint; 
       end_var
        
       var
    
            Count : udint := 1;
       end_var
       
       Max := IN1;
       Count := 1;
        
       if IN2 > Max then Max := IN2; Count := 2;
       elsif  IN2 = Max then Count:=Count*10+2; 
       end_if;
       
       if IN3 > Max then Max := IN3; Count := 3;
       elsif  IN3 = Max then Count:=Count*10+3; 
       end_if;
    
       if IN4 > Max then Max := IN4; Count := 4;
       elsif  IN4 = Max then Count:=Count*10+4; 
       end_if;
       
       if IN5 > Max then Max := IN5; Count := 5;
       elsif  IN5 = Max then Count:=Count*10+5; 
       end_if;
    
       if IN6 > Max then Max := IN6; Count := 6;
       elsif  IN6 = Max then Count:=Count*10+6; 
       end_if;
       
       if IN7 > Max then Max := IN7; Count := 7;
       elsif  IN7 = Max then Count:=Count*10+7; 
       end_if;
    
       if IN8 > Max then Max := IN8; Count := 8;
       elsif  IN8 = Max then Count:=Count*10+8; 
       end_if;
       
    
    end_function
    Изображения Изображения

  5. #5
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    8,342

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Я говорил про конкретную задачу, что её проще на ST сделать
    А код для этой виртуальной задачи такой (в одной функции выводится значение, а в другой - счётчик номера входов):

    Код:
    function Max: udint;
       var_input
            IN1,IN2,IN3,IN4,IN5,IN6,IN7,IN8 : udint; 
       end_var
        
       var
    
            Count : udint := 1;
       end_var
       
       Max := IN1;
       Count := 1;
        
       if IN2 > Max then Max := IN2; Count := 2;
       elsif  IN2 = Max then Count:=Count*10+2; 
       end_if;
       
       if IN3 > Max then Max := IN3; Count := 3;
       elsif  IN3 = Max then Count:=Count*10+3; 
       end_if;
    
       if IN4 > Max then Max := IN4; Count := 4;
       elsif  IN4 = Max then Count:=Count*10+4; 
       end_if;
       
       if IN5 > Max then Max := IN5; Count := 5;
       elsif  IN5 = Max then Count:=Count*10+5; 
       end_if;
    
       if IN6 > Max then Max := IN6; Count := 6;
       elsif  IN6 = Max then Count:=Count*10+6; 
       end_if;
       
       if IN7 > Max then Max := IN7; Count := 7;
       elsif  IN7 = Max then Count:=Count*10+7; 
       end_if;
    
       if IN8 > Max then Max := IN8; Count := 8;
       elsif  IN8 = Max then Count:=Count*10+8; 
       end_if;
       
    
    end_function
    Вот смотрю эту картинку:

    MAX_4.PNG

    Мне всё понятно!

    А смотрю вашу писанину, мне вообще ничего не понятно, зачем Вы пишите, то что пишите, в смысле, что это проще? Это же не соответствует действительности!
    Я всё прекрасно понимаю, что Вы выражаете своё мнение или для Вас проще, тогда это нужно уточнять! Боюсь со мной многие согласятся!

    Вот мой вариант с разделителем между номерами входов в виде нолика и не переусердствуете с количеством максимумов, чтобы переменная(тип данных) не переполнялась.
    MAX_4.owl
    И, вашу нижнюю(на картинке) функцию(с номерами максимумов) не нашёл, Вы, наверно забыли выложить.
    Последний раз редактировалось Сергей0308; 27.08.2022 в 00:17.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  6. #6

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Вот смотрю эту картинку:
    ...
    Мне всё понятно!

    А смотрю вашу писанину, мне вообще ничего не понятно, зачем Вы пишите, то что пишите, в смысле, что это проще? Это же не соответствует действительности!
    Я всё прекрасно понимаю, что Вы выражаете своё мнение или для Вас проще, тогда это нужно уточнять! Боюсь со мной многие согласятся!

    Вот мой вариант с разделителем между номерами входов в виде нолика и не переусердствуете с количеством максимумов, чтобы переменная(тип данных) не переполнялась.
    MAX_4.owl
    И, вашу нижнюю(на картинке) функцию(с номерами максимумов) не нашёл, Вы, наверно забыли выложить.
    Боюсь про понятность ФБД в таких типах задач вы сильно преувеличиваете, но это моё мнение, и я не боюсь, что многие со мной согласятся.
    Сколько программных циклов занимает просмотр входных значений и передача результата на выход? Кстати в качестве генератора можно попробовать использовать элемент НЕ с обратной связью.

    Функция с номерами входов имеет тот-же код, с перестановкой местами Max и Count в заголовке. Жаль конечно, что ST в OL не поддерживает передачу параметров по ссылке (IN_OUT).

  7. #7
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    8,342

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Боюсь про понятность ФБД в таких типах задач вы сильно преувеличиваете, но это моё мнение, и я не боюсь, что многие со мной согласятся.
    Сколько программных циклов занимает просмотр входных значений и передача результата на выход? Кстати в качестве генератора можно попробовать использовать элемент НЕ с обратной связью.

    Функция с номерами входов имеет тот-же код, с перестановкой местами Max и Count в заголовке. Жаль конечно, что ST в OL не поддерживает передачу параметров по ссылке (IN_OUT).
    Вы, что действительно не понимаете в чём разница? Я же написал "мне"! Если бы я этого не обозначил, боюсь моё утверждение стало бы неправдивым, как и ваше! Вы в принципе понимаете смысл Вами написанного? Даже если найдётся всего один человек во Вселенной, знакомый с ОЛ, но не знакомый с ST, то ваше утверждение будет неправдивым! Считайте меня этим человеком, этого достаточно!
    Последний раз редактировалось Сергей0308; 27.08.2022 в 13:28.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

Похожие темы

  1. Универсальные макросы для OWEN Logic
    от rovki в разделе Среда программирования OWEN Logic
    Ответов: 827
    Последнее сообщение: 22.12.2023, 13:20
  2. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Среда программирования OWEN Logic
    Ответов: 404
    Последнее сообщение: 25.08.2020, 15:17
  3. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Программируемые реле
    Ответов: 401
    Последнее сообщение: 28.07.2016, 19:46
  4. ПО OWEN Logic !!!
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 3
    Последнее сообщение: 11.10.2011, 16:33
  5. OWEN Logic 1.2.0.14b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 40
    Последнее сообщение: 21.02.2011, 14:16

Ваши права

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