Страница 61 из 64 ПерваяПервая ... 11515960616263 ... ПоследняяПоследняя
Показано с 601 по 610 из 634

Тема: Создать функцию на ST

  1. #601

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Вот здесь разруливали, правда не на ST, в смысле, тогда и ST наверно ещё не было, короче, Вам шашечки или ехать:
    https://owen.ru/forum/showthread.php...l=1#post432040

    Вложение 84503

    Настройка минимального периода(как обычно) в свойствах макроса.

    И, можно очень легко(практически без усложнения алгоритма) расширить до 32 входов-выходов, в смысле, устройств, которые надо разруливать!
    Я кстати его нашел, запустил в последнем лоджике, а он почему-то не завелся. Ушел на ст. Ребята из телеги быстренько написали мне код.
    При чем когда я его сохранял я точно помню, что его отщелкал и меня все устроило. Я как раз тогда и просил помощи с этим макросом

  2. #602
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,531

    По умолчанию

    Цитата Сообщение от bayk Посмотреть сообщение
    Я кстати его нашел, запустил в последнем лоджике, а он почему-то не завелся. Ушел на ст. Ребята из телеги быстренько написали мне код.
    При чем когда я его сохранял я точно помню, что его отщелкал и меня все устроило. Я как раз тогда и просил помощи с этим макросом
    Я же ссылку дал, в смысле, ничего искать не надо!
    В моём проекте всё будет работать с приоритетом у входов-выходов с меньшим числовым значением, если хотите обратный приоритет(у входов-выходов с большим числовым значением) - сделайте настройки двух макросов(субмакросов), входящих в состав макроса в обратном порядке!
    Короче, такое впечатление, что Вы либо не читаете что я пишу, либо не понимаете смысла написанного, даже не знаю что хуже!
    Ещё раз повторю, мне не сложно: с состав макроса входят два других макроса(субмакроса), если Вы хотите чтобы в вашем проекте макрос работал также как в моём, надо и настройки субмакросов перенести(скопировать), много раз в разных темах об этом писал, даже представить не могу, что здесь может быть непонятным?!
    https://owen.ru/forum/showthread.php...l=1#post421370
    Последний раз редактировалось Сергей0308; 28.06.2025 в 19:10.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  3. #603

    По умолчанию

    Речь не об этом. Я взял проект который вы когда-то присылали и оно работало, а в свежем лоджике не завелось. Я так и не понял почему. Я не переносил макрос в новый проект.

  4. #604

    По умолчанию

    Цитата Сообщение от bayk Посмотреть сообщение
    Речь не об этом. Я взял проект который вы когда-то присылали и оно работало, а в свежем лоджике не завелось. Я так и не понял почему. Я не переносил макрос в новый проект.
    Все последние вопросы, давно собраны в одном месте. Ссылку давно бы сохранили.
    И логарифмы и выбор одного из нескольких нажатий ( Кто раньше встал, того и тапки на ST )
    https://owen.ru/forum/showthread.php...=9&p=429067#81
    Последний раз редактировалось kondor3000; 28.06.2025 в 10:05.

  5. #605
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,531

    По умолчанию

    Цитата Сообщение от bayk Посмотреть сообщение
    Речь не об этом. Я взял проект который вы когда-то присылали и оно работало, а в свежем лоджике не завелось. Я так и не понял почему. Я не переносил макрос в новый проект.
    Если Вы основной макрос открываете на редактирование и проверяете алгоритм в симуляции внутри основного макроса, то он будет работать по другому, в смысле, уставка времени минимального периода там будет своя, в смысле, назначенная в свойствах основного макроса не действует, с этим ничего не поделаешь, так у всех макросов будет!

    В принципе уставка может даже логику работы менять, например: у меня есть макрос двухпозиционного(релейного) регулятора с настройками режима работы(нагреватель или холодильник) в свойствах макроса:
    https://owen.ru/forum/showthread.php...l=1#post424807
    Последний раз редактировалось Сергей0308; 28.06.2025 в 18:43.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  6. #606

    По умолчанию

    Добрый день!
    Если нужны обратные тригонометрические функции и объём в горизонтальном цилиндре - цистерне по высоте жидкости, то прошу ознакомится. Сделано Алисой ИИ.объём цисцерны на боку.owle

  7. #607

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Выкладываю новые функции на ST, версия OWEN Logic2.6.345

    Sin_Cos_Tg_CTg_ArcSin_ArcCos_ArcTg (x)
    Не слишком удачные реализации.
    неудачный пример:
    Код:
           SIN_RAD:=((pow(b,9)/362880 + (((b-(pow(b,3)/6)) +pow(b,5)/120)- pow(b,7)/5040))-pow(b,11)/39916800)*Zn ;

    Более рациональный подход - итерационные вычисления слагаемого на основе предыдущего значения.

    Была нужна только функция sin(x), её и реализовывал. Другие функции - подождут своего часа.

    Смысл алгоритма - сначала инициализация переменных, потом итерационно вычисляется очередное слагаемое на основе предыдущего его значения
    У sin
    слагаемое на предыдущей итерации А(i-1) равно
    A(i-1) := (-1)^(i-1) * x^(2i-1) / (2i-1)!
    а слагаемое на нынешней итерации А(i) равно
    A(i) := (-1)^(i) * x^(2i+1) / (2i+1)!

    Разделю А(i) на А(i-1) и получу множитель для перехода от A(i-1) к A(i)
    A(i) := m * A(i-1)

    m := A(i) / A(i-1)
    = [(-1)^(i) * x^(2i+1) / (2i+1)!] / [(-1)^(i-1) * x^(2i-1) / (2i-1)!]
    = (-1)^1 * x^2 / [(2i+1)*(2i)]
    = -x^2 / [(2i+1)*(2i)]

    Дальше просто реализую на языке программирования
    Попутно, перед вычислениями привожу аргумент периодической функции к меньшему диапазону.
    Чтобы не испытывать судьбу, непредсказуемый цикл REPEAT ограничиваю число итераций количеством 10.
    Число итераций 10 взял из соображений оценки 10-го слагаемого в сумме - напомню, что в самом начале аргумент приведён к узкому диапазону, что позволяет выполнить оценку погрешности в наихудшем случае. Сейчас уже не вспомню это значение, пересчитывать лень, но тогда решил, что приемлемой точности добьюсь.

    Код:
    function sin: real;
        
        var_input
            x : real;
        end_var
        
        var
            n: udint;
            Pi : real :=   3.1415926535897932384626433832795;
            Pi_2: real := 6.2831853071795864769252867665590;
            a, s, xx: real;
            f: udint;
        end_var
    
    // приведение аргумента к диапазону 0...2*Pi
    if x < 0 then
        n := real_to_udint(abs(x) / Pi_2) + 1;
        x := x + udint_to_real(n) * Pi_2;
    end_if;
    if x > Pi_2 then
        n := real_to_udint(abs(x) / Pi_2);
        x := x - udint_to_real(n) * Pi_2;
    end_if
    
    f := 1;
    a := x;
    s := x;
    xx := x*x;
    repeat
        a := - a * xx / udint_to_real(f+1) / udint_to_real(f+2);
        f := f + 2;
        s := s + a;
        if f > 20 then
            exit;
        end_if;
    until abs(a) < 0.0000001
    end_repeat
    sin := s;
    end_function
    Думаю, что можно улучшить, объявив переменную f типом real, т.к. значения небольшие и потери точности при сложении с 2 не произойдёт.

  8. #608

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Не слишком удачные реализации.
    неудачный пример:
    Код:
           SIN_RAD:=((pow(b,9)/362880 + (((b-(pow(b,3)/6)) +pow(b,5)/120)- pow(b,7)/5040))-pow(b,11)/39916800)*Zn ;

    Более рациональный подход - итерационные вычисления слагаемого на основе предыдущего значения.

    Была нужна только функция sin(x), её и реализовывал. Другие функции - подождут своего часа.
    Думаю, что можно улучшить, объявив переменную f типом real, т.к. значения небольшие и потери точности при сложении с 2 не произойдёт.
    Спасибо конечно, только написали вы не туда. Тут Рогов Алексей выложил проект Объём цисцерны на боку.owle, выше на 1 пост,
    откуда я и взял вычисление ArcTg, ArcSin, ArcCos.
    И на минутку у меня функция Sin считает точно до 7 знака, а ваша врёт на 5 знаке. И накой мне такая функция.
    Последний раз редактировалось kondor3000; 03.02.2026 в 22:01.

  9. #609

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Спасибо конечно, только написали вы не туда. Тут Рогов Алексей выложил проект Объём цисцерны на боку.owle, выше на 1 пост,
    откуда я и взял вычисление ArcTg, ArcSin, ArcCos.
    И на минутку у меня функция Sin считает точно до 7 знака, а ваша врёт на 5 знаке. И накой мне такая функция.
    На каком контрольном значении?
    Я проверю и исправлю.

    Возможно, останов по условию abs(a) < 0.0000001 выполняется после пары итераций, а точность повысится, если добавить ещё - количество итераций ограничить снизу.

    На каком значении аргумента погрешность?

  10. #610

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    На каком контрольном значении?
    Я проверю и исправлю.

    Возможно, останов по условию abs(a) < 0.0000001 выполняется после пары итераций, а точность повысится, если добавить ещё - количество итераций ограничить снизу.

    На каком значении аргумента погрешность?
    Проверял на всех, но конкретно на скрине вход -0,227, 1 Синус.jpg
    моя функция SIN_RAD -0,2250555
    ваша ___________Sin -0,22501531
    на калькуляторе_____ -0,22505550283358259230719813707651
    Последний раз редактировалось kondor3000; 03.02.2026 в 22:26.

Страница 61 из 64 ПерваяПервая ... 11515960616263 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 14
    Последнее сообщение: 01.07.2023, 21:30
  2. Ответов: 6
    Последнее сообщение: 22.12.2021, 10:50
  3. Ответов: 3
    Последнее сообщение: 13.09.2021, 13:31
  4. ПЛК160. Чем заменить функцию записи 0x05?
    от FallenDAY в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 26.08.2017, 13:19
  5. Как написать собственную функцию wait()
    от PavelKazakov в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 23.07.2009, 11:37

Метки этой темы

Ваши права

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