Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: Функция поиска слагаемых под нужную сумму

  1. #1
    Пользователь
    Регистрация
    08.12.2012
    Адрес
    Тамбов
    Сообщений
    18

    По умолчанию Функция поиска слагаемых под нужную сумму

    Подскажите пожалуйста как загнать в ПЛК150 макрос подбора суммы по слагаемым ?

    Option Explicit

    Function LongSumEl(arr(), sm As Long, Optional ds As Long = 0)
    'Функция поиска слагаемых под нужную сумму используя динамическое программирование
    'Автор MCH (Михаил Ч.) - июнь 2013

    'сумма ищется по целочисленным слагаемым
    'в основу взят алгоритм описанный здесь
    'http://forum.sources.ru/index.php?showtopic=204375
    'Если сумма существует, то она будет найдена

    'на входе:
    'arr() - одномерный массив с исходными данными
    'sm - искомая сумма
    'ds - погрешность поиска

    'на выходе одномерный массив с результатом, либо значение достигнутой точности

    Dim out&(), i&, j&, k&, n&, l&, sm1&

    n = sm + ds '
    sm1 = sm - ds

    If n > 80000000 Or n < 0 Then Exit Function
    ReDim a&(n)

    For i = 1 To n: a(i) = -1: Next i
    For i = 1 To UBound(arr)
    For j = n - arr(i) To 0 Step -1
    If a(j) >= 0 Then
    k = j + arr(i)
    If a(k) = -1 Then a(k) = j
    If k >= sm1 Then
    Do
    l = l + 1
    ReDim Preserve out&(1 To l)
    out(l) = k - a(k)
    k = a(k)
    Loop While k
    LongSumEl = out
    Exit Function
    End If
    End If
    Next j, i
    For i = sm To 1 Step -1
    If a(i) >= 0 Then Exit For
    Next i
    LongSumEl = sm - i
    End Function

    И вообще это реально или нет ?

  2. #2

    По умолчанию

    Оформи свои дела в виде функционального блока (FB), программу пиши на ST.

  3. #3
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    .. и беги, лола, беги от своры злых сторожевых собак )))

  4. #4
    Пользователь
    Регистрация
    08.12.2012
    Адрес
    Тамбов
    Сообщений
    18

    По умолчанию

    В ST к сожалению не силён......
    Думаю сделать передачу массива из 20 элементов в Скаду. Там можно в скрипте всё общитать и вернуть результат в контроллер. Но что то очень громоздко с компьютером получается. Подскажите в какую сторону думать !!!

  5. #5
    Пользователь
    Регистрация
    08.12.2012
    Адрес
    Тамбов
    Сообщений
    18

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    .. и беги, лола, беги от своры злых сторожевых собак )))
    А причём тут вачдог ? Вроде бы обычная математика.....контроллер должен успеть обработать.

  6. #6
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    Цитата Сообщение от xaron Посмотреть сообщение
    ....контроллер должен успеть обработать.
    ..(..sm:=79999998,ds:=1..);
    Ключевые слова должен успеть


    PS
    Но как перевозчика в вечность - видимо это не беспокоит..

  7. #7
    Пользователь
    Регистрация
    08.12.2012
    Адрес
    Тамбов
    Сообщений
    18

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    ..(..sm:=79999998,ds:=1..);
    Ключевые слова должен успеть


    PS
    Но как перевозчика в вечность - видимо это не беспокоит..
    У Вас есть какое то рациональное предложение ?

  8. #8

    По умолчанию

    Цитата Сообщение от xaron Посмотреть сообщение
    У Вас есть какое то рациональное предложение ?
    ПЛК - это не ПК. В программах для ПЛК длинные циклы не приветствуются. Зачем вообще решать эту задачу на ПЛК ?
    Последний раз редактировалось Вольд; 16.02.2015 в 11:39.

  9. #9
    Пользователь
    Регистрация
    08.12.2012
    Адрес
    Тамбов
    Сообщений
    18

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    ПЛК - это не ПК. В программах для ПЛК длинные циклы не приветствуются. Зачем вообще решать эту задачу на ПЛК ?
    Потому что на ПЛК сделан весовой сортировщик. Теперь хочется подбор до нужного веса реализовать (с закольцованным конвейером).
    Придётся на ПК прокладку из скады городить (((( Красоты в этом не усматриваю.

  10. #10
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    А Вы можете сами оценить для вызова функции кол-во выполняемых строк (с учетом циклов) для диапазона Ваших задач ?

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. 05 функция modbus
    от desperadoes в разделе ПЛК1хх
    Ответов: 15
    Последнее сообщение: 12.02.2014, 12:32
  2. Как сосчитать сумму средних значений?
    от mib_z в разделе Master SCADA 3
    Ответов: 22
    Последнее сообщение: 25.03.2013, 17:52

Ваши права

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