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