ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Аватара пользователя
ViktorPetrov
Капитан
Сообщения: 807
Зарегистрирован: 09 апр 2018, 23:56
Имя: Виктор
Благодарил (а): 4 раза
Поблагодарили: 1 раз

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ViktorPetrov »

[ref]Утвш[/ref], В посте 9 ,есть ссылка на тему с примером Из жизни Серёги
ecoins
Полковник
Сообщения: 4002
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 150 раз

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ecoins »

Утвш писал(а): 20 сен 2021, 17:37 Может у кого-то найдется время посмотреть, что можно сделать для увеличения быстродействия. Проверка по рекомендациям поста 2, количество циклов составило всего 40 за 30 сек. Или это все, что можно получить без изучения С++?
Посмотрел.
Рекомендации:
1.Отказаться от стандартных блоков Nextion.
2.Отказаться от работы со строками.
3.Отказаться от стандартных блоков LCD HD44780.
4.Использовать планировщик вызова плат.
-----------
Думаю быстродействие будет на уровне 40-50тыс. циклов loop() в сек.
Аватара пользователя
ViktorPetrov
Капитан
Сообщения: 807
Зарегистрирован: 09 апр 2018, 23:56
Имя: Виктор
Благодарил (а): 4 раза
Поблагодарили: 1 раз

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ViktorPetrov »

ecoins писал(а): 20 сен 2021, 19:43 Посмотрел.
Рекомендации:
1.Отказаться от стандартных блоков Nextion.
2.Отказаться от работы со строками.
3.Отказаться от стандартных блоков LCD HD44780.
4.Использовать планировщик вызова плат.
-----------
Думаю быстродействие будет на уровне 40-50тыс. циклов loop() в сек.
Результат в впечатляющий,но можно и посмотреть в "ширь" отказаться от "железа"(Nextion и LCD) и посылать данные в HMI_KaScada ,это не критика ,это более оптимальный вариант .
Утвш
Сержант
Сообщения: 148
Зарегистрирован: 02 дек 2016, 07:31
Благодарил (а): 2 раза

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Утвш »

ViktorPetrov писал(а): 20 сен 2021, 21:07 отказаться от "железа"(Nextion и LCD)
Конечно это самый оптимальный вариант, но к сожалению это невозможно.
ecoins писал(а): 20 сен 2021, 19:43 2.Отказаться от работы со строками.
Отказался от сложения строк - ничего не дало. Вообще отказаться от строк не могу. Хочу выводить показания на контрольный дисплей.
ecoins писал(а): 20 сен 2021, 19:43 Отказаться от стандартных блоков LCD HD44780.
Там стоят блоки которые выставлял Dryundel. Они не грузят.
ViktorPetrov писал(а): 20 сен 2021, 21:07 Отказаться от стандартных блоков Nextion.
ViktorPetrov писал(а): 20 сен 2021, 21:07 Использовать планировщик вызова плат.
А вот тут меня ждал сюрприз. Установил вместо штатных блоков Nextion блоки от Калинникова Н. и запланировал работу плат поочередно через 400 мск и скорость выросла в 4 раза. Не супер что-то, но мне достаточно. Всем спасибо.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Sancho »

[ref]Утвш[/ref],
Утвш писал(а): 21 сен 2021, 23:13Всем спасибо.
Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
Начнём с анализа.За основу проект из поста 103.[spoiler= Старая плата 2]
2021-09-22_09-51-37.png
[/spoiler]
Сбор данных от датчиков и их передача.
Теги модбас - это переменные, посему выходы с блоков float to int задублированы.
Присвоение этих переменных идёт в каждом цикле, хотя данные от датчиков не обновляются.
Для присвоения данных каждой переменной происходит обработка впередистоящей функции - т.е. чтобы присвоить двум переменным значения float->int выполняется дважды!
На плате 4 - каждый цикл собираем строки.
Немного переделаем.
Добавим генератор 1 на один цикл для опроса, плата 1.[spoiler=плата 1]
2021-09-22_11-33-16.png
[/spoiler]
Уберём встроенные таймеры с блоков получения, подключим к нашему опросу [spoiler=плата2]
2021-09-22_11-35-12.png
[/spoiler]
Уберём триггер, добавив новую переменную для инициализации массива адресов датчиков[spoiler=плата 3]
2021-09-22_13-14-56.png
[/spoiler]
Сделаем опрос датчиков и присвоение значений по нашему сигналу, автоматически убрав таймеры в блоках[spoiler=плата 4]
2021-09-22_11-40-20.png
[/spoiler]
Немного модифицируем плату с потоком
Плату вывода на дисплей разобъём на две - в одной будем после опроса собирать данные, в другой их отображать.[spoiler=платы 6 и 7]
2021-09-22_11-43-15.png
[/spoiler]
Если ещё посмотреть файл от панели некстион, немного переделать - отправлять данные одним пакетом, а там разбирать, получится ещё шустрее.
Просьба сравнить результат с изначальным - явного прироста не будет, но курочка по зёрнышку клюёт
Nextion,NodeMCU,Cloud_01.rar
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Dryundel »

Sancho писал(а): 22 сен 2021, 11:50 Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
Просто отлично!
Предложение принимается.
Всех кто в силах помочь новичкам с тормозами призываю подключаться.
Со своей стороны, буду заносить ссылки на самые интересные моменты в начало темы. Пост #4 "РАЗБОР ПОЛЁТОВ"
Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27 ноя 2017, 13:15
Откуда: Rus44
Имя: Michael
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Alias »

