ecoins писал(а): 10 дек 2022, 14:05
(код функции 06=байтовый, 16=слово 16-разрядное, 26=двойное слово 32 разряда
...
API_NEXT_001_Руководства.hpp
API_NEXT_100_struct.hpp
С этим стало чуть понятнее.
ecoins писал(а): 10 дек 2022, 14:05
По изменению и 1 раз в сек, если сделаете как у нас в примере.
Ваш пример дисплея в первом сообщении - дубль файла 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
Скриншот 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
По факту, поучается что в блоке get.NXT:
v8.1= число с клавиатуры
v8.2=8 (статичное число)
v8.3=0 (отсутствуют данные)
где состояния кнопок, если в мониторе дебага эти данные есть? Непонятно.
Дальше.
мне не совсем понятно вот это:
Код: Выделить всё
qnt=2 //--Кол-во отправляемых регистров
// qntByte=3 //--Кол-во отправляемых байт
игрался с числом передаваемых регистров, и передаваемых байт. От параметра qntByte по факту ничего не зависит. Это норма, или я что-то не то делаю? Строка закомментирована мною, т.к. ни на что не влияет.
Дальше.
Скриншот 10-12-2022 180245.jpg
вот эти блоки отправки.
правильно ли я понял, что параметр
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
Отправлено спустя 8 минут 36 секунд:
ecoins писал(а): 10 дек 2022, 14:05
как меряете кол-во циклов.
логику вычисления кол-ва циклов взял из этой темы
viewtopic.php?f=187&t=7583&p=106457&hil ... 82#p106433
только считаю среднее за 10с.