Панель Nextion
Панель Nextion
Доброго здравия, Коллеги!
Имею панель NX8048K070. Появилось пару вопросов.
Кто нибудь пользовался переменными ”thsp” и ”thup”? У меня панель нЕ засыпает если открыта страница с приписанной инструкцией. Если открыть другую страницу, всё чётко отключается.
Адресация в панели. Для сохранения переменных применяются команды wepo и repo, каждая использует 4 байта (numeric value length: is 4 bytes…). Значит при записи в нулевую ячейку будут заняты адреса с 0 по 3. В приложенном демо, при записи в четвёртую ячейку, изменяются и младшие адреса.
Это мои ляпы или особенности работы панели?
Имею панель NX8048K070. Появилось пару вопросов.
Кто нибудь пользовался переменными ”thsp” и ”thup”? У меня панель нЕ засыпает если открыта страница с приписанной инструкцией. Если открыть другую страницу, всё чётко отключается.
Адресация в панели. Для сохранения переменных применяются команды wepo и repo, каждая использует 4 байта (numeric value length: is 4 bytes…). Значит при записи в нулевую ячейку будут заняты адреса с 0 по 3. В приложенном демо, при записи в четвёртую ячейку, изменяются и младшие адреса.
Это мои ляпы или особенности работы панели?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
Неожиданно много ушло памяти на несложный проект в связке в панелью, IDE ругается. Видимо, это красота требует жертв.
В частности, хочется менять атрибуты элементов, а их много: это и цвет изменяющихся параметров, то есть рост - красный, снижение - синий, серый - если неактивна целая группа параметров технологического процесса. Приходится на каждый из них использовать блок "Задать параметр", то есть, по сути, отправлять один параметр десятку элементов на панели.
А можно ли передать этот единственный параметр системной переменной самой Nextion и чтобы из нее читались атрибуты элементов?
Я пока так и не нашел решения.
Спасибо!
В частности, хочется менять атрибуты элементов, а их много: это и цвет изменяющихся параметров, то есть рост - красный, снижение - синий, серый - если неактивна целая группа параметров технологического процесса. Приходится на каждый из них использовать блок "Задать параметр", то есть, по сути, отправлять один параметр десятку элементов на панели.
А можно ли передать этот единственный параметр системной переменной самой Nextion и чтобы из нее читались атрибуты элементов?
Я пока так и не нашел решения.
Спасибо!
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель Nextion
Поставьте на каждой из страниц (где будут меняться атрибуты) таймер с кодом который будет опрашивать единственную переменную,ту, которая от ардуины будет получать значение этого атрибута и соответсвенно менять его состояние.Alias писал(а): 25 июл 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 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
И можно все элементы тут прописать, то есть
if (page0.color.val=10)
{
t0.pco=63488;
t1...=63488;
t2 =63488;
и так далее?
}
Спасибо! Попробую! Правда, методом научного тыка. Должен попасть.
if (page0.color.val=10)
{
t0.pco=63488;
t1...=63488;
t2 =63488;
и так далее?
}
Спасибо! Попробую! Правда, методом научного тыка. Должен попасть.
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель Nextion
Да. Только все элементы именно этой страницы. Желательно.
Отправлено спустя 10 минут 19 секунд:
Еще, если Вы хотите заглянуть в переменную или изменить что-то на текущей странице, то можно писать без указания страницы;
if (color.val=10)
{
t0.pco=63488;
}
а если смотрите-меняете не на текущей, то обязательно перед переменной указываете название страницы;
if (page0.color.val=10)
{
page1.t0.txt="256";
}
Самое хреновое в Nextion IDE, это невозможность определить где ошибка если при компиляции таковая имеется. Указывается только имя и всё.
Нет ни страницы, ни причины, короче ничего. По этому я чуть-ли не после каждого изменения компилирую. Иначе можно далеко зайти и искать проблему вечно
Отправлено спустя 10 минут 19 секунд:
Еще, если Вы хотите заглянуть в переменную или изменить что-то на текущей странице, то можно писать без указания страницы;
if (color.val=10)
{
t0.pco=63488;
}
а если смотрите-меняете не на текущей, то обязательно перед переменной указываете название страницы;
if (page0.color.val=10)
{
page1.t0.txt="256";
}
Самое хреновое в Nextion IDE, это невозможность определить где ошибка если при компиляции таковая имеется. Указывается только имя и всё.
Нет ни страницы, ни причины, короче ничего. По этому я чуть-ли не после каждого изменения компилирую. Иначе можно далеко зайти и искать проблему вечно

- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
Уфф... Тяжко вникать в то, чего не понимаешь, плюс пресловутый синтаксис, на который столько нареканий... Я и слов таких не знаю, но пытаюсь разобраться самостоятельно и уже потом спрашивать. Спасибо за подсказки, сейчас попробую и это, но пока наткнулся на ошибки. Панель принимает
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
}
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 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель Nextion
Да, знак ревенства это == , присвоение это =, тут я накосячил 

Последний раз редактировалось grin-mpx 25 июл 2018, 16:20, всего редактировалось 1 раз.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
Спасибо! Ушел лопатить код
Но и этот нехитрый прием сэкономил 2% памяти и на глобальных переменных 6% динамической памяти Меги. Уже супер!
Отправлено спустя 23 минуты 35 секунд:
И, пока не ушел, еще попытаю Вашего терпения
Где-то читал, но не могу найти сейчас подробностей, что передача текста на панель - ресурсоёмкая задача, и, если нужно отправить ту же температуру, лучше это сделать числом.
Например, чтобы вывести на дисплей "Температура 25С", лучше сделать три элемента на панели "Температура", "25" и "С" и обновлять лишь числом, или отправить готовой строкой из ардуино в единственный элемент?
Отправлено спустя 27 минут :
Хм, а можно как-то упаковать данные с разных плат программы на разные экраны панели, чтобы упростить общение с панелью?
Например, есть пять лампочек. Управляются лампочки из разных кусков программы.
Но можно же их сложить суммой строк в одну и передать хоть тем же текстом "11001", где каждое знакоместо - признак работы лампочки на панели. А в самой панели как-то разбирать, что к чему.
Это мое ламерское видение, а грамотное решение существует? Вариант с предыдущей страницы на этапе расшифровки и громоздок для 5 лампочек.

Отправлено спустя 23 минуты 35 секунд:
И, пока не ушел, еще попытаю Вашего терпения

