Разработки ecoins для дисплея Nextion
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
Здравствуйте.
Благодаря проекту [ref]Vint[/ref] более-менее разобрался.
Получилось передать данные с МК на Nxt. Но вот с передачей из Nxt в контроллер что-то не получается.
Не могли бы вы посмотреть, в чем дело?
Тестовый проект, просто передача состояния пары кнопок и числового значения.
Дисплей повесил на 2 порт, serial0 ничем не занят. Хотел монитор порта запустить и переменные в него кидать, но почему-то не могу выбрать Serial0.
Благодаря проекту [ref]Vint[/ref] более-менее разобрался.
Получилось передать данные с МК на Nxt. Но вот с передачей из Nxt в контроллер что-то не получается.
Не могли бы вы посмотреть, в чем дело?
Тестовый проект, просто передача состояния пары кнопок и числового значения.
Дисплей повесил на 2 порт, serial0 ничем не занят. Хотел монитор порта запустить и переменные в него кидать, но почему-то не могу выбрать Serial0.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Разработки ecoins для дисплея Nextion
у меня отправка организована при помощи двух переменных, возможно в этом проблема. Всё это было сделано по примерам Ecoins
int qntReg //--Кол-во отправляемых регистров(0xFF)
int qntByte //--Кол-во отправляемых байт(0xFF)
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
А не может быть, что не передаёт из-за того, что и прием, и отправка в одном таймере прописаны? Или это не имеет значения?
Разработки ecoins для дисплея Nextion
так сваяйте второй таймер, так и ориентироваться в написанных скриптах проще. На данный момент проверить неначём, панельку увижу только недели через две.
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Разработки ecoins для дисплея Nextion
Вряд ли. Прием в Nextion в фоновом режиме.WildCat писал(а): 09 дек 2022, 19:44 А не может быть, что не передаёт из-за того, что и прием, и отправка в одном таймере прописаны? Или это не имеет значения?
Попробую посмотреть Ваш пример, но на следующей неделе.
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
Вот сейчас занимаюсь. Попробую.
Вы из Москвы? Есть магазин, оф дилер много чего, в т.ч Nextion. И цены практически как на Али. Хотя они и отправить могут разными службами доставки.
Спасибо, жду.
Пока сам потыкаюсь.
Отправлено спустя 1 час 7 минут 6 секунд:
Перенос отправки в другой таймер ничего не дал, кроме изменения периодичности отправки (в приеме таймер 50мс, в передаче 100мс).
Но обратил внимание вот на это:
В таймере отправки:
// out10 -устанавливается по событиям (нажатие)
В другом окне на некоторых кнопках прописан этот параметр:
out10|=0x01
out10|=0x02
Мне эта конструкция непонятна.
Что должно быть, и как этот параметр задаётся?
У меня в отправке идёт назначение переменных:
out10=bt0.val
out11=bt1.val
out12=n4.val
Это состояние двух кнопок с фиксацией и вводимое на дисплее число.
Это неправильно?
Отправлено спустя 1 минуту 8 секунд:
И ещё непонятно что нужно прописывать в параметрах qntReg и qntByte.
Можете прояснить?
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Разработки ecoins для дисплея Nextion
Оба параметра равны кол-ву отправляемых байт. Два параметра - это дань протоколу ModBus - первый параметр=кол-во отправляемых переменных, второй параметр - количество байт в отправляемых байт.WildCat писал(а): 09 дек 2022, 21:54 И ещё непонятно что нужно прописывать в параметрах qntReg и qntByte.
Можете прояснить?
Это для отправки байтовых переменных.
Можно отправлять и двух байтовые и четырех байтовые переменные, такая возможность реализована. Другое дело, что в Nextion в основном создаются байтовые переменные (слайдер и пр.)
WildCat писал(а): 09 дек 2022, 21:54 В другом окне на некоторых кнопках прописан этот параметр:
out10|=0x01
out10|=0x02
В примере 4 кнопки и 4 переключателя, которые задают по нажатию(события) значения соотвествующих бит переменной out10. Приемы для кнопок и переключателей немного покопаются - посмотрите повнимательнее увидите.
Задача отправки блока переменных вызывается по таймеру. Отправка выполняется если было изменение какой-то из отправляемых переменной или 1 раз в сек.
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
[ref]ecoins[/ref],
С горем пополам, я заставил передать данные от nxt в МК. Но как-то они очень странно передаются. Передал, но как это работает, не понял.
В блоке getnxt переменные в странном порядке. Нет переменой out00, с выхода v1 идёт out01.
Менял много параметров.
Не работают операции контроля изменения числа, и отправка изменённого значения происходит только по нажатию кнопки.
Я днём составлю вопросы с картинками что непонятно.
Блок getnxt имеет в настройках до 10 выходов. Ставлю 10, аив самом блоке появляется максимум 8.
В общем, вопросов по ходу дела много появилось.
И ещё странный момент.
Считаю количество циклов, простенькая плата, особо ничего нет. Аналоговый мультиплексор перебирает 8 значений и отправляет на один аналоговый вход МК. И регистр 595.
Количество циклов в секунду всего 5900. Как-то маловато.
С горем пополам, я заставил передать данные от nxt в МК. Но как-то они очень странно передаются. Передал, но как это работает, не понял.
В блоке getnxt переменные в странном порядке. Нет переменой out00, с выхода v1 идёт out01.
Менял много параметров.
Не работают операции контроля изменения числа, и отправка изменённого значения происходит только по нажатию кнопки.
Я днём составлю вопросы с картинками что непонятно.
Блок getnxt имеет в настройках до 10 выходов. Ставлю 10, аив самом блоке появляется максимум 8.
В общем, вопросов по ходу дела много появилось.
И ещё странный момент.
Считаю количество циклов, простенькая плата, особо ничего нет. Аналоговый мультиплексор перебирает 8 значений и отправляет на один аналоговый вход МК. И регистр 595.
Количество циклов в секунду всего 5900. Как-то маловато.
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Разработки ecoins для дисплея Nextion
Имена из Nextion не связаны с регистрами контроллера. Передача данных из Nextion в контроллер реализован по протоколу похожий на ModBus. B Nextion при формировании пакета для отправки указывается тип массива (код функции 06=байтовый, 16=слово 16-разрядное, 26=двойное слово 32 разряда) и адрес(номер регистра) в соответствующем массиве(их три uint8_t, uint16_t,uint32_t), размеры массивов по умолчанию 10,5,2 и могут быть изменены в настройке блока.WildCat писал(а): 10 дек 2022, 05:14 С горем пополам, я заставил передать данные от nxt в МК. Но как-то они очень странно передаются. Передал, но как это работает, не понял.
В блоке getnxt переменные в странном порядке. Нет переменой out00, с выхода v1 идёт out01.
Некоторая информация под спойлером.
[spoiler] [/spoiler]
По изменению и 1 раз в сек, если сделаете как у нас в примере.WildCat писал(а): 10 дек 2022, 05:14 Не работают операции контроля изменения числа, и отправка изменённого значения происходит только по нажатию кнопки.
WildCat писал(а): 10 дек 2022, 05:14 Блок getnxt имеет в настройках до 10 выходов. Ставлю 10, аив самом блоке появляется максимум 8.
Это проверю. Но Вы можете ставить сколько угодно блоков выбирая тип переменной и с какого адреса выводить параметры и сколько выводить.
Какой контроллер и как меряете кол-во циклов. Пришлите проект, после выходных попробую посмотреть, пока не успеваю доделать текущую работу.WildCat писал(а): 10 дек 2022, 05:14 Считаю количество циклов, простенькая плата, особо ничего нет. Аналоговый мультиплексор перебирает 8 значений и отправляет на один аналоговый вход МК. И регистр 595.
Количество циклов в секунду всего 5900. Как-то маловато.
----------
Спасибо, за то, что пытаетесь разобраться с нашими разработками, вместе у нас получится лучше.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
С этим стало чуть понятнее.ecoins писал(а): 10 дек 2022, 14:05 (код функции 06=байтовый, 16=слово 16-разрядное, 26=двойное слово 32 разряда
...
API_NEXT_001_Руководства.hpp
API_NEXT_100_struct.hpp
Ваш пример дисплея в первом сообщении - дубль файла flprog, я говорил об этом.
Сделал по примеру [ref]Vint[/ref], затем сделал по инструкции из ранее приложенного файла из поста viewtopic.php?f=72&t=6943&start=100#p118606
[spoiler=Пример 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 раз в сек)
{
... далее формирование пакета отправки
[/spoiler]
Делал этот кусок по Вашему примеру:
[spoiler=Пример 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 раз в сек)
{
... далее формирование пакета отправки
[/spoiler]
не работает ни один, ни второй метод.
Методом "тыка" выяснил, что отправка числа осуществляется по нажатию на экране кнопки.
У меня передается всего 2 параметра (сейчас добавил третий, просто статичная цифра, чтоб видеть хоть что-то в UART):
b0, b1 И n4
Код: Выделить всё
b0, Touch Press Event: out00|=0x01
b0, Touch Release Event: out00|=0xFE
b1, Touch Press Event: out00|=0x02
b1, Touch Release Event: out00|=0xFD
Код: Выделить всё
// out10 -устанавливается по событиям (нажатие)
число n4.val - вводимое к клавиатуры дисплея число.
Так вот, в Debug Nxt видно, что переменные передаются при изменении, но контроллер принимает эти значения только при нажатии на кнопку b0 (если установлена передача двух регистров) или b1 (если установлена передача трех регистров) Далее.
у меня сейчас передается три регистра.
1- состояние кнопок
2 - вводимое с клавиатуры чсисло
3 - статичное число "8" (ни к чему не привязано, просто 8)
в порту смотрю что контроллер получает: По факту, поучается что в блоке get.NXT:
v8.1= число с клавиатуры
v8.2=8 (статичное число)
v8.3=0 (отсутствуют данные)
где состояния кнопок, если в мониторе дебага эти данные есть? Непонятно.
Дальше.
мне не совсем понятно вот это:
Код: Выделить всё
qnt=2 //--Кол-во отправляемых регистров
// qntByte=3 //--Кол-во отправляемых байт
Дальше. вот эти блоки отправки.
правильно ли я понял, что параметр num - это порядковый номер переменной в отправке? По логике вроде так получается
Какие номера прописывать, когда будет несколько окон, и в каждом будет такая же посылка?
Или на вход nxt приходит ID текущего окна, и ваши блоки сами понимают, что пришла, к примеру, 5-я переменная из третьего окна?
вот это не понял, нужно пояснение. Здесь не совсем понятно, т.к. у меня по сути передается одна посылка от дисплея в контроллер.
Или это номер адреса посылки?
Код: Выделить всё
adr=1 //--Адрес первого отправляемого регистра
Или он используется для передачи нескольких типов посылок? К примеру, посылки типа:
byte (06), adr=1,
word (16), adr=2,
Dword (26), adr=3?
(Очередность не имеет значения).
Соответственно, весь блок формирования посылки для каждого типа данных копируется с увеличением номера адреса?
Верно?
С количеством циклов немного подшаманил, стало чуть больше. Но всё равно для такой простой программы не много.
Сделал опрос платы с перебором 8 значений аналогового входа (у меня аналоговый мультиплексор шлет показания показания датчиков температуры на 1 аналоговый вход МК) с периодическим опросом: вкл 80мс, выкл 1000мс. И подкорректировал блок для 595 регистров (брал из этой темы viewtopic.php?t=885&start=40#p44127): там универсальный блок на 4шт 165 и 4 шт 595 регистра, оставил только 1шт 595.
Файл проекта прилагаю.
МК- Esp32
Disp - NX4832K035
Отправлено спустя 8 минут 36 секунд:
логику вычисления кол-ва циклов взял из этой темы viewtopic.php?f=187&t=7583&p=106457&hil ... 82#p106433
только считаю среднее за 10с.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сержант
- Сообщения: 159
- Зарегистрирован: 05 фев 2017, 12:02
- Благодарил (а): 4 раза
- Поблагодарили: 16 раз
Разработки ecoins для дисплея Nextion
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Разработки ecoins для дисплея Nextion
Если подытожить, то получается, что не принимается посылка из одного байтового регистра. Попозже посмотрю в библитеке.WildCat писал(а): 10 дек 2022, 19:34 Так вот, в Debug Nxt видно, что переменные передаются при изменении, но контроллер принимает эти значения только при нажатии на кнопку b0 (если установлена передача двух регистров) или b1 (если установлена передача трех регистров)
Посмотрю, но вообще в библиотеке контролируется число байт в посылке как в протоколе ModBus.WildCat писал(а): 10 дек 2022, 19:34 игрался с числом передаваемых регистров, и передаваемых байт. От параметра qntByte по факту ничего не зависит. Это норма, или я что-то не то делаю? Строка закомментирована мною, т.к. ни на что не влияет.
Да, это соответствует записи в созданные в Nextion регистры n0 и n1;WildCat писал(а): 10 дек 2022, 19:34 Дальше.
Скриншот 10-12-2022 180245.jpg (13.34 КБ) 20 просмотров
вот эти блоки отправки.
Номера глобальные для всех страниц, созданные переменные n0,n1 ... в секции program.c доступны на всех страницах.WildCat писал(а): 10 дек 2022, 19:34 правильно ли я понял, что параметр num - это порядковый номер переменной в отправке? По логике вроде так получается
Какие номера прописывать, когда будет несколько окон, и в каждом будет такая же посылка?
Или на вход nxt приходит ID текущего окна, и ваши блоки сами понимают, что пришла, к примеру, 5-я переменная из третьего окна?
В Вашем случае это элемент байтового массива контроллера с индексом [1] - соответсвенно на выходах элементы arr[1],arr[2],arr[3].WildCat писал(а): 10 дек 2022, 19:34 КОД: ВЫДЕЛИТЬ ВСЁ
adr=1 //--Адрес первого отправляемого регистра
чем определяется и как назначается этот адрес? Он всегда =1, или от чего-то зависит?
Посмотрю проект и постараюсь понять что тормозит.WildCat писал(а): 10 дек 2022, 19:34 С количеством циклов немного подшаманил, стало чуть больше. Но всё равно для такой простой программы не много.
Расчет кол-ва циклов есть встроенный в диспетчер задач ecoins.WildCat писал(а): 10 дек 2022, 19:34 логику вычисления кол-ва циклов взял из этой темы viewtopic.php?f=187&t=7583&p=106457&hil ... 82#p106433
только считаю среднее за 10с.
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
еще момент.
если у меня qnt=3 (3 регистра отправляю же?), то вообще передача не проходит.
если стоит qnt=2, то проходит передача числа с клавиатуры и статичного числа, но после нажатия кнопки (b1, Touch Press Event: out00|=0x02)
если у меня qnt=3 (3 регистра отправляю же?), то вообще передача не проходит.
если стоит qnt=2, то проходит передача числа с клавиатуры и статичного числа, но после нажатия кнопки (b1, Touch Press Event: out00|=0x02)
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Разработки ecoins для дисплея Nextion
По последнему сообщению: в примере видимо блок(он еще в отладке) вывода системного времени из Nextion - работает на панелях с индексом 'P'.skrickis писал(а): 10 дек 2022, 20:31 WildCat писал(а): ↑Сегодня{, 16:34}
вот это не понял, нужно пояснение.
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
по сути, сквозная нумерация, а разделение по страницам in01, in02..... in11, in12... in21, in22 и т .д - это условности?ecoins писал(а): 10 дек 2022, 20:38 Номера глобальные для всех страниц, созданные переменные n0,n1 ... в секции program.c доступны на всех страницах.
мне бы пока с одной задачей разобраться, прежде чем вникать в Ваши другие разработки.
Отправлено спустя 11 минут 38 секунд:
У меня по сути то же самое.
Out0 - v8.1
Out1 - v8.2
Out2 - v8.3
Но как-то не так работает.
Отправлено спустя 4 минуты 31 секунду:
Получается так.ecoins писал(а): 10 дек 2022, 20:38 получается, что не принимается посылка из одного байтового регистра. Попозже посмотрю в библитеке
Но я такую конструкцию из кнопок вставил лишь потому, что другие не работали вообще. Изначально были кнопки с фиксацией, и я отслеживал изменение их значений (0/1). В дебаге всё Ок, но контроллер не реагирует.
Отправлено спустя 8 минут 12 секунд:
И ещё вопрос.
Out0 обязательно делать как у меня сейчас?
Просто во всех примерах из этой темы вот это прописано
// out10 -устанавливается по событиям
И по факту, без этого вообще не работает
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Разработки ecoins для дисплея Nextion
Да, это условность. Все переменные доступны со всех страниц Nextion.WildCat писал(а): 10 дек 2022, 21:08 по сути, сквозная нумерация, а разделение по страницам in01, in02..... in11, in12... in21, in22 и т .д - это условности?
По факту работает, у нас на многих пультах. Ваш проект посмотрю и станет попонятней.
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
Ура! Заработало!
Скопировал полностью Ваш текст из файла отправки данных в контроллер, изменил только имена и количество переменных.
Я не понял, почему в предыдущие разы у меня это не работало, проверял каждую строчку по буквам.
И от кнопок с фиксацией байты приходят теперь.
Меня смутила надпись.
Теперь буду мучить несколько типов передаваемых данных.
Отправлено спустя 2 минуты 17 секунд:
В условиях отправки лишние циклы.
Отправлено спустя 2 часа 17 минут 35 секунд:
[ref]ecoins[/ref],
А как передать посылки разных типов данных? Например, byte и word?
Что-то и два таймера пытался задействовать, и в одном таймере в разделе отправки вставлял доп блок на отправку дополнительного пакета (0х16), и полностью весь код таймера дублировал, последовательно сначала byte отправляю, затем word, и номера адресов менял... В дебаге всё ок, в контроллер ничего не приходит.
В контроллере добавил блок get.Nxt v.16.
Пока не понимаю что нужно сделать.
Скопировал полностью Ваш текст из файла отправки данных в контроллер, изменил только имена и количество переменных.
Я не понял, почему в предыдущие разы у меня это не работало, проверял каждую строчку по буквам.
И от кнопок с фиксацией байты приходят теперь.
Меня смутила надпись
Код: Выделить всё
// out10 -устанавливается по событиям
Теперь буду мучить несколько типов передаваемых данных.
Отправлено спустя 2 минуты 17 секунд:
Ваш проект дисплея не компилируется.
В условиях отправки лишние циклы.
Отправлено спустя 2 часа 17 минут 35 секунд:
[ref]ecoins[/ref],
А как передать посылки разных типов данных? Например, byte и word?
Что-то и два таймера пытался задействовать, и в одном таймере в разделе отправки вставлял доп блок на отправку дополнительного пакета (0х16), и полностью весь код таймера дублировал, последовательно сначала byte отправляю, затем word, и номера адресов менял... В дебаге всё ок, в контроллер ничего не приходит.
В контроллере добавил блок get.Nxt v.16.
Пока не понимаю что нужно сделать.
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
Бага.WildCat писал(а): 10 дек 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 регистра.
код отправки:
[spoiler]
// 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 //--Отправка кодов завершения посылки
}
//========================================================================================
[/spoiler]
Nxt отправляет две посылки с разными адресами (adr=1 и adr=2), в дебаге все Ок
Переменные Out00 и Out01 передаются в пакете с адресом 1, Out02 и Out03 - в пакете с адресом 2
В железе же странно. в первом блоке должны быть переменные 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 - обработка происходит одинаково.
Не понимаю

У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Полковник
- Сообщения: 4012
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 158 раз
Разработки ecoins для дисплея Nextion
Поправим.WildCat писал(а): 11 дек 2022, 03:37 Бага.
Если выбрать тип выводимого массива v16, то появляется 10 выходов. Меняю тип массива (при 10 выходах) на v8, два выхода пропадают.
WildCat писал(а): 11 дек 2022, 03:37 Экспериментально установлено, что блок get.nxt v16 не работает.
Мы их не тестировали. Поправим,
Отлично.
Странно, но проверим.WildCat писал(а): 11 дек 2022, 03:37 Меняю только тип данных (в блоке flprog и в nxt func=0x16), и всё, данные не принимаются. В дебаге всё Ок.
Все так.WildCat писал(а): 11 дек 2022, 03:37 По факту в первом блоке переменные Out00, Out02 и Out03.
Во втором блоке Out02 и Out03
переменная Out01 потерялась.
Что не так?
В первой посылке Вы пишите в контроллер с адреса 1->arr[1]=0ut00; arr[2]=Out01;
Во второй посылке Вы пишите в контроллер с адреса 2-> arr[2]=Out02; arr[3]=Out03;
То есть затираете Out01.
Передавать из Nextion Вы можете отправлять сколько угодно байтовых переменных, а вот контроллер при настройках по умолчанию примет только байтовые переменные с адресами 0-9, т.е. только 10 переменных.WildCat писал(а): 11 дек 2022, 03:37 А как тогда увеличить количество передаваемых переменных? Какое соответствие между входом num блока get.nxt и параметрами отправки из nextion?
В моем случае вообще от числа на входе num блока get.nxt ничего не зависит. Там что 0, что 1, что 2 - обработка происходит одинаково.
Требуемое количество переменных в контроллере устанавливается в блоку direct.nxt.
============
По сути у Вас все получилось.
Получение переменных в контроллере организовано как в протоколе ModBus(с некоторыми расширениями типов переменных).
-
- Лейтенант
- Сообщения: 557
- Зарегистрирован: 04 июн 2022, 04:14
- Имя: Михаил
- Благодарил (а): 5 раз
- Поблагодарили: 9 раз
Разработки ecoins для дисплея Nextion
То есть, после я уже понял в чем косяк, ясно, спасибо.
Параметр "размер массива"?ecoins писал(а): 11 дек 2022, 04:36 Требуемое количество переменных в контроллере устанавливается в блоку direct.nxt.
Не работает (
То есть, последовательно в данной реализации нельзя никак увеличить количество выходов? Типа как в сдвиговых регистрах, переносом?
С передачей кучи бит (зашитых в байт) понятно, но мне нужно числа передавать, причем многие выходят за рамки размерности byte.
А когда можно ожидать исправленные блоки?
Отправлено спустя 2 минуты 12 секунд:
И всё же, что значит параметр num на входе в блок get.nxt? Как его использовать и на что он влияет?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей