Страница 83 из 94 ПерваяПервая ... 3373818283848593 ... ПоследняяПоследняя
Показано с 821 по 830 из 933

Тема: Макросы в онлайн базе OWEN Logic

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

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    А как без стека, нам ведь, по-любому, нужно помнить старые значения?
    Так в сумматоре запоминается сумма значений стека, например 128 значений, как у товарища, каждый последующий такт к этой сумме прибавляется самое новое значение и отнимается самое старое в смысле достаточно выхода от самого последнего разряда стека и сам алгоритм существенно упростится, в разы. Да сам стек в принципе сохранится, но в гораздо упрощённом виде.
    И, сделать такое проще!
    И сам стек можно упростить, типа так: Матрица памяти, реверсивный энергонезависимый стек..owle
    Последний раз редактировалось Сергей0308; 03.06.2024 в 19:52.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  2. #822

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Вы же пишите значения в стек с определённым периодом, например равным двум циклам программы, я могу и каждый цикл программы писать значения, короче это и будет периодом обновления!
    В одной из тем "капзап" предлагал упрощённый алгоритм вычисления среднего значения скользящим окном, в смысле когда стек полностью заполнен, при каждом последующем такте записи в стек у нас к сумме стека прибавляется самое новое значение и отнимается самое старое, поэтому алгоритм можно упростить в разы, надеюсь понятно написал?

    Получается, что стек и не нужен, в смысле, достаточно сумматора и ширину окна можно сделать практически любую без усложнения алгоритма!
    Чё вы привязались к этим циклам программы? нет у меня привязки ко времени, у меня каждый новый такт, может меняться, первый такт=0,5 сек., второй=1,5, третий=0,3сек., и.т.д., какие циклы прогамм, нафиг они мне нужны, ну да в макросе из базы данных, там идет непрерывный поток данных от датчика температуры и это оправданно, в моем случае это вообще не нужно ибо мне нужно усреднить частоту следования импульсов, которые идут как бог на душу положит...
    И да, что бы два раза не вставать, говорю все уже сделано и все уже работает, просто хотел немного оптимизировать не более того...

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

    По умолчанию

    Цитата Сообщение от Traveller Посмотреть сообщение
    Чё вы привязались к этим циклам программы? нет у меня привязки ко времени, у меня каждый новый такт, может меняться, первый такт=0,5 сек., второй=1,5, третий=0,3сек., и.т.д., какие циклы прогамм, нафиг они мне нужны, ну да в макросе из базы данных, там идет непрерывный поток данных от датчика температуры и это оправданно, в моем случае это вообще не нужно ибо мне нужно усреднить частоту следования импульсов, которые идут как бог на душу положит...
    И да, что бы два раза не вставать, говорю все уже сделано и все уже работает, просто хотел немного оптимизировать не более того...
    И упрощайте, Вам даже подсказали как это можно сделать, в смысле, самому даже думать не надо! В вашем случае это упрощение(оптимизация) может составить до двух порядков, в смысле по количеству используемых элементов!
    Хорошо, чтобы на два порядка упростить это стараться надо, на порядок в лёгкую упростится, в смысле, по количеству используемых элементов или Вы уже передумали?
    Как говорят, лучше поздно, чем никогда!

    Я имею ввиду ваш алгоритм вычисления среднего скользящим окном со стеком глубиной(разрядностью) 128, а период следования тактовых сигналов здесь ни при чём, это я пример привёл, Вы что ещё и плохо видите, в смысле, я же написал!

    Когда-то делал вычислитель, по простому теплосчётчик, для счётчика объёма с импульсным выходом, там тоже неизвестно когда следующий импульс придёт, в смысле, период произвольный, в это время температура может меняться и приходится высчитывать среднюю температуру за период между импульсами, короче, я каждый цикл программы значения суммировал и делил на количество измерений, это чтобы по максимуму было!

    Короче, чтобы тяп-ляп сделать и ума не надо, Вы попробуйте на порядок точней(я пример привёл с теплосчётчиком) и на порядок проще сделать(тоже варианты упрощения обозначил), в итоге в 100 раз лучше получится, чем такое не устраивает?
    Последний раз редактировалось Сергей0308; 03.06.2024 в 20:46.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  4. #824

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    И упрощайте, Вам даже подсказали как это можно сделать, в смысле, самому даже думать не надо! В вашем случае это упрощение(оптимизация) может составить до двух порядков, в смысле по количеству используемых элементов!
    Хорошо, чтобы на два порядка упростить это стараться надо, на порядок в лёгкую упростится, в смысле, по количеству используемых элементов или Вы уже передумали?
    Как говорят, лучше поздно, чем никогда!

    Я имею ввиду ваш алгоритм вычисления среднего скользящим окном со стеком глубиной(разрядностью) 128, а период следования тактовых сигналов здесь ни при чём, это я пример привёл, Вы что ещё и плохо видите, в смысле, я же написал!

    Когда-то делал вычислитель, по простому теплосчётчик, для счётчика объёма с импульсным выходом, там тоже неизвестно когда следующий импульс придёт, в смысле, период произвольный, в это время температура может меняться и приходится высчитывать среднюю температуру за период между импульсами, короче, я каждый цикл программы значения суммировал и делил на количество измерений, это чтобы по максимуму было!

    Короче, чтобы тяп-ляп сделать и ума не надо, Вы попробуйте на порядок точней(я пример привёл с теплосчётчиком) и на порядок проще сделать(тоже варианты упрощения обозначил), в итоге в 100 раз лучше получится, чем такое не устраивает?
    Я не нашел как это можно делать именно в этом макросе ибо там есть счетчик с автосбросом, который все обнуляет и другой макрос который тупо складывает все значения, но опции что самое старое значение вычитается, а новое прибавляется, этого там нет, во всяком случае я не нашел, думать как это сделать мне лень, вы же тоже ничего кроме общих фраз не излагаете, а писать что вы тут во всем разбираетесь, без верификации своего интеллекта, эдак и я так могу...

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

    По умолчанию

    Цитата Сообщение от Traveller Посмотреть сообщение
    Я не нашел как это можно делать именно в этом макросе ибо там есть счетчик с автосбросом, который все обнуляет и другой макрос который тупо складывает все значения, но опции что самое старое значение вычитается, а новое прибавляется, этого там нет, во всяком случае я не нашел, думать как это сделать мне лень, вы же тоже ничего кроме общих фраз не излагаете, а писать что вы тут во всем разбираетесь, без верификации своего интеллекта, эдак и я так могу...
    Не знаю чего Вы искали, вроде всё понятно разложил, короче, это дело пяти минут сделать, чего там искать, вот мой пример, приблизительно как-то так:

    Среднее скользящим окном.png

    Среднее скользящим окном_17.owle

    И, для увеличения ширины окна достаточно стек расширить до нужной глубины(разрядности).
    Последний раз редактировалось Сергей0308; 04.06.2024 в 10:53.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  6. #826

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Не знаю чего Вы искали, вроде всё понятно разложил, короче, это дело пяти минут сделать, чего там искать, вот мой пример, приблизительно как-то так:

    Среднее скользящим окном.png

    Среднее скользящим окном_17.owle

    И, для увеличения ширины окна достаточно стек расширить до нужной глубины(разрядности).
    Ну вот это уже предметный разговор, тока это ни фига не проще того что я нарисовал, а может даже и сложнее, все эти упаковки, распаковки и то что между, ну в общем зачет, но мне такого не нать...
    Уж простите, это не оптимизация, это просто другой путь, на мой взгляд несколько более тернистый...

    Ща пока не до этого, но у меня есть мысли как это дело действительно оптимизировать, т.е. свести к миниму кол-во дискретных элементов, как взгрустнеца может чё и придумаю, но не обещаю...
    Ежели что сделаю, то выложу...
    Последний раз редактировалось Traveller; 04.06.2024 в 12:19.

  7. #827

    По умолчанию

    Цитата Сообщение от Traveller Посмотреть сообщение
    Ну вот это уже предметный разговор, тока это ни фига не проще того что я нарисовал, а может даже и сложнее, все эти упаковки, распаковки и то что между, ну в общем зачет, но мне такого не нать...
    Уж простите, это не оптимизация, это просто другой путь, на мой взгляд несколько более тернистый...

    Ща пока не до этого, но у меня есть мысли как это дело действительно оптимизировать, т.е. свести к миниму кол-во дискретных элементов, как взгрустнеца может чё и придумаю, но не обещаю...
    Ежели что сделаю, то выложу...
    Вариант на ST на базе оскатовского блока фильтра (за 100% работоспособность не ручаюсь, напильник в комплекте):
    Код:
    FUNCTION_BLOCK FILTER_MAV_I
    VAR_INPUT
        X : UDINT;    (* Данные *)
        N : UDINT := 32;    (* Глубина *)
        C : BOOL := TRUE; (* Импульс для обновления данных *)
        RST : BOOL;
    END_VAR
    VAR_OUTPUT
        Y : UDINT;
    END_VAR
    VAR
        init: BOOL;
        buffer : ARRAY[1..32] OF UDINT;
        i: UDINT;
        sum : UDINT;
    
        tmp : UDINT;
    END_VAR
    
    (*
    version 1.5
    edit 1exan
    
    version 1.4    26. MAR. 2011
    programmer     hugo
    tested by        oscat
    
    FILTER_MAV_W is a moving average filter with programmable length N for WORD Data.
     *)
    
    (* limit N to size of buffer *)
    IF N > 32 THEN N := 32; END_IF;
    
    (* startup initialisation *)
    IF NOT init OR rst OR N = 0 OR tmp <> N THEN
        init := TRUE;
        tmp := N;
        FOR i := 1 TO tmp DO
            buffer[i] := X;
        END_FOR;
        Y := X;
        sum := Y * N;
    
    ELSE
        IF C THEN
            tmp := N;
        
            IF i >= tmp THEN i := 1;
            ELSE i := i + 1; END_IF;
    
            sum := sum + X - buffer[i];
    
            buffer[i] := X;
        END_IF;
        Y := sum / N;
    END_IF;
    
    end_function_block

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

    По умолчанию

    Цитата Сообщение от Traveller Посмотреть сообщение
    Ну вот это уже предметный разговор, тока это ни фига не проще того что я нарисовал, а может даже и сложнее, все эти упаковки, распаковки и то что между, ну в общем зачет, но мне такого не нать...
    Уж простите, это не оптимизация, это просто другой путь, на мой взгляд несколько более тернистый...

    Ща пока не до этого, но у меня есть мысли как это дело действительно оптимизировать, т.е. свести к миниму кол-во дискретных элементов, как взгрустнеца может чё и придумаю, но не обещаю...
    Ежели что сделаю, то выложу...
    Допустим стек можете свой оставить, к тому же упростить, в смысле, достаточно будет выхода от крайнего разряда стека.
    Мой стек реверсивный, если Вы своему реверс приделаете - он получится куда сложнее моего. Короче, в данном случае реверс не нужен, стек оставьте свой, это я насчёт общего понимания простоты! С моим стеком для реализации вашего метода вычисления не надо и выходы делать от всех используемых разрядов стека, в смысле, можно по очереди выводить на один выход и суммировать. К тому же мой макрос можно использовать и как матрицу памяти на 32 ячейки памяти(0-31), в смысле, при смене адреса разряда(регистра) для записи, по преведущему адресу в ячейке сохранится значение на входе "IN" в момент смены адреса.
    И, чуть не забыл, энергонезависимость у моего стека для данного случая нужно убрать, она только вредна в этом конкретном случае, для этого достаточно у соответствующей переменной подмакроса убрать энергонезависимость.
    Последний раз редактировалось Сергей0308; 04.06.2024 в 13:43.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  9. #829

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Допустим стек можете свой оставить, к тому же упростить, в смысле, достаточно будет выхода от крайнего разряда стека.
    Мой стек реверсивный, если Вы своему реверс приделаете - он получится куда сложнее моего. Короче, в данном случае реверс не нужен, стек оставьте свой, это я насчёт общего понимания простоты! С моим стеком для реализации вашего метода вычисления не надо и выходы делать от всех используемых разрядов стека, в смысле, можно по очереди выводить на один выход и суммировать. К тому же мой макрос можно использовать и как матрицу памяти на 32 ячейки памяти(0-31), в смысле, при смене адреса разряда(регистра) для записи, по преведущему адресу в ячейке сохранится значение на входе "IN" в момент смены адреса.
    Это уже вода, мне не важно как это работает, мне важно что бы это работало, в принципе и мой работает исправно...

  10. #830

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Вариант на ST на базе оскатовского блока фильтра (за 100% работоспособность не ручаюсь, напильник в комплекте):
    Спасибо конечно, но я еще не так сильно образован в языках программирования, что бы допиливать это, мне нужно более вдумчиво подойти к этой проблеме, но т.к. проблема пока не проблема или не такая уж сильная проблема, то мы это пока пропустим, хотя признаю, что это было бы более красивое и правильное решение, чем наши все вместе взятые, Снимаю шляпу!

Страница 83 из 94 ПерваяПервая ... 3373818283848593 ... ПоследняяПоследняя

Похожие темы

  1. Универсальные макросы для OWEN Logic
    от rovki в разделе Среда программирования OWEN Logic
    Ответов: 920
    Последнее сообщение: 01.12.2025, 11:45
  2. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Среда программирования OWEN Logic
    Ответов: 404
    Последнее сообщение: 25.08.2020, 15:17
  3. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Программируемые реле
    Ответов: 401
    Последнее сообщение: 28.07.2016, 19:46
  4. ПО OWEN Logic !!!
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 3
    Последнее сообщение: 11.10.2011, 15:33
  5. OWEN Logic 1.2.0.14b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 40
    Последнее сообщение: 21.02.2011, 14:16

Ваши права

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