Цитата Сообщение от kondor3000 Посмотреть сообщение
В последней версии ST перестало работать правильно. В версии 2.10.367 правильно 1 367 версия.jpg в версии Owen Logic2.11.368 не правильно 1 Версия 368.jpg
функция Min5 должна выдавать 4, а в последней версии выдаёт 2, четвёртая наработка самая маленькая 212410, у остальных одинаковая 222410
Код:
function Min5: udint; //имя функции и тип данных выхода
   
    var_input //объявление входных переменных       
        I1,I2,I3,I4, I5 : udint; //входная переменная с типом данных udint
    end_var
    
    var //объявление локальных переменных    
    end_var

   if I1<=I2 and I1<=I3 and I1<=I4 and I1<=I5 then
      Min5:=1; 
   elsif I2<=I1 and I2<=I3 and I2<=I4 and I2<=I5  then 
      Min5:=2; 
   elsif I3<=I1 and I3<=I2 and I3<=I4 and I3<=I5  then 
      Min5:=3;  
   elsif I4<=I1 and I4<=I2 and I4<=I3 and I4<=I5  then
      Min5:=4;
   elsif I5<=I1 and I5<=I2 and I5<=I3 and I5<=I4  then
      Min5:=5;
      
   end_if
   
 end_function
Собирал подобное на макросе FBD, только реализовывал, как у
Цитата Сообщение от capzap Посмотреть сообщение
тут алиса утверждает что кот можно доработать предлагает такой
Код:
function Min5: udint;
var_input
    I1, I2, I3, I4, I5: udint;
end_var
var
    min_value: udint;
    min_index: udint := 1;
begin
    min_value := I1;
    
    IF I2 < min_value THEN
        min_value := I2;
        min_index := 2;
    END_IF;
    
    IF I3 < min_value THEN
        min_value := I3;
        min_index := 3;
    END_IF;
    
    IF I4 < min_value THEN
        min_value := I4;
        min_index := 4;
    END_IF;
    
    IF I5 < min_value THEN
        min_value := I5;
        min_index := 5;
    END_IF;
    
    Min5 := min_index;
end_function
вдруг её вариант будет работать во всех версиях
т.е. последовательным сравнением.

Приводить здесь не буду, т.к. исходная задача может пострадать от учёта наработки, т.к. по её условию из-за перегрева насоса требуется чередование через 10 минут.
А если какой-то насос заменят на новый с 0 минут наработки, то он первый и сломается.

Думаю, что тут будет востребован инкремент номера текущего насоса с учётом его готовности. Если не готов, то ещё прибавить 1, и опять проверить. Т.е. последовательно 4 проверки (чтобы на следующем цикле вернуться к следующему после только что остановленного).
С учётом необходимости паузы в работе насоса, каждому насосу в конце 10-минутки присваивать по таймеру признак "не готов", который сбросится через заданную паузу.

Может ещё детали по мере реализации возникнут, но это уже забота новичка, который никого не трогал и вдруг возникла задача.