Может еще и платы опроса датчиков и состояния Nextion запускать по условию?
Я в своих проектах на первой плате ставлю генератор с делителем и переменные для вызова плат через свои интервалы. У ecoins это называется диспетчер задач. Очень сильно разгружает процессор, как я полагаю.
Вот как сейчас, например, на 4 плате в каждом цикле опрос температуры, преобразование в инт, контроль изменения. Я бы 1 раз в секунду поставил. Плату 2, кстати, тоже не чаще.
Аватара пользователя
ViktorPetrov
Капитан
Сообщения: 807
Зарегистрирован: 09 апр 2018, 23:56
Имя: Виктор
Благодарил (а): 4 раза
Поблагодарили: 1 раз

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ViktorPetrov »

Да отлично ,что примеры будут собраны в рамках одной темы ,будит так же полезно и при использование наработок от ecoins те же задачи,события т.е код в рамках одной отдельно взятой плате тоже нужно оптимизировать.
Утвш
Сержант
Сообщения: 148
Зарегистрирован: 02 дек 2016, 07:31
Благодарил (а): 2 раза

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Утвш »

Sancho писал(а): 22 сен 2021, 11:50 Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
Если получится, то это было бы просто здорово.
Sancho писал(а): 22 сен 2021, 11:50 Просьба сравнить результат с изначальным
К сожалению, никаких изменений.
Nextion,NodeMCU,Cloud_01.rar
Как уже писал, по рекомендациям поста 105, я заменил штатные блоки Nextion и запланировал работу плат. Получилось вот так:
NodeMCUтестCloud 4.rar
Кстати, для экономии места сложил блок замера количества циклов. Все по рекомендации уважаемого Dryndel (пост 2)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ingener »

Dryundel, возможно ли добавить к набору блоков LCD 2.18 еще и ресет дисплея?
Или скомбинировать его с блоком подсветки?
Просто хочется применить их в проекте, где всегда при старте движения каретки возникает помеха, вызывающая абракадабру на дисплее.
Бороться с помехой бесполезно.
Поэтому придется сначала гасить подсветку, затем старт каретки, потом ресет абракадабры, затем включение подсветки.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Dryundel »

ingener писал(а): 14 окт 2021, 11:52 Dryundel, возможно ли добавить к набору блоков LCD 2.18 еще и ресет дисплея?
Я подумаю.
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ingener »

да вроде разобрался
RESET_LCD_2.18_(Code_-_Basic).ubi
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ingener »

после обновления IDE до версии 1.8.16 блок дисплея не компилируется -
1816.JPG
в версии 1.8.13 компилируется нормально.
русификация отключена.
в чем засада? :smile37:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Phazz
Полковник
Сообщения: 3114
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 231 раз
Поблагодарили: 110 раз

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Phazz »

А сообщение ошибки можно увидеть?
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ingener »

[ref=#808080]Phazz[/ref],
C:\Users\AND\AppData\Local\Temp\flprog\pr18\pr18.ino: In function 'void setup()':
pr18:20:14: error: 'class LiquidCrystal_I2C' has no member named 'init'
_rusLCD1.init();
^
Несколько библиотек найдено для "LiquidCrystal_I2C.h"
Используется: C:\Users\AND\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Не используется: C:\Users\AND\Documents\Arduino\libraries\LiquidCrystal_I2C-1.1.2
exit status 1
'class LiquidCrystal_I2C' has no member named 'init'

PS - забыл уточнить, это все на ESP32
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение aidar_i »

ingener писал(а): 23 ноя 2021, 15:24 C:\Users\AND\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Значит удалите эту библиотеку.
Аватара пользователя
ingener
Лейтенант
Сообщения: 580
Зарегистрирован: 14 окт 2018, 00:26
Имя: Андрей
Благодарил (а): 2 раза
Поблагодарили: 3 раза

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение ingener »

да, так заработало, хотя при компиляции выдало предупреждение, что библиотека для avr и не факт что совместима с esp
Аватара пользователя
Vuktor
Сержант
Сообщения: 238
Зарегистрирован: 11 апр 2021, 14:44
Имя: Vuktor

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Vuktor »

Dryundel писал(а): 15 сен 2021, 11:01 Необходимо так же помнить что при работе с платами, выполняющимися по условию, требуется соблюдать аккуратность. К примеру клемма, имеющая направление ИЗ такой платы может сыграть злую шутку.
А что может случиться? Чего опасаться надо с клеммами из или в платы? Если по условию плата.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Сообщение Dryundel »

Vuktor писал(а): 06 мар 2023, 20:15 А что может случиться? Чего опасаться надо с клеммами из или в платы? Если по условию плата.
Возможно этот момент был исправлен и такой клеммой (выходящей из платы) теперь создается переменная.
Однако на момент написания статьи переменная точно не создавалась.
На вход блока в основном проекте по этой клеме "подавалась" не значение, а вся формула вычислений из платы по условию.
Сейчас уже не помню. Или ошибка была при компиляции или еще какой то трабл.
Короче говоря, я клемами очень редко пользуюсь. А переменные в которых нет необходимости, компилятор все равно вырежет.
Про это я писал здесь viewtopic.php?f=187&t=7921
Ответить

Вернуться в «Обучающие примеры работы в FLProg»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя