Разработки ecoins для дисплея Nextion

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#121

Сообщение WildCat » 09.12.2022{, 05:01}

Здравствуйте.

Благодаря проекту Vint более-менее разобрался.
Получилось передать данные с МК на Nxt. Но вот с передачей из Nxt в контроллер что-то не получается.
Не могли бы вы посмотреть, в чем дело?

Тестовый проект, просто передача состояния пары кнопок и числового значения.

Дисплей повесил на 2 порт, serial0 ничем не занят. Хотел монитор порта запустить и переменные в него кидать, но почему-то не могу выбрать Serial0.
Вложения
test_esp_nextion_ecoins блоки.rar
(424.54 КБ) 26 скачиваний

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

Разработки ecoins для дисплея Nextion

#122

Сообщение Vint » 09.12.2022{, 14:06}

WildCat писал(а):
09.12.2022{, 05:01}
с передачей из Nxt в контроллер что-то не получается

у меня отправка организована при помощи двух переменных, возможно в этом проблема. Всё это было сделано по примерам Ecoins
int qntReg //--Кол-во отправляемых регистров(0xFF)
int qntByte //--Кол-во отправляемых байт(0xFF)

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#123

Сообщение WildCat » 09.12.2022{, 19:44}

А не может быть, что не передаёт из-за того, что и прием, и отправка в одном таймере прописаны? Или это не имеет значения?

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

Разработки ecoins для дисплея Nextion

#124

Сообщение Vint » 09.12.2022{, 20:21}

WildCat писал(а):
09.12.2022{, 19:44}
А не может быть, что...
так сваяйте второй таймер, так и ориентироваться в написанных скриптах проще. На данный момент проверить неначём, панельку увижу только недели через две.

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins для дисплея Nextion

#125

Сообщение ecoins » 09.12.2022{, 20:36}

WildCat писал(а):
09.12.2022{, 19:44}
А не может быть, что не передаёт из-за того, что и прием, и отправка в одном таймере прописаны? Или это не имеет значения?
Вряд ли. Прием в Nextion в фоновом режиме.
Попробую посмотреть Ваш пример, но на следующей неделе.

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#126

Сообщение WildCat » 09.12.2022{, 20:46}

Vint писал(а):
09.12.2022{, 20:21}
второй таймер
Вот сейчас занимаюсь. Попробую.
Vint писал(а):
09.12.2022{, 20:21}
панельку увижу только недели через две.
Вы из Москвы? Есть магазин, оф дилер много чего, в т.ч Nextion. И цены практически как на Али. Хотя они и отправить могут разными службами доставки.
ecoins писал(а):
09.12.2022{, 20:36}
Попробую посмотреть Ваш пример, но на следующей неделе.
Спасибо, жду.
Пока сам потыкаюсь.

Отправлено спустя 1 час 7 минут 6 секунд:
Перенос отправки в другой таймер ничего не дал, кроме изменения периодичности отправки (в приеме таймер 50мс, в передаче 100мс).

Но обратил внимание вот на это:

В таймере отправки:
// out10 -устанавливается по событиям (нажатие)

В другом окне на некоторых кнопках прописан этот параметр:
out10|=0x01
out10|=0x02

Мне эта конструкция непонятна.
Что должно быть, и как этот параметр задаётся?

У меня в отправке идёт назначение переменных:
out10=bt0.val
out11=bt1.val
out12=n4.val

Это состояние двух кнопок с фиксацией и вводимое на дисплее число.
Это неправильно?

Отправлено спустя 1 минуту 8 секунд:
И ещё непонятно что нужно прописывать в параметрах qntReg и qntByte.
Можете прояснить?

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins для дисплея Nextion

#127

Сообщение ecoins » 10.12.2022{, 04:53}

WildCat писал(а):
09.12.2022{, 21:54}
И ещё непонятно что нужно прописывать в параметрах qntReg и qntByte.
Можете прояснить?
Оба параметра равны кол-ву отправляемых байт. Два параметра - это дань протоколу ModBus - первый параметр=кол-во отправляемых переменных, второй параметр - количество байт в отправляемых байт.
Это для отправки байтовых переменных.
Можно отправлять и двух байтовые и четырех байтовые переменные, такая возможность реализована. Другое дело, что в Nextion в основном создаются байтовые переменные (слайдер и пр.)
WildCat писал(а):
09.12.2022{, 21:54}
В другом окне на некоторых кнопках прописан этот параметр:
out10|=0x01
out10|=0x02

