Панель Nextion

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

Панель Nextion

#301

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

Alias писал(а):
15.07.2018{, 00:35}
Тогда можно было бы с первой страницы попасть на вторую, с нее по прямой ссылке на третью, а с третьей через кнопку возврата на предыдущую страницу, в данном случае - на вторую.
Я пока способа без условия if не нашел. Вариант типа page=va0.val не проходит. Кажется нет возможности ссылаться на какую-то переменную при задании перехода на страницу, только через if и с перечислением названия имеющихся страниц.

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

Панель Nextion

#302

Сообщение Alias » 18.07.2018{, 20:25}

Есть у меня в проекте шаговый двигатель, самый примитивный 28byj-48. Долго не мог понять, почему он в нужное время не отрабатывает поворот на нужный угол.
Каково же было мое удивление, когда, открыв корпус, увидел вялое переливание огонька от светодиода в светодиоду на драйвере. На один шаг уходит порядка секунды. В минуту - несколько градусов.
Видимо, если что-то и задумаю в будущем на Nextion, буду делать буфер на какой-нибудь Нано между основным контроллером и панелью. И что сразу не сообразил...

Vint
Рядовой
Сообщения: 54
Зарегистрирован: 07.09.2015{, 10:16}
Репутация: 4
Откуда: Minsk

Панель Nextion

#303

Сообщение Vint » 18.07.2018{, 23:27}

Доброго здравия, Коллеги!
Имею панель NX8048K070. Появилось пару вопросов.
Кто нибудь пользовался переменными ”thsp” и ”thup”? У меня панель нЕ засыпает если открыта страница с приписанной инструкцией. Если открыть другую страницу, всё чётко отключается.
Адресация в панели. Для сохранения переменных применяются команды wepo и repo, каждая использует 4 байта (numeric value length: is 4 bytes…). Значит при записи в нулевую ячейку будут заняты адреса с 0 по 3. В приложенном демо, при записи в четвёртую ячейку, изменяются и младшие адреса.
Это мои ляпы или особенности работы панели?
Вложения
Test.HMI
(1.21 МБ) 125 скачиваний

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

Панель Nextion

#304

Сообщение Alias » 25.07.2018{, 14:44}

Неожиданно много ушло памяти на несложный проект в связке в панелью, IDE ругается. Видимо, это красота требует жертв.
В частности, хочется менять атрибуты элементов, а их много: это и цвет изменяющихся параметров, то есть рост - красный, снижение - синий, серый - если неактивна целая группа параметров технологического процесса. Приходится на каждый из них использовать блок "Задать параметр", то есть, по сути, отправлять один параметр десятку элементов на панели.
А можно ли передать этот единственный параметр системной переменной самой Nextion и чтобы из нее читались атрибуты элементов?
Я пока так и не нашел решения.
Спасибо!

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

Панель Nextion

#305

Сообщение grin-mpx » 25.07.2018{, 15:12}

Alias писал(а):
25.07.2018{, 14:44}
А можно ли передать этот единственный параметр системной переменной самой Nextion и чтобы из нее читались атрибуты элементов?
Я пока так и не нашел решения.
Поставьте на каждой из страниц (где будут меняться атрибуты) таймер с кодом который будет опрашивать единственную переменную,ту, которая от ардуины будет получать значение этого атрибута и соответсвенно менять его состояние.

Отправлено спустя 5 минут 10 секунд:
типа:
if (page0.color.val=10)
{
t0.pco=63488;
}
if (page0.color.val=20)
{
t0.pco=22222;
}

Переменная color размещается на одной (любой ) странице с глобальным статусом, в примере на page0.

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

Панель Nextion

#306

Сообщение Alias » 25.07.2018{, 15:24}

И можно все элементы тут прописать, то есть
if (page0.color.val=10)
{
t0.pco=63488;
t1...=63488;
t2 =63488;
и так далее?
}
Спасибо! Попробую! Правда, методом научного тыка. Должен попасть.

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

Панель Nextion

#307

Сообщение grin-mpx » 25.07.2018{, 15:27}

Да. Только все элементы именно этой страницы. Желательно.

Отправлено спустя 10 минут 19 секунд:
Еще, если Вы хотите заглянуть в переменную или изменить что-то на текущей странице, то можно писать без указания страницы;
if (color.val=10)
{
t0.pco=63488;
}
а если смотрите-меняете не на текущей, то обязательно перед переменной указываете название страницы;
if (page0.color.val=10)
{
page1.t0.txt="256";
}
Самое хреновое в Nextion IDE, это невозможность определить где ошибка если при компиляции таковая имеется. Указывается только имя и всё.
Нет ни страницы, ни причины, короче ничего. По этому я чуть-ли не после каждого изменения компилирую. Иначе можно далеко зайти и искать проблему вечно :smile453:

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

