#2
Сообщение
ecoins » 03.03.2024{, 06:29}
Посмотрел проект.
У Вас все блоки выполняются в каждом цикле.
В них есть обработка и строковых переменных, и операций с плавающей запятой - каждая из них занимает немалые временные ресурсы.
При росте количества таких операций немалые временные задержки превращаются в значительные.
Плата №3 с фильтрами.
Фильтр тяжелый - когда он работает, выполняются "тяжелые" вычисления в цикле на 20 элементах массива.
По задумке фильтр видимо должен выполняться 1 раз в 20мс. Так было бы, если после генератора стоял бы блок выделения фронта RTrig.
Без него 20 мс фильтр не работает, а 20 мс работает в каждом цикле . Так я увидел, возможно что-то и не так, что-то не разглядел.
На плате у Вас два таких фильтра и они работают от двух независимых генераторов. Вероятно они работают со сдвигом по фазе относительно 20 мс - следствием этого выполнение таких вычислений вероятнее всего происходит в каждом цикле.
Простые решения по этой плате:
1. После генераторов поставить блоки RTrig.
2. С платы генераторы убрать и саму плату вызывать по условию от внешнего генератора 20 мс + RTrig. В этом случае плата будет выполняться строго 1 раз в 20мс.
-------------------------
Традиционным источником задержки является и штатный блок LCD.
В Вашем случае у Вас много блоков и соответственно много временных "тормозов".
-------------------------
В целом проект достаточно хорошо структурирован, распределен по платам и его оптимизация по времени может быть выполнен достаточно просто.
Способ 1.
Добавить плату - лучше если она будет первой. На этой плате установить генераторы событий - это штатный генератор + блок RTrig. Платы ниже вызывать по условиям события от этих генераторов. Это уже резко повысит быстродействие.
Способ 2.
Чтобы не "городить " много генераторов и с не создавать много переменных под условия для каждой платы можно применить диспетчер задач ecoins(можно и другие, но мне такие пока неизвестны), который по сути делает то, что описано в способе 1.
---------------------------
Неплохо поможет и использование блоков вывода на дисплей от ecoins. У него есть особенности применения и переходить на него можно только после оптимизации проекта по времени.
Блоки очень шустро работают, на этапе отладки мы с диспетчера на дисплей выводим параметр быстродействия проекта - обычно это последние три колонки 1-строки.
Последовательно подключая последовательные платы проекта Вы имеете инструмент для объективного контроля за "торможением" каждой их плат и соответственно можно что-то улучшить на это плате или вызывать её реже.
-----------------------
В блоках ecoins есть достаточно эффективные и очень быстрые и эффективные фильтры. Они значительно могут ускорить работу платы 3.
----------------------
После оптимизации Ваш проект может достичь быстродействия в пределах 10-50 тысяч циклов loop() в секунду.
--------------------
С уважением, ecoins.