В примере 4 кнопки и 4 переключателя, которые задают по нажатию(события) значения соотвествующих бит переменной out10. Приемы для кнопок и переключателей немного покопаются - посмотрите повнимательнее увидите.
Задача отправки блока переменных вызывается по таймеру. Отправка выполняется если было изменение какой-то из отправляемых переменной или 1 раз в сек.

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#128

Сообщение WildCat » 10.12.2022{, 05:14}

ecoins,
С горем пополам, я заставил передать данные от nxt в МК. Но как-то они очень странно передаются. Передал, но как это работает, не понял.
В блоке getnxt переменные в странном порядке. Нет переменой out00, с выхода v1 идёт out01.

Менял много параметров.
Не работают операции контроля изменения числа, и отправка изменённого значения происходит только по нажатию кнопки.
Я днём составлю вопросы с картинками что непонятно.

Блок getnxt имеет в настройках до 10 выходов. Ставлю 10, аив самом блоке появляется максимум 8.
В общем, вопросов по ходу дела много появилось.

И ещё странный момент.
Считаю количество циклов, простенькая плата, особо ничего нет. Аналоговый мультиплексор перебирает 8 значений и отправляет на один аналоговый вход МК. И регистр 595.
Количество циклов в секунду всего 5900. Как-то маловато.

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins для дисплея Nextion

#129

Сообщение ecoins » 10.12.2022{, 14:05}

WildCat писал(а):
10.12.2022{, 05:14}
С горем пополам, я заставил передать данные от nxt в МК. Но как-то они очень странно передаются. Передал, но как это работает, не понял.
В блоке getnxt переменные в странном порядке. Нет переменой out00, с выхода v1 идёт out01.
Имена из Nextion не связаны с регистрами контроллера. Передача данных из Nextion в контроллер реализован по протоколу похожий на ModBus. B Nextion при формировании пакета для отправки указывается тип массива (код функции 06=байтовый, 16=слово 16-разрядное, 26=двойное слово 32 разряда) и адрес(номер регистра) в соответствующем массиве(их три uint8_t, uint16_t,uint32_t), размеры массивов по умолчанию 10,5,2 и могут быть изменены в настройке блока.
Некоторая информация под спойлером.
СпойлерПоказать
API_NEXT_001_Руководства.hpp
(4.26 КБ) 25 скачиваний
API_NEXT_100_struct.hpp
(12.31 КБ) 20 скачиваний
WildCat писал(а):
10.12.2022{, 05:14}
Не работают операции контроля изменения числа, и отправка изменённого значения происходит только по нажатию кнопки.
По изменению и 1 раз в сек, если сделаете как у нас в примере.
WildCat писал(а):
10.12.2022{, 05:14}
Блок getnxt имеет в настройках до 10 выходов. Ставлю 10, аив самом блоке появляется максимум 8.

Это проверю. Но Вы можете ставить сколько угодно блоков выбирая тип переменной и с какого адреса выводить параметры и сколько выводить.
WildCat писал(а):
10.12.2022{, 05:14}
Считаю количество циклов, простенькая плата, особо ничего нет. Аналоговый мультиплексор перебирает 8 значений и отправляет на один аналоговый вход МК. И регистр 595.
Количество циклов в секунду всего 5900. Как-то маловато.
Какой контроллер и как меряете кол-во циклов. Пришлите проект, после выходных попробую посмотреть, пока не успеваю доделать текущую работу.
----------
Спасибо, за то, что пытаетесь разобраться с нашими разработками, вместе у нас получится лучше.

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#130

Сообщение WildCat » 10.12.2022{, 19:25}