Панель Nextion

#308

Сообщение Alias » 25.07.2018{, 16:02}

Уфф... Тяжко вникать в то, чего не понимаешь, плюс пресловутый синтаксис, на который столько нареканий... Я и слов таких не знаю, но пытаюсь разобраться самостоятельно и уже потом спрашивать. Спасибо за подсказки, сейчас попробую и это, но пока наткнулся на ошибки. Панель принимает
if(ColorMash.val>=100)
{
t7.pco=100
}
но отказывается от такого
if(ColorMash.val=100)
{
t7.pco=100
}
И не понятно, почему. Ведь если я хочу активировать нужный цвет шрифта по конкретным значениям переменной, то должно бы работать и по равенству
if(ColorMash.val=1)
{
t7.pco=1448
}
if(ColorMash.val=0)
{
t7.pco=19049
}
Но выдает
Error: SYNTAX ERROR:if(ColorMash.val=1)( Double click to jump to code)
Error: Compile failed! 1 Errors, 0 Warnings,

Хотел оттолкнуться от заведомо известного аттрибута элемента с другой страницы, но тоже не получается
if(set_Mash.MashStatus.txt="ON")
{
t7.pco=1448
}
if(set_Mash.MashStatus.txt="OFF")
{
t7.pco=19049
}

и ругается на синтаксис
Error: SYNTAX ERROR:if(set_Mash.MashStatus.txt="ON")( Double click to jump to code)
Error: Compile failed! 1 Errors, 0 Warnings,

Буду брутфорсом брать :)

Отправлено спустя 11 минут 2 секунды:
Получилось! Но спина мокрая :)
Итак, с меня плюсик и вот рабочий код:
if(set_Mash.MashStatus.txt=="ON")
{
t7.pco=1448
}
if(set_Mash.MashStatus.txt=="OFF")
{
t7.pco=19049
}

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

Панель Nextion

#309

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

Да, знак ревенства это == , присвоение это =, тут я накосячил :smile250:
Последний раз редактировалось grin-mpx 25.07.2018{, 16:20}, всего редактировалось 1 раз.

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

Панель Nextion

#310

Сообщение Alias » 25.07.2018{, 16:19}

А видимостью можно так же управлять?

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

Панель Nextion

#311

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

да. Примерно так

if(va10.val==1)
{
vis p3,1
}
if(va10.val==0)
{
vis p3,0
vis p4,1
}

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

Панель Nextion

#312

Сообщение Alias » 25.07.2018{, 16:28}

Спасибо! Ушел лопатить код :) Но и этот нехитрый прием сэкономил 2% памяти и на глобальных переменных 6% динамической памяти Меги. Уже супер!

Отправлено спустя 23 минуты 35 секунд:
И, пока не ушел, еще попытаю Вашего терпения :)
Где-то читал, но не могу найти сейчас подробностей, что передача текста на панель - ресурсоёмкая задача, и, если нужно отправить ту же температуру, лучше это сделать числом.
Например, чтобы вывести на дисплей "Температура 25С", лучше сделать три элемента на панели "Температура", "25" и "С" и обновлять лишь числом, или отправить готовой строкой из ардуино в единственный элемент?

Отправлено спустя 27 минут :
Хм, а можно как-то упаковать данные с разных плат программы на разные экраны панели, чтобы упростить общение с панелью?
Например, есть пять лампочек. Управляются лампочки из разных кусков программы.
Но можно же их сложить суммой строк в одну и передать хоть тем же текстом "11001", где каждое знакоместо - признак работы лампочки на панели. А в самой панели как-то разбирать, что к чему.
Это мое ламерское видение, а грамотное решение существует? Вариант с предыдущей страницы на этапе расшифровки и громоздок для 5 лампочек.

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

Панель Nextion

#313

Сообщение grin-mpx » 25.07.2018{, 17:52}

Да. Такой способ есть. На панель отсылается к примеру в текстовом виде 1160, там-же разбирается на символы и согласно символа по условию записывается в нужные ячейки. Я так делал недельный термостат, на 1 странице 35 ячеек , каждая из них может принимать 6 значений. Одна переменная обслуживала 1 день Я сейчас не у компьютера, как только будет возможнось выложу пример.
Последний раз редактировалось grin-mpx 25.07.2018{, 17:56}, всего редактировалось 1 раз.

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

Панель Nextion

#314

Сообщение Alias » 25.07.2018{, 17:54}

Разобрался с Вашим примером с отправкой двух переменных. Попробую. Хорошая идея, кстати!
Пример тоже поможет, спасибо! Чувствую, и там все элементарно.
Хотя, чтобы был толк, придется придумать вариант обратной отправки значений. У меня есть четыре экрана с вводом до десятка корректируемых параметров не тяжелее типа byte. И нужно не только их вывести на экран, но и обратно передать.

Отправлено спустя 38 минут 14 секунд:
Вижу, как вариант, работу на том же принципе
if(sinhro.indSin.txt=="#1")
{
page0.t0.txt=sinhro.sinVal.txt
sinhro.indSin.txt="#0"
когда при входе на страницу редактирования параметров по изменению id текущей страницы данные будут единовременно отправлены на экран.
После корректировки всех значений на экране, по условию нажатия на кнопку Save данные точно так же будут переданы обратно, но уже другим таймером.
Но если можно как-то разбирать пусть и длинную, до 20 символов, но одну строчку, то это, как мне кажется, будет гораздо надежнее. Что-то я опасаюсь потери данных при мультиплексировании в 100мс. У меня, видимо, в порту шум такой, что можно и половину не расслышать.

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

Панель Nextion

#315

Сообщение grin-mpx » 25.07.2018{, 19:34}

Вот пример работы трех индикаторов включения чего-то там из одной строковой переменной. В ардуине значение 3х байтовых переменных (0 или 1) конвертируется в строку для конкретной переменной на дисплее. На дисплее таймер разбирает строку по символам (с 1 по 3) и перезаписывает результат в строковые переменные, после чего по условию включает или выключает индикатор.
peremennaya.flp
(208.87 КБ) 121 скачивание
peremennaya.HMI
(18.62 КБ) 127 скачиваний

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

Панель Nextion

#316

Сообщение Alias » 25.07.2018{, 20:54}

Спасибо! Этот вариант даже проще в ряде случаев, по крайней мере для изменения атрибутов - самое то. С числами посложнее, ведь если вместо двухразрядного значения придет на суммирование строк одноразрядное - стройные ряды поплывут.
А где можно почитать, что за команды такие используются в панели? Может, разберусь и что-то свое напишу. Вроде бы, с Вашей подачей, несложно и очевидно.

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

Панель Nextion

#317

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

В 95% случаев по запросу .... Nextion Гугл предлагает http://support.iteadstudio.com
Я английского не знаю, по этому переводчик моё всё.
К примеру http://support.iteadstudio.com/support/ ... 1000062229

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

Панель Nextion

#318

Сообщение Alias » 26.07.2018{, 09:02}

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

Отправлено спустя 1 час 25 минут 11 секунд:
Возвращаясь к вопросу о быстродействии при передаче данных. Если число передать на панель проще и быстрее, чем строку, может, стоит пересылать тогда число? Те же системные переменные sys0, 1 и 2 имеют диапазон значений 0 ~ 4294967295, то есть можно одним числом передать пять двухзначных переменных, в данном случае 42, 94, 96, 72 и 95, с оговорками на переменные 42 и 95, разумеется. А атрибутов - вообще десять! В панели конвертировать число в строку и уже ее разбирать по частям. В flprog собрать и вовсе не проблема.
Проблема - отправить обратно :smile390:

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

Панель Nextion

#319

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

Не знаю, так не пробовал. Не думаю что разница в скорости передачи сильно большая. Как писалось выше, для повышения скорости обмена нужно делать изменения в библиотеке nextion.
Попробуйте для сравнения сделать счетчик и передать на панель 100 раз какую-то строку и так-же числовое значение. Сравните время и увидите результат.

Отправлено спустя 16 минут 6 секунд:
Вопрос скорости, это так-же вопрос организации самого проекта в флпрог. У меня данные передаются только при изменении и очень редко на текущей странице. Из 35 страниц на 4х или 5ти обновления в реалтайме, включая главную.
С таким раскладом скорость меня особо не беспокоит, не считая старта контроллера (включения) когда записываются все 50 параметров установок + состояния кнопок и пр.
Чтоб "разбавить" долгий старт, на первой странице сделал статус бар загрузки, получилось симпатично.

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

Панель Nextion

#320

Сообщение Alias » 26.07.2018{, 11:03}

Ну, это само собою разумеющееся. Однако, одно дело склеить пять десятичных чисел в одно через сумму/умножение, другое - сложение того же самого в тексте. Читал где-то, что это не сопоставимо про ресурсам. И, кажется, со строками дело плохо :smile37:

Ответить

Вернуться в «Дисплеи и индикаторы»