Страница 3 из 5

Панель NEXTION

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

Панель NEXTION

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

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

Панель NEXTION

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

Панель NEXTION

Добавлено: 31 май 2019, 13:02
Александр
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]
В биты можно заносить значения кнопок, булеан переменных - выигрыш колоссальный.

Панель NEXTION

Добавлено: 01 июн 2019, 18:15
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 Для чего эти манипуляции с этим знаком.
Ну как-то так

Панель NEXTION

Добавлено: 01 июн 2019, 21:33
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

Панель NEXTION

Добавлено: 02 июн 2019, 09:02
Siberian
[ref]grin-mpx[/ref], Здравствуйте!
Интересное решение передачи одной строкой на одну страницу! :smile9: :smile9: :smile9:
Только я не совсем понял суть разделителя # в сложении строк.
Работает и без него... :smile37:

Панель NEXTION

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

Панель NEXTION

Добавлено: 02 июн 2019, 10:48
grin-mpx
Да. Все верно. Без разделителя строки только фиксированной длины.

Панель NEXTION

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

Панель NEXTION

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

Панель NEXTION

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

Панель NEXTION

Добавлено: 02 июн 2019, 22:09
grin-mpx
Ursinoid писал(а): 02 июн 2019, 21:52 у меня получилось, что симулятор принимает сигналы из порта, но сам не реагирует на них.
Это как?

Панель NEXTION

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

Панель NEXTION

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

Панель NEXTION

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

Панель NEXTION

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

Панель NEXTION

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

Панель NEXTION

Добавлено: 03 июн 2019, 07:31
grin-mpx
Ursinoid писал(а): 03 июн 2019, 07:24 выполнять программный код который записан в редакторе, но этого почему-то не происходило.
В каком редакторе?

Панель NEXTION

Добавлено: 03 июн 2019, 09:33
Ursinoid
Я имею ввиду в таймере панели, но панель же создаётся в этом-же редакторе, в котором и запускается симулятор, и вполне естественно ожидать от него выполнение программы которая написана в нём же.