ecoins писал(а):
10.12.2022{, 14:05}
(код функции 06=байтовый, 16=слово 16-разрядное, 26=двойное слово 32 разряда
...
API_NEXT_001_Руководства.hpp
API_NEXT_100_struct.hpp
С этим стало чуть понятнее.
ecoins писал(а):
10.12.2022{, 14:05}
По изменению и 1 раз в сек, если сделаете как у нас в примере.
Ваш пример дисплея в первом сообщении - дубль файла flprog, я говорил об этом.

Сделал по примеру Vint, затем сделал по инструкции из ранее приложенного файла из поста viewtopic.php?f=72&t=6943&start=100#p118606
Пример VintПоказать
// Проверка на изменение переменных
//---------------------------------------------------------------------------------------------------
sys0=0
//------
if(ago00!=out00)
{
sys0++
ago00=out00
}
if(ago01!=out01)
{
sys0++
ago01=out01
}
// Организация вывода данных в UART
// Функция вызывается по таймеру с периодичностью 100 mc
// Если на странице есть измененные данне (fg>0) или прошла 1 сек с последнего вывода (cntTm>=10),
// то в микроконтроллер в пакете отправляются данные с текущей страницы.
//==================================================================
cntPack++ //--Увеличение число входов;
if(cntPack>=10)
{
sys0++
}
//-----------------------------------------------------------------------------------------------------------------------
if(sys0>0) //--Проверка флага свежих данных(sys>0) и тайм-аута вывода 1 сек (cnt>=10)
//if(cmdPack>0) //--Проверка команды отправки (по изменению или 1 раз в сек)
{
... далее формирование пакета отправки
Делал этот кусок по Вашему примеру:
Пример EcoinsПоказать
//=================================================================================================
// 2.ПРОВЕРКА НА ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ outxx
//=================================================================================================
if(ago00!=out00)
{
cmdPack=2
ago00=out00
}
//------
if(ago01!=out01)
{
cmdPack=2
ago01=out01
}
if(ago02!=out02)
{
cmdPack=2
ago02=out02
}

//=================================================================================================
// 3.ПРОВЕРКА НА ДОСТИЖЕНИЕ ВРЕМЕНИ 1 СЕК ПРИ ОТСУТСТВИИ ИЗМЕНЕНИЯ outxx
//=================================================================================================
cntPack++
if(cntPack>=10)
{
cmdPack=1
}
//=================================================================================================
// 4.ОТПРАВКА ПЕРЕМЕННЫХ В MCU
//=================================================================================================
if(cmdPack>0) //--Проверка команды отправки (по изменению или 1 раз в сек)
{
... далее формирование пакета отправки
не работает ни один, ни второй метод.

Методом "тыка" выяснил, что отправка числа осуществляется по нажатию на экране кнопки.

У меня передается всего 2 параметра (сейчас добавил третий, просто статичная цифра, чтоб видеть хоть что-то в UART):
b0, b1 И n4
Скриншот 10-12-2022 180420.jpg

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

b0,  Touch Press Event: out00|=0x01
b0,  Touch Release Event: out00|=0xFE

b1,  Touch Press Event: out00|=0x02
b1,  Touch Release Event: out00|=0xFD
(Это я сделал по примеру Vint), т.к. не понял этого (в коде таймера отправки):

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

// out10 -устанавливается по событиям (нажатие)
Нашел в программе Vint переменную Out0 и сделал подобно.

число n4.val - вводимое к клавиатуры дисплея число.

Так вот, в Debug Nxt видно, что переменные передаются при изменении, но контроллер принимает эти значения только при нажатии на кнопку b0 (если установлена передача двух регистров) или b1 (если установлена передача трех регистров)
Скриншот 10-12-2022 184640.jpg
Далее.
у меня сейчас передается три регистра.
1- состояние кнопок
2 - вводимое с клавиатуры чсисло
3 - статичное число "8" (ни к чему не привязано, просто 8)

в порту смотрю что контроллер получает:
Скриншот 10-12-2022 180553.jpg
Скриншот 10-12-2022 180553.jpg (32.77 КБ) 669 просмотров
По факту, поучается что в блоке get.NXT:
v8.1= число с клавиатуры
v8.2=8 (статичное число)
v8.3=0 (отсутствуют данные)

где состояния кнопок, если в мониторе дебага эти данные есть? Непонятно.

Дальше.
мне не совсем понятно вот это:

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

 qnt=2                 //--Кол-во отправляемых регистров
  //  qntByte=3        //--Кол-во отправляемых байт
игрался с числом передаваемых регистров, и передаваемых байт. От параметра qntByte по факту ничего не зависит. Это норма, или я что-то не то делаю? Строка закомментирована мною, т.к. ни на что не влияет.

Дальше.
Скриншот 10-12-2022 180245.jpg
Скриншот 10-12-2022 180245.jpg (13.34 КБ) 669 просмотров
вот эти блоки отправки.

правильно ли я понял, что параметр num - это порядковый номер переменной в отправке? По логике вроде так получается
Какие номера прописывать, когда будет несколько окон, и в каждом будет такая же посылка?
Или на вход nxt приходит ID текущего окна, и ваши блоки сами понимают, что пришла, к примеру, 5-я переменная из третьего окна?
Скриншот 10-12-2022 180306.jpg
вот это не понял, нужно пояснение. Здесь не совсем понятно, т.к. у меня по сути передается одна посылка от дисплея в контроллер.
Или это номер адреса посылки?

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

adr=1                //--Адрес первого отправляемого регистра
чем определяется и как назначается этот адрес? Он всегда =1, или от чего-то зависит?
Или он используется для передачи нескольких типов посылок? К примеру, посылки типа:
byte (06), adr=1,
word (16), adr=2,
Dword (26), adr=3?
(Очередность не имеет значения).
Соответственно, весь блок формирования посылки для каждого типа данных копируется с увеличением номера адреса?
Верно?

photo_2022-12-10_18-11-15.jpg
С количеством циклов немного подшаманил, стало чуть больше. Но всё равно для такой простой программы не много.
Сделал опрос платы с перебором 8 значений аналогового входа (у меня аналоговый мультиплексор шлет показания показания датчиков температуры на 1 аналоговый вход МК) с периодическим опросом: вкл 80мс, выкл 1000мс. И подкорректировал блок для 595 регистров (брал из этой темы viewtopic.php?t=885&start=40#p44127): там универсальный блок на 4шт 165 и 4 шт 595 регистра, оставил только 1шт 595.

Файл проекта прилагаю.
МК- Esp32
Disp - NX4832K035
Esp32_Nxt_Ecoins.rar
(225.8 КБ) 20 скачиваний
Отправлено спустя 8 минут 36 секунд:
ecoins писал(а):
10.12.2022{, 14:05}
как меряете кол-во циклов.
логику вычисления кол-ва циклов взял из этой темы viewtopic.php?f=187&t=7583&p=106457&hil ... 82#p106433
только считаю среднее за 10с.

skrickis
Рядовой
Сообщения: 86
Зарегистрирован: 05.02.2017{, 12:02}
Репутация: 9

Разработки ecoins для дисплея Nextion

#131

Сообщение skrickis » 10.12.2022{, 20:31}

WildCat писал(а):
10.12.2022{, 19:34}
вот это не понял, нужно пояснение.
Вложения
Desktop.rar
(1.14 МБ) 17 скачиваний
OUT.jpg
in.jpg

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins для дисплея Nextion

#132

Сообщение ecoins » 10.12.2022{, 20:38}

WildCat писал(а):
10.12.2022{, 19:34}
Так вот, в Debug Nxt видно, что переменные передаются при изменении, но контроллер принимает эти значения только при нажатии на кнопку b0 (если установлена передача двух регистров) или b1 (если установлена передача трех регистров)
Если подытожить, то получается, что не принимается посылка из одного байтового регистра. Попозже посмотрю в библитеке.
WildCat писал(а):
10.12.2022{, 19:34}
игрался с числом передаваемых регистров, и передаваемых байт. От параметра qntByte по факту ничего не зависит. Это норма, или я что-то не то делаю? Строка закомментирована мною, т.к. ни на что не влияет.
Посмотрю, но вообще в библиотеке контролируется число байт в посылке как в протоколе ModBus.
WildCat писал(а):
10.12.2022{, 19:34}
Дальше.

Скриншот 10-12-2022 180245.jpg (13.34 КБ) 20 просмотров
вот эти блоки отправки.
Да, это соответствует записи в созданные в Nextion регистры n0 и n1;
WildCat писал(а):
10.12.2022{, 19:34}
правильно ли я понял, что параметр num - это порядковый номер переменной в отправке? По логике вроде так получается
Какие номера прописывать, когда будет несколько окон, и в каждом будет такая же посылка?
Или на вход nxt приходит ID текущего окна, и ваши блоки сами понимают, что пришла, к примеру, 5-я переменная из третьего окна?
Номера глобальные для всех страниц, созданные переменные n0,n1 ... в секции program.c доступны на всех страницах.
WildCat писал(а):
10.12.2022{, 19:34}
КОД: ВЫДЕЛИТЬ ВСЁ

adr=1 //--Адрес первого отправляемого регистра
чем определяется и как назначается этот адрес? Он всегда =1, или от чего-то зависит?
В Вашем случае это элемент байтового массива контроллера с индексом [1] - соответсвенно на выходах элементы arr[1],arr[2],arr[3].
WildCat писал(а):
10.12.2022{, 19:34}
С количеством циклов немного подшаманил, стало чуть больше. Но всё равно для такой простой программы не много.
Посмотрю проект и постараюсь понять что тормозит.
WildCat писал(а):
10.12.2022{, 19:34}
логику вычисления кол-ва циклов взял из этой темы viewtopic.php?f=187&t=7583&p=106457&hil ... 82#p106433
только считаю среднее за 10с.
Расчет кол-ва циклов есть встроенный в диспетчер задач ecoins.

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#133

Сообщение WildCat » 10.12.2022{, 20:40}

еще момент.
если у меня qnt=3 (3 регистра отправляю же?), то вообще передача не проходит.
если стоит qnt=2, то проходит передача числа с клавиатуры и статичного числа, но после нажатия кнопки (b1, Touch Press Event: out00|=0x02)

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins для дисплея Nextion

#134

Сообщение ecoins » 10.12.2022{, 20:41}

skrickis писал(а):
10.12.2022{, 20:31}
WildCat писал(а): ↑Сегодня{, 16:34}
вот это не понял, нужно пояснение.
По последнему сообщению: в примере видимо блок(он еще в отладке) вывода системного времени из Nextion - работает на панелях с индексом 'P'.

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#135

Сообщение WildCat » 10.12.2022{, 20:43}

ecoins писал(а):
10.12.2022{, 20:38}
Номера глобальные для всех страниц, созданные переменные n0,n1 ... в секции program.c доступны на всех страницах.
по сути, сквозная нумерация, а разделение по страницам in01, in02..... in11, in12... in21, in22 и т .д - это условности?
ecoins писал(а):
10.12.2022{, 20:38}
Расчет кол-ва циклов есть встроенный в диспетчер задач ecoins.
мне бы пока с одной задачей разобраться, прежде чем вникать в Ваши другие разработки.

Отправлено спустя 11 минут 38 секунд:
skrickis писал(а):
10.12.2022{, 20:31}
ВЛОЖЕНИЯ
У меня по сути то же самое.
Out0 - v8.1
Out1 - v8.2
Out2 - v8.3

Но как-то не так работает.

Отправлено спустя 4 минуты 31 секунду:
ecoins писал(а):
10.12.2022{, 20:38}
получается, что не принимается посылка из одного байтового регистра. Попозже посмотрю в библитеке
Получается так.
Но я такую конструкцию из кнопок вставил лишь потому, что другие не работали вообще. Изначально были кнопки с фиксацией, и я отслеживал изменение их значений (0/1). В дебаге всё Ок, но контроллер не реагирует.

Отправлено спустя 8 минут 12 секунд:
И ещё вопрос.
Out0 обязательно делать как у меня сейчас?
Просто во всех примерах из этой темы вот это прописано

// out10 -устанавливается по событиям

И по факту, без этого вообще не работает

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins для дисплея Nextion

#136

Сообщение ecoins » 10.12.2022{, 22:06}

WildCat писал(а):
10.12.2022{, 21:08}
по сути, сквозная нумерация, а разделение по страницам in01, in02..... in11, in12... in21, in22 и т .д - это условности?
Да, это условность. Все переменные доступны со всех страниц Nextion.
WildCat писал(а):
10.12.2022{, 21:08}
И по факту, без этого вообще не работает
По факту работает, у нас на многих пультах. Ваш проект посмотрю и станет попонятней.

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#137

Сообщение WildCat » 10.12.2022{, 22:55}

Ура! Заработало!

Скопировал полностью Ваш текст из файла отправки данных в контроллер, изменил только имена и количество переменных.

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

Меня смутила надпись

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

// out10 -устанавливается по событиям
.

Теперь буду мучить несколько типов передаваемых данных.

Отправлено спустя 2 минуты 17 секунд:
skrickis писал(а):
10.12.2022{, 20:31}
ВЛОЖЕНИЯ
Ваш проект дисплея не компилируется.
В условиях отправки лишние циклы.

Отправлено спустя 2 часа 17 минут 35 секунд:
ecoins,
А как передать посылки разных типов данных? Например, byte и word?
Что-то и два таймера пытался задействовать, и в одном таймере в разделе отправки вставлял доп блок на отправку дополнительного пакета (0х16), и полностью весь код таймера дублировал, последовательно сначала byte отправляю, затем word, и номера адресов менял... В дебаге всё ок, в контроллер ничего не приходит.
В контроллере добавил блок get.Nxt v.16.

Пока не понимаю что нужно сделать.

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#138

Сообщение WildCat » 11.12.2022{, 02:22}

WildCat писал(а):
10.12.2022{, 19:34}
Блок getnxt имеет в настройках до 10 выходов. Ставлю 10, аив самом блоке появляется максимум 8.
Бага.
Если выбрать тип выводимого массива v16, то появляется 10 выходов. Меняю тип массива (при 10 выходах) на v8, два выхода пропадают.

Экспериментально установлено, что блок get.nxt v16 не работает.
Делаю на v8, данные принимаются, всё Ок. Меняю только тип данных (в блоке flprog и в nxt func=0x16), и всё, данные не принимаются. В дебаге всё Ок.

get.nxt v32 тоже не работает

Отправлено спустя 1 час 6 минут 57 секунд:
Еще один странный момент.

разбил отправку данных с nxt на два массива.
В каждом по 2 регистра.

код отправки:
СпойлерПоказать
// 4.ОТПРАВКА ПЕРЕМЕННЫХ В MCU
//=================================================================================================
if(cmdPack>0) //--Проверка команды отправки (по изменению или 1 раз в сек)
{
cmdPack=0 //--Очистка команды управления;
cntPack=0 //--Очистка счетчика времени;
head=0x3A //--Заголовок
func=0x06 //--Отправка нескольких регистров байтовых регистров
adr=1 //--Адрес первого отправляемого регистра
qntReg=2 //--Кол-во отправляемых регистров
qntByte=2 //--Кол-во отправляемых байт
crc=head //--Код заголовка (':') в КС
crc+=func //--Параметр func
crc+=adr //--Параметра adr
crc+=qntReg //-- Параметр qntReg
crc+=qntByte //-- Параметр qntByte
//----Добавление в crc передаваемых регистров----------------------------------------------------
crc+=out00
crc+=out01

// crc+=out02
// crc+=out03
//------------------------
crc=crc&0xFF //--Нормализация crc до байта:
//-----Вычисление crc с двумя дополнениями------------------------------------------------------
crc=0xFF-crc
crc+=1
crc&=0xFF
//-----Отправка посылки в UART-------------------------------------------------------------------
prints head,1 //--Отправка заголовка;
prints func,1 //--Отправка кода функции;
prints adr,1 //--Адрес записи
prints qntReg,1 //--Кол-во записываемых регистров;
prints qntByte,1 //--Кол-во отправляемых байт;
prints out00,1 //--Отправка байта регистра 1;
prints out01,1
//--Отправка байта регистра 2;
// prints out02,1 //--Отправка байта регистра 3;
// prints out03,1 //--Отправка байта регистра 4;
prints crc,1 //--Отправка байта crc;
printh FF FF FF //--Отправка кодов завершения посылки
//======================= Отправка второго пакета данных =======================
head=0x3A //--Заголовок
func=0x06 //--Отправка нескольких регистров байтовых регистров
adr=2 //--Адрес первого отправляемого регистра
qntReg=2 //--Кол-во отправляемых регистров
qntByte=2 //--Кол-во отправляемых байт
crc=head //--Код заголовка (':') в КС
crc+=func //--Параметр func
crc+=adr //--Параметра adr
crc+=qntReg //-- Параметр qntReg
crc+=qntByte //-- Параметр qntByte
//----Добавление в crc передаваемых регистров----------------------------------------------------
// crc+=out00
// crc+=out01
crc+=out02
crc+=out03

//------------------------
crc=crc&0xFF //--Нормализация crc до байта:
//-----Вычисление crc с двумя дополнениями------------------------------------------------------
crc=0xFF-crc
crc+=1
crc&=0xFF
//-----Отправка посылки в UART-------------------------------------------------------------------
prints head,1 //--Отправка заголовка;
prints func,1 //--Отправка кода функции;
prints adr,1 //--Адрес записи
prints qntReg,1 //--Кол-во записываемых регистров;
prints qntByte,1 //--Кол-во отправляемых байт;
// prints out00,1 //--Отправка байта регистра 1;
// prints out01,1 //--Отправка байта регистра 2;
prints out02,1 //--Отправка байта регистра 3;
prints out03,1
//--Отправка байта регистра 4;
prints crc,1 //--Отправка байта crc;
printh FF FF FF //--Отправка кодов завершения посылки
}
//========================================================================================
Nxt отправляет две посылки с разными адресами (adr=1 и adr=2), в дебаге все Ок
Скриншот 11-12-2022 031242.jpg
Переменные Out00 и Out01 передаются в пакете с адресом 1, Out02 и Out03 - в пакете с адресом 2

В железе же странно.
Скриншот 11-12-2022 030437.jpg
в первом блоке должны быть переменные Out00 и Out01, во втором - Out02 и Out03.
По факту в первом блоке переменные Out00, Out02 и Out03.
Во втором блоке Out02 и Out03
переменная Out01 потерялась.

Что не так?

Отправлено спустя 7 минут 33 секунды:
или это я накосячил? Адрес регистра adr=2 - это v8.2 ?

А как тогда увеличить количество передаваемых переменных? Какое соответствие между входом num блока get.nxt и параметрами отправки из nextion?
В моем случае вообще от числа на входе num блока get.nxt ничего не зависит. Там что 0, что 1, что 2 - обработка происходит одинаково.

Не понимаю :smile14:

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Разработки ecoins для дисплея Nextion

#139

Сообщение ecoins » 11.12.2022{, 04:36}

WildCat писал(а):
11.12.2022{, 03:37}
Бага.
Если выбрать тип выводимого массива v16, то появляется 10 выходов. Меняю тип массива (при 10 выходах) на v8, два выхода пропадают.
Поправим.
WildCat писал(а):
11.12.2022{, 03:37}
Экспериментально установлено, что блок get.nxt v16 не работает.
WildCat писал(а):
11.12.2022{, 03:37}
get.nxt v32 тоже не работает
Мы их не тестировали. Поправим,
WildCat писал(а):
11.12.2022{, 03:37}
Делаю на v8, данные принимаются, всё Ок
Отлично.
WildCat писал(а):
11.12.2022{, 03:37}
Меняю только тип данных (в блоке flprog и в nxt func=0x16), и всё, данные не принимаются. В дебаге всё Ок.
Странно, но проверим.
WildCat писал(а):
11.12.2022{, 03:37}
По факту в первом блоке переменные Out00, Out02 и Out03.
Во втором блоке Out02 и Out03
переменная Out01 потерялась.

Что не так?
Все так.
В первой посылке Вы пишите в контроллер с адреса 1->arr[1]=0ut00; arr[2]=Out01;
Во второй посылке Вы пишите в контроллер с адреса 2-> arr[2]=Out02; arr[3]=Out03;
То есть затираете Out01.
WildCat писал(а):
11.12.2022{, 03:37}
А как тогда увеличить количество передаваемых переменных? Какое соответствие между входом num блока get.nxt и параметрами отправки из nextion?
В моем случае вообще от числа на входе num блока get.nxt ничего не зависит. Там что 0, что 1, что 2 - обработка происходит одинаково.
Передавать из Nextion Вы можете отправлять сколько угодно байтовых переменных, а вот контроллер при настройках по умолчанию примет только байтовые переменные с адресами 0-9, т.е. только 10 переменных.
Требуемое количество переменных в контроллере устанавливается в блоку direct.nxt.
============
По сути у Вас все получилось.
Получение переменных в контроллере организовано как в протоколе ModBus(с некоторыми расширениями типов переменных).

WildCat
Лейтенант
Сообщения: 425
Зарегистрирован: 04.06.2022{, 04:14}
Репутация: 48
Имя: Михаил

Разработки ecoins для дисплея Nextion

#140

Сообщение WildCat » 11.12.2022{, 04:50}

ecoins писал(а):
11.12.2022{, 04:36}
То есть затираете Out01.
То есть, после я уже понял в чем косяк, ясно, спасибо.
ecoins писал(а):
11.12.2022{, 04:36}
Требуемое количество переменных в контроллере устанавливается в блоку direct.nxt.
Параметр "размер массива"?
Не работает (

То есть, последовательно в данной реализации нельзя никак увеличить количество выходов? Типа как в сдвиговых регистрах, переносом?

С передачей кучи бит (зашитых в байт) понятно, но мне нужно числа передавать, причем многие выходят за рамки размерности byte.

А когда можно ожидать исправленные блоки?

Отправлено спустя 2 минуты 12 секунд:
И всё же, что значит параметр num на входе в блок get.nxt? Как его использовать и на что он влияет?

Ответить

Вернуться в «Команда ecoins»