Где-то читал, но не могу найти сейчас подробностей, что передача текста на панель - ресурсоёмкая задача, и, если нужно отправить ту же температуру, лучше это сделать числом.
Например, чтобы вывести на дисплей "Температура 25С", лучше сделать три элемента на панели "Температура", "25" и "С" и обновлять лишь числом, или отправить готовой строкой из ардуино в единственный элемент?
Отправлено спустя 27 минут :
Хм, а можно как-то упаковать данные с разных плат программы на разные экраны панели, чтобы упростить общение с панелью?
Например, есть пять лампочек. Управляются лампочки из разных кусков программы.
Но можно же их сложить суммой строк в одну и передать хоть тем же текстом "11001", где каждое знакоместо - признак работы лампочки на панели. А в самой панели как-то разбирать, что к чему.
Это мое ламерское видение, а грамотное решение существует? Вариант с предыдущей страницы на этапе расшифровки и громоздок для 5 лампочек.
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель Nextion
Да. Такой способ есть. На панель отсылается к примеру в текстовом виде 1160, там-же разбирается на символы и согласно символа по условию записывается в нужные ячейки. Я так делал недельный термостат, на 1 странице 35 ячеек , каждая из них может принимать 6 значений. Одна переменная обслуживала 1 день Я сейчас не у компьютера, как только будет возможнось выложу пример.
Последний раз редактировалось grin-mpx 25 июл 2018, 17:56, всего редактировалось 1 раз.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
Разобрался с Вашим примером с отправкой двух переменных. Попробую. Хорошая идея, кстати!
Пример тоже поможет, спасибо! Чувствую, и там все элементарно.
Хотя, чтобы был толк, придется придумать вариант обратной отправки значений. У меня есть четыре экрана с вводом до десятка корректируемых параметров не тяжелее типа byte. И нужно не только их вывести на экран, но и обратно передать.
Отправлено спустя 38 минут 14 секунд:
Вижу, как вариант, работу на том же принципе
if(sinhro.indSin.txt=="#1")
{
page0.t0.txt=sinhro.sinVal.txt
sinhro.indSin.txt="#0"
когда при входе на страницу редактирования параметров по изменению id текущей страницы данные будут единовременно отправлены на экран.
После корректировки всех значений на экране, по условию нажатия на кнопку Save данные точно так же будут переданы обратно, но уже другим таймером.
Но если можно как-то разбирать пусть и длинную, до 20 символов, но одну строчку, то это, как мне кажется, будет гораздо надежнее. Что-то я опасаюсь потери данных при мультиплексировании в 100мс. У меня, видимо, в порту шум такой, что можно и половину не расслышать.
Пример тоже поможет, спасибо! Чувствую, и там все элементарно.
Хотя, чтобы был толк, придется придумать вариант обратной отправки значений. У меня есть четыре экрана с вводом до десятка корректируемых параметров не тяжелее типа 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 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель Nextion
Вот пример работы трех индикаторов включения чего-то там из одной строковой переменной. В ардуине значение 3х байтовых переменных (0 или 1) конвертируется в строку для конкретной переменной на дисплее. На дисплее таймер разбирает строку по символам (с 1 по 3) и перезаписывает результат в строковые переменные, после чего по условию включает или выключает индикатор.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
Спасибо! Этот вариант даже проще в ряде случаев, по крайней мере для изменения атрибутов - самое то. С числами посложнее, ведь если вместо двухразрядного значения придет на суммирование строк одноразрядное - стройные ряды поплывут.
А где можно почитать, что за команды такие используются в панели? Может, разберусь и что-то свое напишу. Вроде бы, с Вашей подачей, несложно и очевидно.
А где можно почитать, что за команды такие используются в панели? Может, разберусь и что-то свое напишу. Вроде бы, с Вашей подачей, несложно и очевидно.
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель Nextion
В 95% случаев по запросу .... Nextion Гугл предлагает http://support.iteadstudio.com
Я английского не знаю, по этому переводчик моё всё.
К примеру http://support.iteadstudio.com/support/ ... 1000062229
Я английского не знаю, по этому переводчик моё всё.
К примеру http://support.iteadstudio.com/support/ ... 1000062229
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
Я вот это нагуглил, нужно вникать. Автор жаловался, что очень мало возможностей по работе со строками. Я тоже не понял, как там складывать в одну строку из разных переменных.
Отправлено спустя 1 час 25 минут 11 секунд:
Возвращаясь к вопросу о быстродействии при передаче данных. Если число передать на панель проще и быстрее, чем строку, может, стоит пересылать тогда число? Те же системные переменные sys0, 1 и 2 имеют диапазон значений 0 ~ 4294967295, то есть можно одним числом передать пять двухзначных переменных, в данном случае 42, 94, 96, 72 и 95, с оговорками на переменные 42 и 95, разумеется. А атрибутов - вообще десять! В панели конвертировать число в строку и уже ее разбирать по частям. В flprog собрать и вовсе не проблема.
Проблема - отправить обратно
Отправлено спустя 1 час 25 минут 11 секунд:
Возвращаясь к вопросу о быстродействии при передаче данных. Если число передать на панель проще и быстрее, чем строку, может, стоит пересылать тогда число? Те же системные переменные sys0, 1 и 2 имеют диапазон значений 0 ~ 4294967295, то есть можно одним числом передать пять двухзначных переменных, в данном случае 42, 94, 96, 72 и 95, с оговорками на переменные 42 и 95, разумеется. А атрибутов - вообще десять! В панели конвертировать число в строку и уже ее разбирать по частям. В flprog собрать и вовсе не проблема.
Проблема - отправить обратно

- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель Nextion
Не знаю, так не пробовал. Не думаю что разница в скорости передачи сильно большая. Как писалось выше, для повышения скорости обмена нужно делать изменения в библиотеке nextion.
Попробуйте для сравнения сделать счетчик и передать на панель 100 раз какую-то строку и так-же числовое значение. Сравните время и увидите результат.
Отправлено спустя 16 минут 6 секунд:
Вопрос скорости, это так-же вопрос организации самого проекта в флпрог. У меня данные передаются только при изменении и очень редко на текущей странице. Из 35 страниц на 4х или 5ти обновления в реалтайме, включая главную.
С таким раскладом скорость меня особо не беспокоит, не считая старта контроллера (включения) когда записываются все 50 параметров установок + состояния кнопок и пр.
Чтоб "разбавить" долгий старт, на первой странице сделал статус бар загрузки, получилось симпатично.
Попробуйте для сравнения сделать счетчик и передать на панель 100 раз какую-то строку и так-же числовое значение. Сравните время и увидите результат.
Отправлено спустя 16 минут 6 секунд:
Вопрос скорости, это так-же вопрос организации самого проекта в флпрог. У меня данные передаются только при изменении и очень редко на текущей странице. Из 35 страниц на 4х или 5ти обновления в реалтайме, включая главную.
С таким раскладом скорость меня особо не беспокоит, не считая старта контроллера (включения) когда записываются все 50 параметров установок + состояния кнопок и пр.
Чтоб "разбавить" долгий старт, на первой странице сделал статус бар загрузки, получилось симпатично.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
Ну, это само собою разумеющееся. Однако, одно дело склеить пять десятичных чисел в одно через сумму/умножение, другое - сложение того же самого в тексте. Читал где-то, что это не сопоставимо про ресурсам. И, кажется, со строками дело плохо 

- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Панель Nextion
Я, скорее всего, сделаю как проще, то есть текстом. Ибо, мои коллеги давно уже варят пиво в кастрюльках и на глаз, а я все изобретаю
Хотя мне интереснее сам процес поиска решений и собственного развития. А чистые культуры дрожжей в анабиозе никуда не спешат и могут подождать 
У меня четыре экрана ввода параметров.
На первый, к примеру, всякий раз при переходе на этот экран однократно пересылаются десять параметров. Сейчас они отправляются индивидуальными блоками и это занимает до трех секунд, видео из темы про кнопку Вы видели. Каждый параметр корректируется на экране и по нажатии на кнопку сохранения все параметры передаются обратно. Пока не выставил в таймере TOF 3 секунды, данные терялись и даже путались.
На других - почти то же самое.
Главный экран отображает цветом элементов активность технологических процессов, это меняется при старт/стопе, то есть редко, и эти тормоза на том же видео видно. Температура опрашивается на датчиках ежесекундно и при изменении передается на панель. При этом отображается и динамика изменения цветом. Прогресс в процентах - аналогично.
В общем, не перегруженная панель, но штатными блоками выполняется с тормозами, заметными даже не заточенному глазу. Хотелось бы оптимизировать. Первый шаг уже сделан, о чем вчера докладывал. В железе, правда, не испытал еще.


У меня четыре экрана ввода параметров.
На первый, к примеру, всякий раз при переходе на этот экран однократно пересылаются десять параметров. Сейчас они отправляются индивидуальными блоками и это занимает до трех секунд, видео из темы про кнопку Вы видели. Каждый параметр корректируется на экране и по нажатии на кнопку сохранения все параметры передаются обратно. Пока не выставил в таймере TOF 3 секунды, данные терялись и даже путались.
На других - почти то же самое.
Главный экран отображает цветом элементов активность технологических процессов, это меняется при старт/стопе, то есть редко, и эти тормоза на том же видео видно. Температура опрашивается на датчиках ежесекундно и при изменении передается на панель. При этом отображается и динамика изменения цветом. Прогресс в процентах - аналогично.
В общем, не перегруженная панель, но штатными блоками выполняется с тормозами, заметными даже не заточенному глазу. Хотелось бы оптимизировать. Первый шаг уже сделан, о чем вчера докладывал. В железе, правда, не испытал еще.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость