Панель NEXTION

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

Панель NEXTION

Сообщение Ursinoid »

Теперь вопрос как организовать создание этих переменных в Flprog, организовать разбор и обработку переменных в панели. Я нашёл такие операторы как duble a1,a2; cin >> a1; cin >> a2, но редактор ругается на них, то-ли не знает, то-ли неправильное написание.
Александр
Рядовой
Сообщения: 85
Зарегистрирован: 01 дек 2015, 15:49
Откуда: Бобруйск
Имя: Александр
Поблагодарили: 2 раза

Панель NEXTION

Сообщение Александр »

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

Отправлено спустя 35 минут 16 секунд:
О, засада в панели, из описания:
7 Nextion uses integer math and does not have real or floating support.
Нет в ней чисел типа float, только long.
Тогда с десятичными значениями придётся работать как со строкой:
получать из переменной и добавлять точку перед последним символом. Несложно.
или слать изначально строкой. больше байт в посылке.
Нужно так-же понимать - посылка, нетто, идёт в "обёртке"спец символов - в итоге брутто может перевесить эффективность сборки. Для этого нужно определится, где и на каких экранах будут находится отображаемые данные. Может витиевато завернул - но надеюсь на понимание :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

Александр спасибо за советы на мои ламерские вопросы. Действительно лучше отправлять всё строковыми переменными. Мне так понятнее что я делаю. Хотя данные и будут в той или иной степени задействованы на всех страницах, эти все переменные (пользуюсь подсказками других участников форума:grin-mpx, SSSergeich например), будут отправляться на одну страницу, как правило стартовую, там они будут обрабатываться, и оттуда-же разбираться по другим страницам.
Александр
Рядовой
Сообщения: 85
Зарегистрирован: 01 дек 2015, 15:49
Откуда: Бобруйск
Имя: Александр
Поблагодарили: 2 раза

Панель NEXTION

Сообщение Александр »

Ursinoid писал(а): 31 май 2019, 12:35 Александр спасибо за советы на мои ламерские вопросы. Действительно лучше отправлять всё строковыми переменными. Мне так понятнее что я делаю.
Согласен, не стоит всё брать с наскока :)
Но немного для закрепления моих разъяснений, что-б не пропали совсем даром:
[spoiler=Просто для понимания, вариант плата 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 переменных.
Всё. 
[/spoiler]
В биты можно заносить значения кнопок, булеан переменных - выигрыш колоссальный.
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

[ref]grin-mpx[/ref], подскажи по своему примеру передачи четырёх переменных одной строкой. Я уже какой день с ним разбираюсь и кое-что мне не понятно.
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 июл 2017, 18:39
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

Сообщение grin-mpx »

Ursinoid писал(а): 01 июн 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 июн 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
4 v 1.HMI
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

Панель NEXTION

Сообщение Siberian »

[ref]grin-mpx[/ref], Здравствуйте!
Интересное решение передачи одной строкой на одну страницу! :smile9: :smile9: :smile9:
Только я не совсем понял суть разделителя # в сложении строк.
Работает и без него... :smile37:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

Я кажется понял, без разделителя #, каждую подстроку придётся делать одинаковой длинны, а с разделителем ограничивается только общей длинной строки в переменной. Класс! Я делал для пробы объединение строк, но мне пришлось все подстроки приводить к одинаковой и фиксированной длине. А это муторно потом лишние операции по приведению переданного значения к исходному, да и в Fl убираются лишние блоки, то есть получается и код меньшего размера. Где-то ранее на форуме читал чьё-то высказывание, что строковые переменные при пересылке в ардуине создают копию самих себя, и если программа занимает где-то более 60% памяти, то с учётом резервных копий, её может не хватить, отсюда и тормоза при выполнении программы в ардуине. Один форумчанин писал, что у него Мега там какая-то, и то она не справлялась с выполнением программы, так что ему в конце концов пришлось присандалить ещё одну Мегу, которая выполняла функцию только по коммуникации между основной Мегой и исполнителями.
Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17 июл 2017, 18:39
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

Сообщение grin-mpx »

Да. Все верно. Без разделителя строки только фиксированной длины.
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

grin-mpx, хотя ты так и не ответил откуда в va4.val, в начале работы программы, появляется значение 3, если в конце программы все переменные обнуляются.
Зачем опять в va2 объединять извлечённое значение и разделитель, а перед раздачей в t0 опять его убирать, а если вообще убрать эти манипуляции с разделителем?
Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17 июл 2017, 18:39
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

Сообщение grin-mpx »

Ursinoid писал(а): 02 июн 2019, 18:17 если вообще убрать эти манипуляции с разделителем?
Так и попробуйте. Может будет работать. Я уже не помню с каких соображений куда чего ставил. Может ошибся где-то.
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

К сожалению не работает. Я пробовал по разному, изгалялся как мог над кодом. Без этого кода как и должно извлекается по одному символу. Таким образом надо использовать код как у тебя. Ещё вопрос по симулятору, что надо сделать, что бы симулятор работал от сигналов ком- порта, у меня получилось, что симулятор принимает сигналы из порта, но сам не реагирует на них.
Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17 июл 2017, 18:39
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

Сообщение grin-mpx »

Ursinoid писал(а): 02 июн 2019, 21:52 у меня получилось, что симулятор принимает сигналы из порта, но сам не реагирует на них.
Это как?
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

Ну там внизу под окошком симулятора 3 маленьких окошка, когда я ставлю пункт ,User MCU input, появляется пункт для коннекта с портом. После коннекта с портом в самом правом окошке бегут данные из ком-порта, но сам симулятор не реагирует на него.
Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17 июл 2017, 18:39
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

Сообщение grin-mpx »

А как он должен реагировать? Там кроме текстовой информации идет идет постоянный обмен, запрос номера страницы, опрос кнопок или еще чего-то. Над третьим маленьким окошком нажмите букву S, потом остановите симуляцию кнопкой STOP и почитайте что там прилетало на панель.
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

Я думал, что панель в симуляторе должна работать по приходу команды из порта. В третьем маленьком окошке я вижу какие команды прилетают, а толку.
Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17 июл 2017, 18:39
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

Сообщение grin-mpx »

Ursinoid писал(а): 03 июн 2019, 07:08 В третьем маленьком окошке я вижу какие команды прилетают, а толку.
Так а какие?
Ursinoid писал(а): 03 июн 2019, 07:08 Я думал, что панель в симуляторе должна работать по приходу команды из порта.
Панель с ардуиной живут своей жизнью, иногда обращаясь к Вам, а иногда выполняют Вашу просьбу. :smile44:
Что конкретно не работает?
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

Я пробовал пример, который выложил уважаемы Siberian(ох и задолбался же я в симуляторе цифири набирать!) :D ,так вот, в правом маленьком окошке прилетала именно та строка которая формировалась в ардуине. Я думал, что по приходу этой строки, виртуальная панель должна реагировать,т.е. выполнять программный код который записан в редакторе, но этого почему-то не происходило.
Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17 июл 2017, 18:39
Откуда: Днепр. UA
Имя: Григорий

Панель NEXTION

Сообщение grin-mpx »

Ursinoid писал(а): 03 июн 2019, 07:24 выполнять программный код который записан в редакторе, но этого почему-то не происходило.
В каком редакторе?
Ursinoid
Рядовой
Сообщения: 60
Зарегистрирован: 06 май 2018, 19:18
Имя: Михаил

Панель NEXTION

Сообщение Ursinoid »

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

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

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

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