ВРЕМЯ ЦИКЛА или что убивает ваш проект.
- ViktorPetrov
- Капитан
- Сообщения: 807
- Зарегистрирован: 09 апр 2018, 23:56
- Имя: Виктор
- Благодарил (а): 4 раза
- Поблагодарили: 1 раз
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
[ref]Утвш[/ref], В посте 9 ,есть ссылка на тему с примером Из жизни Серёги
-
- Полковник
- Сообщения: 4002
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 150 раз
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Посмотрел.Утвш писал(а): 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 раз
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Результат в впечатляющий,но можно и посмотреть в "ширь" отказаться от "железа"(Nextion и LCD) и посылать данные в HMI_KaScada ,это не критика ,это более оптимальный вариант .ecoins писал(а): 20 сен 2021, 19:43 Посмотрел.
Рекомендации:
1.Отказаться от стандартных блоков Nextion.
2.Отказаться от работы со строками.
3.Отказаться от стандартных блоков LCD HD44780.
4.Использовать планировщик вызова плат.
-----------
Думаю быстродействие будет на уровне 40-50тыс. циклов loop() в сек.
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Конечно это самый оптимальный вариант, но к сожалению это невозможно.
Отказался от сложения строк - ничего не дало. Вообще отказаться от строк не могу. Хочу выводить показания на контрольный дисплей.
Там стоят блоки которые выставлял Dryundel. Они не грузят.
А вот тут меня ждал сюрприз. Установил вместо штатных блоков Nextion блоки от Калинникова Н. и запланировал работу плат поочередно через 400 мск и скорость выросла в 4 раза. Не супер что-то, но мне достаточно. Всем спасибо.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
[ref]Утвш[/ref],
Начнём с анализа.За основу проект из поста 103.[spoiler= Старая плата 2] [/spoiler]
Сбор данных от датчиков и их передача.
Теги модбас - это переменные, посему выходы с блоков float to int задублированы.
Присвоение этих переменных идёт в каждом цикле, хотя данные от датчиков не обновляются.
Для присвоения данных каждой переменной происходит обработка впередистоящей функции - т.е. чтобы присвоить двум переменным значения float->int выполняется дважды!
На плате 4 - каждый цикл собираем строки.
Немного переделаем.
Добавим генератор 1 на один цикл для опроса, плата 1.[spoiler=плата 1] [/spoiler]
Уберём встроенные таймеры с блоков получения, подключим к нашему опросу [spoiler=плата2] [/spoiler]
Уберём триггер, добавив новую переменную для инициализации массива адресов датчиков[spoiler=плата 3] [/spoiler]
Сделаем опрос датчиков и присвоение значений по нашему сигналу, автоматически убрав таймеры в блоках[spoiler=плата 4] [/spoiler]
Немного модифицируем плату с потоком
Плату вывода на дисплей разобъём на две - в одной будем после опроса собирать данные, в другой их отображать.[spoiler=платы 6 и 7] [/spoiler]
Если ещё посмотреть файл от панели некстион, немного переделать - отправлять данные одним пакетом, а там разбирать, получится ещё шустрее.
Просьба сравнить результат с изначальным - явного прироста не будет, но курочка по зёрнышку клюёт
Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
Начнём с анализа.За основу проект из поста 103.[spoiler= Старая плата 2] [/spoiler]
Сбор данных от датчиков и их передача.
Теги модбас - это переменные, посему выходы с блоков float to int задублированы.
Присвоение этих переменных идёт в каждом цикле, хотя данные от датчиков не обновляются.
Для присвоения данных каждой переменной происходит обработка впередистоящей функции - т.е. чтобы присвоить двум переменным значения float->int выполняется дважды!
На плате 4 - каждый цикл собираем строки.
Немного переделаем.
Добавим генератор 1 на один цикл для опроса, плата 1.[spoiler=плата 1] [/spoiler]
Уберём встроенные таймеры с блоков получения, подключим к нашему опросу [spoiler=плата2] [/spoiler]
Уберём триггер, добавив новую переменную для инициализации массива адресов датчиков[spoiler=плата 3] [/spoiler]
Сделаем опрос датчиков и присвоение значений по нашему сигналу, автоматически убрав таймеры в блоках[spoiler=плата 4] [/spoiler]
Немного модифицируем плату с потоком
Плату вывода на дисплей разобъём на две - в одной будем после опроса собирать данные, в другой их отображать.[spoiler=платы 6 и 7] [/spoiler]
Если ещё посмотреть файл от панели некстион, немного переделать - отправлять данные одним пакетом, а там разбирать, получится ещё шустрее.
Просьба сравнить результат с изначальным - явного прироста не будет, но курочка по зёрнышку клюёт
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Dryundel
- Полковник
- Сообщения: 2406
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Поблагодарили: 15 раз
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Просто отлично!Sancho писал(а): 22 сен 2021, 11:50 Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
Предложение принимается.
Всех кто в силах помочь новичкам с тормозами призываю подключаться.
Со своей стороны, буду заносить ссылки на самые интересные моменты в начало темы. Пост #4 "РАЗБОР ПОЛЁТОВ"
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Может еще и платы опроса датчиков и состояния Nextion запускать по условию?
Я в своих проектах на первой плате ставлю генератор с делителем и переменные для вызова плат через свои интервалы. У ecoins это называется диспетчер задач. Очень сильно разгружает процессор, как я полагаю.
Вот как сейчас, например, на 4 плате в каждом цикле опрос температуры, преобразование в инт, контроль изменения. Я бы 1 раз в секунду поставил. Плату 2, кстати, тоже не чаще.
Я в своих проектах на первой плате ставлю генератор с делителем и переменные для вызова плат через свои интервалы. У ecoins это называется диспетчер задач. Очень сильно разгружает процессор, как я полагаю.
Вот как сейчас, например, на 4 плате в каждом цикле опрос температуры, преобразование в инт, контроль изменения. Я бы 1 раз в секунду поставил. Плату 2, кстати, тоже не чаще.
- ViktorPetrov
- Капитан
- Сообщения: 807
- Зарегистрирован: 09 апр 2018, 23:56
- Имя: Виктор
- Благодарил (а): 4 раза
- Поблагодарили: 1 раз
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Да отлично ,что примеры будут собраны в рамках одной темы ,будит так же полезно и при использование наработок от ecoins те же задачи,события т.е код в рамках одной отдельно взятой плате тоже нужно оптимизировать.
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Если получится, то это было бы просто здорово.Sancho писал(а): 22 сен 2021, 11:50 Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
К сожалению, никаких изменений. Как уже писал, по рекомендациям поста 105, я заменил штатные блоки Nextion и запланировал работу плат. Получилось вот так: Кстати, для экономии места сложил блок замера количества циклов. Все по рекомендации уважаемого Dryndel (пост 2)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- ingener
- Лейтенант
- Сообщения: 580
- Зарегистрирован: 14 окт 2018, 00:26
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Dryundel, возможно ли добавить к набору блоков LCD 2.18 еще и ресет дисплея?
Или скомбинировать его с блоком подсветки?
Просто хочется применить их в проекте, где всегда при старте движения каретки возникает помеха, вызывающая абракадабру на дисплее.
Бороться с помехой бесполезно.
Поэтому придется сначала гасить подсветку, затем старт каретки, потом ресет абракадабры, затем включение подсветки.
Или скомбинировать его с блоком подсветки?
Просто хочется применить их в проекте, где всегда при старте движения каретки возникает помеха, вызывающая абракадабру на дисплее.
Бороться с помехой бесполезно.
Поэтому придется сначала гасить подсветку, затем старт каретки, потом ресет абракадабры, затем включение подсветки.
- Dryundel
- Полковник
- Сообщения: 2406
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Поблагодарили: 15 раз
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Я подумаю.ingener писал(а): 14 окт 2021, 11:52 Dryundel, возможно ли добавить к набору блоков LCD 2.18 еще и ресет дисплея?
- ingener
- Лейтенант
- Сообщения: 580
- Зарегистрирован: 14 окт 2018, 00:26
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
да вроде разобрался
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- ingener
- Лейтенант
- Сообщения: 580
- Зарегистрирован: 14 окт 2018, 00:26
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
после обновления IDE до версии 1.8.16 блок дисплея не компилируется -
русификация отключена.
в чем засада?
в версии 1.8.13 компилируется нормально.русификация отключена.
в чем засада?

У вас нет необходимых прав для просмотра вложений в этом сообщении.
- ingener
- Лейтенант
- Сообщения: 580
- Зарегистрирован: 14 окт 2018, 00:26
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
[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
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
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Значит удалите эту библиотеку.ingener писал(а): 23 ноя 2021, 15:24 C:\Users\AND\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
- ingener
- Лейтенант
- Сообщения: 580
- Зарегистрирован: 14 окт 2018, 00:26
- Имя: Андрей
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
да, так заработало, хотя при компиляции выдало предупреждение, что библиотека для avr и не факт что совместима с esp
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
А что может случиться? Чего опасаться надо с клеммами из или в платы? Если по условию плата.Dryundel писал(а): 15 сен 2021, 11:01 Необходимо так же помнить что при работе с платами, выполняющимися по условию, требуется соблюдать аккуратность. К примеру клемма, имеющая направление ИЗ такой платы может сыграть злую шутку.
- Dryundel
- Полковник
- Сообщения: 2406
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Поблагодарили: 15 раз
ВРЕМЯ ЦИКЛА или что убивает ваш проект.
Возможно этот момент был исправлен и такой клеммой (выходящей из платы) теперь создается переменная.Vuktor писал(а): 06 мар 2023, 20:15 А что может случиться? Чего опасаться надо с клеммами из или в платы? Если по условию плата.
Однако на момент написания статьи переменная точно не создавалась.
На вход блока в основном проекте по этой клеме "подавалась" не значение, а вся формула вычислений из платы по условию.
Сейчас уже не помню. Или ошибка была при компиляции или еще какой то трабл.
Короче говоря, я клемами очень редко пользуюсь. А переменные в которых нет необходимости, компилятор все равно вырежет.
Про это я писал здесь viewtopic.php?f=187&t=7921
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя