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

Аватара пользователя
ViktorPetrov
Лейтенант
Сообщения: 677
Зарегистрирован: 09.04.2018{, 23:56}
Репутация: 49
Имя: Виктор

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

#101

Сообщение ViktorPetrov » 20.09.2021{, 18:30}

Утвш, В посте 9 ,есть ссылка на тему с примером Из жизни Серёги

ecoins
Полковник
Сообщения: 2923
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

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

#102

Сообщение ecoins » 20.09.2021{, 19:43}

Утвш писал(а):
20.09.2021{, 17:37}
Может у кого-то найдется время посмотреть, что можно сделать для увеличения быстродействия. Проверка по рекомендациям поста 2, количество циклов составило всего 40 за 30 сек. Или это все, что можно получить без изучения С++?
Посмотрел.
Рекомендации:
1.Отказаться от стандартных блоков Nextion.
2.Отказаться от работы со строками.
3.Отказаться от стандартных блоков LCD HD44780.
4.Использовать планировщик вызова плат.
-----------
Думаю быстродействие будет на уровне 40-50тыс. циклов loop() в сек.

Аватара пользователя
ViktorPetrov
Лейтенант
Сообщения: 677
Зарегистрирован: 09.04.2018{, 23:56}
Репутация: 49
Имя: Виктор

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

#103

Сообщение ViktorPetrov » 20.09.2021{, 21:07}

ecoins писал(а):
20.09.2021{, 19:43}
Посмотрел.
Рекомендации:
1.Отказаться от стандартных блоков Nextion.
2.Отказаться от работы со строками.
3.Отказаться от стандартных блоков LCD HD44780.
4.Использовать планировщик вызова плат.
-----------
Думаю быстродействие будет на уровне 40-50тыс. циклов loop() в сек.
Результат в впечатляющий,но можно и посмотреть в "ширь" отказаться от "железа"(Nextion и LCD) и посылать данные в HMI_KaScada ,это не критика ,это более оптимальный вариант .

Утвш
Сержант
Сообщения: 129
Зарегистрирован: 02.12.2016{, 07:31}
Репутация: 1

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

#104

Сообщение Утвш » 21.09.2021{, 23:13}

ViktorPetrov писал(а):
20.09.2021{, 21:07}
отказаться от "железа"(Nextion и LCD)
Конечно это самый оптимальный вариант, но к сожалению это невозможно.
ecoins писал(а):
20.09.2021{, 19:43}
2.Отказаться от работы со строками.
Отказался от сложения строк - ничего не дало. Вообще отказаться от строк не могу. Хочу выводить показания на контрольный дисплей.
ecoins писал(а):
20.09.2021{, 19:43}
Отказаться от стандартных блоков LCD HD44780.
Там стоят блоки которые выставлял Dryundel. Они не грузят.
ViktorPetrov писал(а):
20.09.2021{, 21:07}
Отказаться от стандартных блоков Nextion.
ViktorPetrov писал(а):
20.09.2021{, 21:07}
Использовать планировщик вызова плат.
А вот тут меня ждал сюрприз. Установил вместо штатных блоков Nextion блоки от Калинникова Н. и запланировал работу плат поочередно через 400 мск и скорость выросла в 4 раза. Не супер что-то, но мне достаточно. Всем спасибо.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

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

#105

Сообщение Sancho » 22.09.2021{, 11:50}

Утвш,
Утвш писал(а):
21.09.2021{, 23:13}
Всем спасибо.
Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
Начнём с анализа.За основу проект из поста 103.
Старая плата 2Показать
2021-09-22_09-51-37.png
Сбор данных от датчиков и их передача.
Теги модбас - это переменные, посему выходы с блоков float to int задублированы.
Присвоение этих переменных идёт в каждом цикле, хотя данные от датчиков не обновляются.
Для присвоения данных каждой переменной происходит обработка впередистоящей функции - т.е. чтобы присвоить двум переменным значения float->int выполняется дважды!
На плате 4 - каждый цикл собираем строки.
Немного переделаем.
Добавим генератор 1 на один цикл для опроса, плата 1.
плата 1Показать
2021-09-22_11-33-16.png
2021-09-22_11-33-16.png (9.46 КБ) 1749 просмотров
Уберём встроенные таймеры с блоков получения, подключим к нашему опросу
плата2Показать
2021-09-22_11-35-12.png
2021-09-22_11-35-12.png (5.94 КБ) 1749 просмотров
Уберём триггер, добавив новую переменную для инициализации массива адресов датчиков
плата 3Показать
2021-09-22_13-14-56.png
Сделаем опрос датчиков и присвоение значений по нашему сигналу, автоматически убрав таймеры в блоках
плата 4Показать
2021-09-22_11-40-20.png
Немного модифицируем плату с потоком
Плату вывода на дисплей разобъём на две - в одной будем после опроса собирать данные, в другой их отображать.
платы 6 и 7Показать
2021-09-22_11-43-15.png
Если ещё посмотреть файл от панели некстион, немного переделать - отправлять данные одним пакетом, а там разбирать, получится ещё шустрее.
Просьба сравнить результат с изначальным - явного прироста не будет, но курочка по зёрнышку клюёт
Nextion,NodeMCU,Cloud_01.rar
(157.71 КБ) 50 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

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

#106

Сообщение Dryundel » 22.09.2021{, 13:55}

Sancho писал(а):
22.09.2021{, 11:50}
Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
Просто отлично!
Предложение принимается.
Всех кто в силах помочь новичкам с тормозами призываю подключаться.
Со своей стороны, буду заносить ссылки на самые интересные моменты в начало темы. Пост #4 "РАЗБОР ПОЛЁТОВ"

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

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

#107

Сообщение Alias » 22.09.2021{, 17:55}

Может еще и платы опроса датчиков и состояния Nextion запускать по условию?
Я в своих проектах на первой плате ставлю генератор с делителем и переменные для вызова плат через свои интервалы. У ecoins это называется диспетчер задач. Очень сильно разгружает процессор, как я полагаю.
Вот как сейчас, например, на 4 плате в каждом цикле опрос температуры, преобразование в инт, контроль изменения. Я бы 1 раз в секунду поставил. Плату 2, кстати, тоже не чаще.

Аватара пользователя
ViktorPetrov
Лейтенант
Сообщения: 677
Зарегистрирован: 09.04.2018{, 23:56}
Репутация: 49
Имя: Виктор

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

#108

Сообщение ViktorPetrov » 22.09.2021{, 18:55}

Да отлично ,что примеры будут собраны в рамках одной темы ,будит так же полезно и при использование наработок от ecoins те же задачи,события т.е код в рамках одной отдельно взятой плате тоже нужно оптимизировать.

Утвш
Сержант
Сообщения: 129
Зарегистрирован: 02.12.2016{, 07:31}
Репутация: 1

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

#109

Сообщение Утвш » 22.09.2021{, 19:01}

Sancho писал(а):
22.09.2021{, 11:50}
Предлагаю, в контексте названия темы, не останавливаться, а продолжить разбираться с проблемой по возможности штатными средствами.
Если получится, то это было бы просто здорово.
Sancho писал(а):
22.09.2021{, 11:50}
Просьба сравнить результат с изначальным
К сожалению, никаких изменений.
Nextion,NodeMCU,Cloud_01.rar
(203.86 КБ) 46 скачиваний
Как уже писал, по рекомендациям поста 105, я заменил штатные блоки Nextion и запланировал работу плат. Получилось вот так:
NodeMCUтестCloud 4.rar
(191.17 КБ) 57 скачиваний
Кстати, для экономии места сложил блок замера количества циклов. Все по рекомендации уважаемого Dryndel (пост 2)

Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

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

#110

Сообщение ingener » 14.10.2021{, 11:52}

Dryundel, возможно ли добавить к набору блоков LCD 2.18 еще и ресет дисплея?
Или скомбинировать его с блоком подсветки?
Просто хочется применить их в проекте, где всегда при старте движения каретки возникает помеха, вызывающая абракадабру на дисплее.
Бороться с помехой бесполезно.
Поэтому придется сначала гасить подсветку, затем старт каретки, потом ресет абракадабры, затем включение подсветки.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

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

#111

Сообщение Dryundel » 14.10.2021{, 13:40}

ingener писал(а):
14.10.2021{, 11:52}
Dryundel, возможно ли добавить к набору блоков LCD 2.18 еще и ресет дисплея?
Я подумаю.

Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

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

#112

Сообщение ingener » 14.10.2021{, 15:19}

да вроде разобрался
RESET_LCD_2.18_(Code_-_Basic).ubi
(16.37 КБ) 59 скачиваний

Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

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

#113

Сообщение ingener » 23.11.2021{, 15:11}

после обновления IDE до версии 1.8.16 блок дисплея не компилируется -
1816.JPG
в версии 1.8.13 компилируется нормально.
русификация отключена.
в чем засада? :smile37:

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

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

#114

Сообщение Phazz » 23.11.2021{, 15:17}

А сообщение ошибки можно увидеть?

Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

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

#115

Сообщение ingener » 23.11.2021{, 15:24}

Phazz,
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
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#116

Сообщение aidar_i » 23.11.2021{, 16:08}

ingener писал(а):
23.11.2021{, 15:24}
C:\Users\AND\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Значит удалите эту библиотеку.

Аватара пользователя
ingener
Лейтенант
Сообщения: 556
Зарегистрирован: 14.10.2018{, 00:26}
Репутация: 20
Имя: Андрей

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

#117

Сообщение ingener » 23.11.2021{, 16:33}

да, так заработало, хотя при компиляции выдало предупреждение, что библиотека для avr и не факт что совместима с esp

Аватара пользователя
Vuktor
Сержант
Сообщения: 237
Зарегистрирован: 11.04.2021{, 14:44}
Репутация: 12
Имя: Vuktor

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

#118

Сообщение Vuktor » 06.03.2023{, 20:15}

Dryundel писал(а):
15.09.2021{, 11:01}
Необходимо так же помнить что при работе с платами, выполняющимися по условию, требуется соблюдать аккуратность. К примеру клемма, имеющая направление ИЗ такой платы может сыграть злую шутку.
А что может случиться? Чего опасаться надо с клеммами из или в платы? Если по условию плата.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

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

#119

Сообщение Dryundel » 06.03.2023{, 20:38}

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

Ответить

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