Перейти к содержимому


Фотография

Функция выбора комбинации запуска компрессоров


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 OFFLINE   mihams

mihams

    Гуру CNC

  • Опытный
  • PipPipPipPipPipPipPipPipPipPip
  • 1 344 сообщений
  • Из:Kovrov

Отправлено 06 Июнь 2023 - 12:20

Делаю контроллер для компрессорной на пр103... не могу сообразить как сделать функцию выбора комбинации запуска...

 

есть несколько компрессоров с разной производительностью

какие то могут быть выключены или быть в ошибке

есть расход(вычисляется в режиме реального времени)

 

как проще, если не тупым перебором всех комбинаций, вычислить какие компрессора нужно запустить что бы производительность была близка к расходу в плюс? конечно из тех что в данный момент могут быть запущенны


  • 0

#2 OFFLINE   lkbyysq

lkbyysq

    Гуру CNC

  • Cтарожил
  • PipPipPipPipPipPipPipPipPipPip
  • 9 870 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург
  • Из:Санкт-Петербург

Отправлено 06 Июнь 2023 - 13:03

Не знаю, что там за пр103, но алгоритм в целом прост.
1. Формируем массив исправных компрессоров, сортируем по убыванию мощности.
2. Двигаемся по массиву от большего к меньшему, набирая требуемую суммарную мощность, формируем набор индексов.
3. Включаем созданный набор.

В принципе, решение любой задачи в комбинаторике начинается с сортировки исходных данных по ключевому критерию.

Сообщение отредактировал lkbyysq: 06 Июнь 2023 - 13:08

  • 0

Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).


#3 OFFLINE   yaso73

yaso73

    Кот CNC

  • Cтарожил
  • PipPipPipPipPipPipPipPipPipPip
  • 8 138 сообщений
  • Пол:Мужчина
  • Город:Новосибирск
  • Интересы:Очень люблю жить.Очень не люблю когда мне мешают этим заниматься.
  • Из:Новосибирск

Отправлено 06 Июнь 2023 - 14:24

Не знаю, что там за пр103, но алгоритм в целом прост.
1. Формируем массив исправных компрессоров, сортируем по убыванию мощности.
2. Двигаемся по массиву от большего к меньшему, набирая требуемую суммарную мощность, формируем набор индексов.
3. Включаем созданный набор.

В принципе, решение любой задачи в комбинаторике начинается с сортировки исходных данных по ключевому критерию.

Может от меньшего к большему двигаемся в пункте 2? Тогда,правда,непонятно,как не заездить мелкие. Но в другом случае непонятно,как не заездить большой...


  • 0

Все замечания и нравоучения носят исключительно юмористический характер.Ни коим образом не затрагивают честь и достоинство собеседника облезлого Кота с форточки.

Кто людям помогает - тот тратит время зря.

Хорошими делами прославиться нельзя.


#4 OFFLINE   lkbyysq

lkbyysq

    Гуру CNC

  • Cтарожил
  • PipPipPipPipPipPipPipPipPipPip
  • 9 870 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург
  • Из:Санкт-Петербург

Отправлено 06 Июнь 2023 - 14:55

Более продвинутым и точным вариантом конечно будет формирование массива всех возможных комбинаций исправных компрессоров с сортировкой этого по призводительности.

 

 

Но в другом случае непонятно,как не заездить большой..

Чтобы не заездить, добавляем критерий "усталость".

 

1. Формируем массив исправных компрессоров, сортируем по убыванию мощности.

2. Из них формируем массив "бодрых" компрессоров. 

3. Двигаемся по массиву "бодрых" от большего к меньшему, набирая требуемую суммарную мощность, формируем набор индексов.
4. Включаем созданный набор.
 
Включение в массив "бодрых" по критерию "отдыхает свыше положенного времени".
Исключение из массива "бодрых" по критерию "работает свыше положенного времени".
Пункты 2, 3, 4 выполняем например один раз в пять минут.

Сообщение отредактировал lkbyysq: 06 Июнь 2023 - 15:01

  • 0

Станислав Ерофеев
Beaver 9A (2007), Beaver 9AT2 (2011), KingCut X6 (2005), WoodPecker 1224 (2006), Roland EGX-300 (2004), Roland EGX-20 (2003), ZeldeR 0613TP (2014).


#5 OFFLINE   mihams

mihams

    Гуру CNC

  • Опытный
  • PipPipPipPipPipPipPipPipPipPip
  • 1 344 сообщений
  • Из:Kovrov

Отправлено 06 Июнь 2023 - 18:57

нифига не могу по нормальному сделать... мозгов только на такое хватает... в ручную все комбинации перебирать...

 

     var_input 
        Consumption : UDINT;
        
        Productivity1 : UDINT;  // 1
        Productivity2 : UDINT;  // 2
        Productivity3 : UDINT;  // 4
        Productivity4 : UDINT;  // 8
        Productivity5 : UDINT;  // 16
        
        InWork1 : bool;  // 8500
        InWork2 : bool;  // 7000
        InWork3 : bool;  // 7000
        InWork4 : bool;  // 2500
        InWork5 : bool;  // 1500
    end_var
    
    // компрессор 5
    if Consumption < Productivity5 and InWork5 = true Then  
        SourceSelection := 16
    else
         // компрессор 4
        if Consumption < Productivity4 and InWork4 = true Then  
            SourceSelection := 8
        else    
             // компрессор 5+4
            if Consumption < (Productivity5+Productivity4) and InWork5 and InWork4 = true Then  
                SourceSelection := 24
            else    
                // компрессор 3
                if Consumption < Productivity3 and InWork3 = true Then  
                    SourceSelection := 4
                else    
                    // компрессор 2
                    if Consumption < Productivity2 and InWork2 = true Then  
                        SourceSelection := 2
                    else    
                        
                    End_If                      
                End_If                 
            End_If              
        End_If    
    End_If


  • 0




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных