Панель NEXTION

Блокировка экрана

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#41

Сообщение Ursinoid » 31.05.2019{, 08:23}

Теперь вопрос как организовать создание этих переменных в Flprog, организовать разбор и обработку переменных в панели. Я нашёл такие операторы как duble a1,a2; cin >> a1; cin >> a2, но редактор ругается на них, то-ли не знает, то-ли неправильное написание.

Александр
Рядовой
Сообщения: 72
Зарегистрирован: 01.12.2015{, 15:49}
Репутация: 11
Откуда: Бобруйск
Имя: Александр

Панель NEXTION

#42

Сообщение Александр » 31.05.2019{, 10:31}

Ursinoid, Давайте по порядку.
Начнём с упаковки.
Блок сдвига - с нашего форума, из какого-то проекта...
Постарался подробно для Вас описать. Там два варианта сборки первой переменной.
Спрашивайте, если не понятно, с удовольствием отвечу.

Отправлено спустя 35 минут 16 секунд:
О, засада в панели, из описания:
7 Nextion uses integer math and does not have real or floating support.
Нет в ней чисел типа float, только long.
Тогда с десятичными значениями придётся работать как со строкой:
получать из переменной и добавлять точку перед последним символом. Несложно.
или слать изначально строкой. больше байт в посылке.
Нужно так-же понимать - посылка, нетто, идёт в "обёртке"спец символов - в итоге брутто может перевесить эффективность сборки. Для этого нужно определится, где и на каких экранах будут находится отображаемые данные. Может витиевато завернул - но надеюсь на понимание :)
Вложения
Упаковка Ursinoid 01.flp
(401.77 КБ) 44 скачивания

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#43

Сообщение Ursinoid » 31.05.2019{, 12:35}

Александр спасибо за советы на мои ламерские вопросы. Действительно лучше отправлять всё строковыми переменными. Мне так понятнее что я делаю. Хотя данные и будут в той или иной степени задействованы на всех страницах, эти все переменные (пользуюсь подсказками других участников форума:grin-mpx, SSSergeich например), будут отправляться на одну страницу, как правило стартовую, там они будут обрабатываться, и оттуда-же разбираться по другим страницам.

Александр
Рядовой
Сообщения: 72
Зарегистрирован: 01.12.2015{, 15:49}
Репутация: 11
Откуда: Бобруйск
Имя: Александр

Панель NEXTION

#44

Сообщение Александр » 31.05.2019{, 13:02}

Ursinoid писал(а):
31.05.2019{, 12:35}
Александр спасибо за советы на мои ламерские вопросы. Действительно лучше отправлять всё строковыми переменными. Мне так понятнее что я делаю.
Согласен, не стоит всё брать с наскока :)
Но немного для закрепления моих разъяснений, что-б не пропали совсем даром:
Просто для понимания, вариант плата 2Показать

Код: Выделить всё

Сначала переменная 0, т.е. 
	0000 0000  0000 0000  0000 0000  0000 0000
	^ старший бит, 31-й     младший бит, 0-й ^
Записываем наши первые 11 бит, данных,"А", в младшие
	0000 0000  0000 0000  0000 0ААА  АААА АААА
потом сдвигаем влево, на 11 для записи следующих 11, "В"
	0000 0000  00АА АААА  АААА А000  0000 0000
потом битовое ИЛИ со второй переменной
	0000 0000  00АА АААА  АААА А000  0000 0000
	0000 0000  0000 0000  0000 0BBB  BBBB BBBB
=	0000 0000  00АА АААА  АААА АBBB  BBBB BBBB
Сдвинем ещё влево для записи следующих девяти,"С"
	0AAA AAAA  AAAA BBBB  BBBB BBB0  0000 0000
Потом побитовое или с третьей
	0AAA AAAA  AAAA BBBB  BBBB BBB0  0000 0000
	0000 0000  0000 0000  0000 000С  СССС СССС
=	0AAA AAAA  AAAA BBBB  BBBB BBBС  СССС СССС
В битах А - значение от 1, в В - от 2, в С - от 3 переменных.
Всё. 
В биты можно заносить значения кнопок, булеан переменных - выигрыш колоссальный.

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#45

Сообщение Ursinoid » 01.06.2019{, 18:15}

grin-mpx, подскажи по своему примеру передачи четырёх переменных одной строкой. Я уже какой день с ним разбираюсь и кое-что мне не понятно.
1 "//va0.txt=sinhro.stroka.txt" , что означает данный комент и к чему относится, в твоём примере я не нашёл переменную va0.txt
2 Как переменные va3.val==0 и va4.val=3 получают эти значения, я вставлял в твой код строки на вывод значений этих переменных на экран у меня получалось, что вначале работы таймера va3.val=4, как она обнуляется.
3 Почему при извлечении подстроки должен извлекаться 1 знак, выделяется 4 знака.
4 Зачем используется знак конца строки #, а если строку отправлять без этого знака?
5 Для чего эти манипуляции с этим знаком.
Ну как-то так

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

#46

Сообщение grin-mpx » 01.06.2019{, 21:33}

Ursinoid писал(а):
01.06.2019{, 18:15}
1 "//va0.txt=sinhro.stroka.txt" , что означает данный комент и к чему относится, в твоём примере я не нашёл переменную va0.txt
2 Как переменные va3.val==0 и va4.val=3 получают эти значения, я вставлял в твой код строки на вывод значений этих переменных на экран у меня получалось, что вначале работы таймера va3.val=4, как она обнуляется.
3 Почему при извлечении подстроки должен извлекаться 1 знак, выделяется 4 знака.
1. Это не коммент, это просто закомментированная строка. Чтоб не работала в коде и чтоб не удалять и не прописывать потом опять.
Не обращайте внимания.
2. Вы не представляете на каком уровне пространственного подсознания я был, когда адаптировал этот код из какого-то примера под свои
нужды. Это при том, что я Си не знаю. Потому как я сейчас в сознании, толком Вам объяснить не могу :D
3. Тоже...
Ursinoid писал(а):
01.06.2019{, 18:15}
4 Зачем используется знак конца строки #, а если строку отправлять без этого знака?
Символ # является маркером (разделительным символом) окончания значения преданного в любом месте строки из ардуины. То есть, собранная в ардуине строка Flprog#3.0.3# запишется в t0 как Flprog и в t1 как 3.0.3 . В принципе # можно заменить любым другим символом, но при условии что кроме как маркером он не прилетит от ардуины. Без разделительного символа (маркера)в данной конструкции не обойтись, т.к. он делает возможным передачу строки с нефиксированным количеством символов. (в данном случае число символов в каждом из 4х значений ограничено до 10. За это отвечают переменные va1,va2,общая длинна строки-переменная stroka на странице sinhro).
Ниже выкладываю рабочие проекты. Тут уже реализована передача данных каждую секунду и обновление их на дисплее. Хочу заметить, что фактически для передачи 8 значений на 2х страницах задействована всего одна переменная для дисплея в ардуино. В дисплее кроме основных страниц есть страница sinhro с переменной stroka. Именно туда ардуина отправляет собранную строку и именно оттуда таймеры на страницах дисплея выдергивают эту строку для разборки. Тот, кто сталкивался с нехваткой памяти для глобальных переменных у ардуины из-за большого количества значений, кнопок и пр. знает как важно сократить по максимуму элементы на дисплее . :smile171:
4 в 1.flp
(338.09 КБ) 61 скачивание
4 v 1.HMI
(35.34 КБ) 61 скачивание

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Панель NEXTION

#47

Сообщение Siberian » 02.06.2019{, 09:02}

grin-mpx, Здравствуйте!
Интересное решение передачи одной строкой на одну страницу! :smile9: :smile9: :smile9:
Только я не совсем понял суть разделителя # в сложении строк.
Работает и без него... :smile37:
Вложения
String_Test_30_.HMI
(66.43 КБ) 45 скачиваний
String_Test_30_.flp
(86.63 КБ) 44 скачивания

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#48

Сообщение Ursinoid » 02.06.2019{, 10:03}

Я кажется понял, без разделителя #, каждую подстроку придётся делать одинаковой длинны, а с разделителем ограничивается только общей длинной строки в переменной. Класс! Я делал для пробы объединение строк, но мне пришлось все подстроки приводить к одинаковой и фиксированной длине. А это муторно потом лишние операции по приведению переданного значения к исходному, да и в Fl убираются лишние блоки, то есть получается и код меньшего размера. Где-то ранее на форуме читал чьё-то высказывание, что строковые переменные при пересылке в ардуине создают копию самих себя, и если программа занимает где-то более 60% памяти, то с учётом резервных копий, её может не хватить, отсюда и тормоза при выполнении программы в ардуине. Один форумчанин писал, что у него Мега там какая-то, и то она не справлялась с выполнением программы, так что ему в конце концов пришлось присандалить ещё одну Мегу, которая выполняла функцию только по коммуникации между основной Мегой и исполнителями.

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

#49

Сообщение grin-mpx » 02.06.2019{, 10:48}

Да. Все верно. Без разделителя строки только фиксированной длины.

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#50

Сообщение Ursinoid » 02.06.2019{, 18:17}

grin-mpx, хотя ты так и не ответил откуда в va4.val, в начале работы программы, появляется значение 3, если в конце программы все переменные обнуляются.
Зачем опять в va2 объединять извлечённое значение и разделитель, а перед раздачей в t0 опять его убирать, а если вообще убрать эти манипуляции с разделителем?

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

#51

Сообщение grin-mpx » 02.06.2019{, 21:00}

Ursinoid писал(а):
02.06.2019{, 18:17}
если вообще убрать эти манипуляции с разделителем?
Так и попробуйте. Может будет работать. Я уже не помню с каких соображений куда чего ставил. Может ошибся где-то.

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#52

Сообщение Ursinoid » 02.06.2019{, 21:52}

К сожалению не работает. Я пробовал по разному, изгалялся как мог над кодом. Без этого кода как и должно извлекается по одному символу. Таким образом надо использовать код как у тебя. Ещё вопрос по симулятору, что надо сделать, что бы симулятор работал от сигналов ком- порта, у меня получилось, что симулятор принимает сигналы из порта, но сам не реагирует на них.

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

#53

Сообщение grin-mpx » 02.06.2019{, 22:09}

Ursinoid писал(а):
02.06.2019{, 21:52}
у меня получилось, что симулятор принимает сигналы из порта, но сам не реагирует на них.
Это как?

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#54

Сообщение Ursinoid » 02.06.2019{, 22:51}

Ну там внизу под окошком симулятора 3 маленьких окошка, когда я ставлю пункт ,User MCU input, появляется пункт для коннекта с портом. После коннекта с портом в самом правом окошке бегут данные из ком-порта, но сам симулятор не реагирует на него.

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

#55

Сообщение grin-mpx » 03.06.2019{, 06:58}

А как он должен реагировать? Там кроме текстовой информации идет идет постоянный обмен, запрос номера страницы, опрос кнопок или еще чего-то. Над третьим маленьким окошком нажмите букву S, потом остановите симуляцию кнопкой STOP и почитайте что там прилетало на панель.

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#56

Сообщение Ursinoid » 03.06.2019{, 07:08}

Я думал, что панель в симуляторе должна работать по приходу команды из порта. В третьем маленьком окошке я вижу какие команды прилетают, а толку.

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

#57

Сообщение grin-mpx » 03.06.2019{, 07:16}

Ursinoid писал(а):
03.06.2019{, 07:08}
В третьем маленьком окошке я вижу какие команды прилетают, а толку.
Так а какие?
Ursinoid писал(а):
03.06.2019{, 07:08}
Я думал, что панель в симуляторе должна работать по приходу команды из порта.
Панель с ардуиной живут своей жизнью, иногда обращаясь к Вам, а иногда выполняют Вашу просьбу. :smile44:
Что конкретно не работает?

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#58

Сообщение Ursinoid » 03.06.2019{, 07:24}

Я пробовал пример, который выложил уважаемы Siberian(ох и задолбался же я в симуляторе цифири набирать!) :D ,так вот, в правом маленьком окошке прилетала именно та строка которая формировалась в ардуине. Я думал, что по приходу этой строки, виртуальная панель должна реагировать,т.е. выполнять программный код который записан в редакторе, но этого почему-то не происходило.

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

#59

Сообщение grin-mpx » 03.06.2019{, 07:31}

Ursinoid писал(а):
03.06.2019{, 07:24}
выполнять программный код который записан в редакторе, но этого почему-то не происходило.
В каком редакторе?

Ursinoid
Рядовой
Сообщения: 52
Зарегистрирован: 06.05.2018{, 19:18}
Репутация: 0
Имя: Михаил

Панель NEXTION

#60

Сообщение Ursinoid » 03.06.2019{, 09:33}

Я имею ввиду в таймере панели, но панель же создаётся в этом-же редакторе, в котором и запускается симулятор, и вполне естественно ожидать от него выполнение программы которая написана в нём же.

Ответить

Вернуться в «Спросить у знатоков»