А как надо(в идеале), чтобы на соответствующем выходе по очереди появлялись номера входов с наибольшими значениями, если их более одного?
Вид для печати
А как надо(в идеале), чтобы на соответствующем выходе по очереди появлялись номера входов с наибольшими значениями, если их более одного?
Сложновато, можно так вырезать метку(4 старших бита):
Вложение 62243
Если Вы говорите, что на ST это просто, сделайте так, что бы при наличии нескольких входов с максимальными значениями их номера выводились одной строкой начиная с самого маленького порядкового номера входа, например, если все входа имеют одинаковое значение, строка будет так выглядеть: "12345678", тем более для восьми значений(одноразрядных) хватает диапазона типа данных(DINT), понятно объяснил?
Примерно как-то так:
Вложение 62279
Вложение 62280
Вложение 62281
Вложение 62306
Я к тому, что Вы сами это сказали!
Могу и в качестве разделителя нолик поставить:
Вложение 62282
Вложение 62283
Только тогда меньшее количество входов можно будет записать до переполнения.
Вот, немного текущий макрос поправил(были небольшие косяки):
Вложение 64805
Замечаний и предложений не так много, но работы хватит:
1. Перегруппировать макросы, примеры:
CLOCK_WEEK расположен в Дата и время, а его аналог ClockWeek_ - в Доп. функциях
CycleTime - в разделе Общие, а его аналог TIME CYCLE - Таймеры и счетчики
Так же, например B_SEL я бы перенес из раздела Общие в Дискретные преобразователи
2. Используемый макрос SEL_FLOAT заменить на штатную функцию fSel, а сам макрос можно и убрать из базы
3. В макросах, которые светятся желтым заменить связи на линию задержки
4. Ну и, я бы все макросы температурных датчиков вынес в отдельную группу
Денисов Максим Сергеевич у вас там есть макрос, который с битами работает с 1-ого бита вместо 0-ого. Со слов Ревака Юрия макрос делался для ТРМ1032(33) или около. Вот зачем подобные макросы без проверки попадают в Logic ? я понимаю, что какие-то полезны, но они ведь должны удовлетворять логике работы непосредственно для ОЛ, а не пиленные под какие-то там ТРМы...
Я говорил про конкретную задачу, что её проще на 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
Вот смотрю эту картинку:
Вложение 62299
Мне всё понятно!
А смотрю вашу писанину, мне вообще ничего не понятно, зачем Вы пишите, то что пишите, в смысле, что это проще? Это же не соответствует действительности!
Я всё прекрасно понимаю, что Вы выражаете своё мнение или для Вас проще, тогда это нужно уточнять! Боюсь со мной многие согласятся!
Вот мой вариант с разделителем между номерами входов в виде нолика и не переусердствуете с количеством максимумов, чтобы переменная(тип данных) не переполнялась.
Вложение 62300
И, вашу нижнюю(на картинке) функцию(с номерами максимумов) не нашёл, Вы, наверно забыли выложить.