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

ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Siberian писал(а): 14 фев 2025, 20:20
ecoins писал(а): 14 фев 2025, 20:16
Siberian писал(а): 14 фев 2025, 20:05

Извиняюсь. Случайно отправил не написав полностью.
Уже написал полностью своё прошение.
Бью челом. :)
Попробуйте связаться со мной через видео-формат - в таком режиме будет проще преодолеть барьер вхождения в этот необычный дисплей.
С уважением, ecoins.
Я прикрепил архив, там два файла flp nextion.
Это тестовый проект с кодом, там всё всё понятно для разбора.
Мне бы пример на основе моего тестового проекта, дальше постараюсь сам разобраться.
Заранее Благодарен !
Из панели вы отправляете в байтовый в массив(uint8_t).
В FLProg принимаете в массив integer.
Это разные массивы для данных разных типов.
Смените на тип массива byte(блок Next.Get).
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

ecoins писал(а): 14 фев 2025, 20:57
Siberian писал(а): 14 фев 2025, 20:20
ecoins писал(а): 14 фев 2025, 20:16
Попробуйте связаться со мной через видео-формат - в таком режиме будет проще преодолеть барьер вхождения в этот необычный дисплей.
С уважением, ecoins.
Я прикрепил архив, там два файла flp nextion.
Это тестовый проект с кодом, там всё всё понятно для разбора.
Мне бы пример на основе моего тестового проекта, дальше постараюсь сам разобраться.
Заранее Благодарен !
Из панели вы отправляете в байтовый в массив(uint8_t).
В FLProg принимаете в массив integer.
Это разные массивы для данных разных типов.
Смените на тип массива byte(блок Next.Get).
Попробовал по разному...
Гравицапа не заработала...
:( :( :(
У вас нет необходимых прав для просмотра вложений в этом сообщении.
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Siberian писал(а): 14 фев 2025, 21:13
ecoins писал(а): 14 фев 2025, 20:57 Из панели вы отправляете в байтовый в массив(uint8_t).
В FLProg принимаете в массив integer.
Это разные массивы для данных разных типов.
Смените на тип массива byte(блок Next.Get).
Попробовал по разному...
Гравицапа не заработала...
:( :( :(
1.У Вас очень не информативный тест.
2.Полезно отправлять что-то и в панель - например значение какого-то счетчика. Так Вы убедитесь в работе UART.
3.Далее хорошо бы посмотреть логическим анализатором(если он доступен) что происходит на шинах RX,TX. Или осцилографом.
4.Принятые значение из блока Next.Get лучше бы вывести на LCD i2c - меню слева средства отображения.
----
Будете иметь исходные данные для анализа работы Вашего устройства.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

Здравствуйте, Парни!
Благодаря образцу проекта и руководству от ecoins почти разобрался с таймером tmOut.
Из панели передаются данные в МК.
У меня пока остался один вопрос.
Не передается значение более 255 из панели в МК.
Подскажите пожалуйста, где нужно подправить?

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

//=================================================================================================
//          ОБРАБОТКА И ОТПРАВКА ПАРАМЕТРОВ В MCU
// 1.Функция вызывается периодически с периодом 100ms;
// 2.Во временных переменных(outxx) сохраняются выводимые параметры;
// 3.Проверяется изменение переменных outxx (с использованием переменных agoxx).
//   Если есть изменение, устанавливается значение cmdPack=2;
// 4.Проверяется счетчик cntPack>10 для контроля достижения 1сек.
//   Если cntPack>10, устанавливается значение cmdPack=1;
//=================================================================================================
//=================================================================================================
//       1.СОХРАНЕНИЕ ВЫВОДИМЫХ ПАРАМЕТРОВ В ПОЛЬЗОВАТЕЛЬСКИХ ПЕРЕМЕННЫХ outxx
//=================================================================================================
//out00=bt0.val
out10=n1.val
out11=n2.val
out12=n3.val
out13=n4.val
out14=n5.val
// out13 -устанавливается по событиям (нажатие) кнопки (4 с фиксацией, 4 без фиксации)
//=================================================================================================
//       2.ПРОВЕРКА НА ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ outxx
//=================================================================================================
if(ago10!=out10)
{
  cmdPack=2
  ago10=out10
}
//------
if(ago11!=out11)
{
  cmdPack=2
  ago11=out11
}
//------
if(ago12!=out12)
{
  cmdPack=2
  ago12=out12
}
//------
if(ago13!=out13)
{
  cmdPack=2
  ago13=out13
}
if(ago14!=out14)
{
  cmdPack=2
  ago14=out14
}
//=================================================================================================
//       3.ПРОВЕРКА НА ДОСТИЖЕНИЕ ВРЕМЕНИ 1 СЕК ПРИ ОТСУТСТВИИ ИЗМЕНЕНИЯ outxx
//=================================================================================================
cntPack++
if(cntPack>=10)
{
  cmdPack=1
}
//=================================================================================================
//       4.ОТПРАВКА ПЕРЕМЕННЫХ В MCU
//=================================================================================================
if(cmdPack>0)     //--Проверка команды отправки (по изменению или 1 раз в сек)
{
  cmdPack=0       //--Очистка команды управления;
  cntPack=0     //--Очистка счетчика времени;
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=1            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5        //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  //crc+=out00
  crc+=out10
  crc+=out11
  crc+=out12
  crc+=out13
  crc+=out14
  //------------------------
  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 out10,1    //--Отправка байта регистра 1;
  prints out11,1    //--Отправка байта регистра 2;
  prints out12,1    //--Отправка байта регистра 3;
  prints out13,1    //--Отправка байта регистра 4;
  prints out14,1    //--Отправка байта регистра 5;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
  //========================================================================
  //======================= Отправка второго пакета данных =======================
}
//=================================================================================================
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Siberian писал(а): 15 фев 2025, 13:12 Здравствуйте, Парни!
Благодаря образцу проекта и руководству от ecoins почти разобрался с таймером tmOut.
Из панели передаются данные в МК.
У меня пока остался один вопрос.
Не передается значение более 255 из панели в МК.
Подскажите пожалуйста, где нужно подправить?

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

//=================================================================================================
//          ОБРАБОТКА И ОТПРАВКА ПАРАМЕТРОВ В MCU
// 1.Функция вызывается периодически с периодом 100ms;
// 2.Во временных переменных(outxx) сохраняются выводимые параметры;
// 3.Проверяется изменение переменных outxx (с использованием переменных agoxx).
//   Если есть изменение, устанавливается значение cmdPack=2;
// 4.Проверяется счетчик cntPack>10 для контроля достижения 1сек.
//   Если cntPack>10, устанавливается значение cmdPack=1;
//=================================================================================================
//=================================================================================================
//       1.СОХРАНЕНИЕ ВЫВОДИМЫХ ПАРАМЕТРОВ В ПОЛЬЗОВАТЕЛЬСКИХ ПЕРЕМЕННЫХ outxx
//=================================================================================================
//out00=bt0.val
out10=n1.val
out11=n2.val
out12=n3.val
out13=n4.val
out14=n5.val
// out13 -устанавливается по событиям (нажатие) кнопки (4 с фиксацией, 4 без фиксации)
//=================================================================================================
//       2.ПРОВЕРКА НА ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ outxx
//=================================================================================================
if(ago10!=out10)
{
  cmdPack=2
  ago10=out10
}
//------
if(ago11!=out11)
{
  cmdPack=2
  ago11=out11
}
//------
if(ago12!=out12)
{
  cmdPack=2
  ago12=out12
}
//------
if(ago13!=out13)
{
  cmdPack=2
  ago13=out13
}
if(ago14!=out14)
{
  cmdPack=2
  ago14=out14
}
//=================================================================================================
//       3.ПРОВЕРКА НА ДОСТИЖЕНИЕ ВРЕМЕНИ 1 СЕК ПРИ ОТСУТСТВИИ ИЗМЕНЕНИЯ outxx
//=================================================================================================
cntPack++
if(cntPack>=10)
{
  cmdPack=1
}
//=================================================================================================
//       4.ОТПРАВКА ПЕРЕМЕННЫХ В MCU
//=================================================================================================
if(cmdPack>0)     //--Проверка команды отправки (по изменению или 1 раз в сек)
{
  cmdPack=0       //--Очистка команды управления;
  cntPack=0     //--Очистка счетчика времени;
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=1            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5        //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  //crc+=out00
  crc+=out10
  crc+=out11
  crc+=out12
  crc+=out13
  crc+=out14
  //------------------------
  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 out10,1    //--Отправка байта регистра 1;
  prints out11,1    //--Отправка байта регистра 2;
  prints out12,1    //--Отправка байта регистра 3;
  prints out13,1    //--Отправка байта регистра 4;
  prints out14,1    //--Отправка байта регистра 5;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
  //========================================================================
  //======================= Отправка второго пакета данных =======================
}
//=================================================================================================
1.Проще всего значения >255 (int16_t,int32_t) отправлять 2/4 байтами.
2.Предусмотрен обмен и 16/32-разрядными регистрами (коды команд 0x16,0x26):
if(z.func==0x06){if(z.qntByte!=z.qnt) {z.codeErr=60;} else {if((z.adr+z.qnt)> z.lenArrByte) {z.codeErr=61;}}}
if(z.func==0x16){if(z.qntByte!=(z.qnt*2)){z.codeErr=62;} else {if((z.adr+z.qnt)> z.lenArrWord) {z.codeErr=63;}}}
if(z.func==0x26){if(z.qntByte!=(z.qnt*4)){z.codeErr=64;} else {if((z.adr+z.qnt)> z.lenArrLong) {z.codeErr=65;}}}

но это пожалуй неудобнее.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

ecoins писал(а): 15 фев 2025, 16:24
Siberian писал(а): 15 фев 2025, 13:12 Здравствуйте, Парни!
Благодаря образцу проекта и руководству от ecoins почти разобрался с таймером tmOut.
Из панели передаются данные в МК.
У меня пока остался один вопрос.
Не передается значение более 255 из панели в МК.
Подскажите пожалуйста, где нужно подправить?

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

//=================================================================================================
//          ОБРАБОТКА И ОТПРАВКА ПАРАМЕТРОВ В MCU
// 1.Функция вызывается периодически с периодом 100ms;
// 2.Во временных переменных(outxx) сохраняются выводимые параметры;
// 3.Проверяется изменение переменных outxx (с использованием переменных agoxx).
//   Если есть изменение, устанавливается значение cmdPack=2;
// 4.Проверяется счетчик cntPack>10 для контроля достижения 1сек.
//   Если cntPack>10, устанавливается значение cmdPack=1;
//=================================================================================================
//=================================================================================================
//       1.СОХРАНЕНИЕ ВЫВОДИМЫХ ПАРАМЕТРОВ В ПОЛЬЗОВАТЕЛЬСКИХ ПЕРЕМЕННЫХ outxx
//=================================================================================================
//out00=bt0.val
out10=n1.val
out11=n2.val
out12=n3.val
out13=n4.val
out14=n5.val
// out13 -устанавливается по событиям (нажатие) кнопки (4 с фиксацией, 4 без фиксации)
//=================================================================================================
//       2.ПРОВЕРКА НА ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ outxx
//=================================================================================================
if(ago10!=out10)
{
  cmdPack=2
  ago10=out10
}
//------
if(ago11!=out11)
{
  cmdPack=2
  ago11=out11
}
//------
if(ago12!=out12)
{
  cmdPack=2
  ago12=out12
}
//------
if(ago13!=out13)
{
  cmdPack=2
  ago13=out13
}
if(ago14!=out14)
{
  cmdPack=2
  ago14=out14
}
//=================================================================================================
//       3.ПРОВЕРКА НА ДОСТИЖЕНИЕ ВРЕМЕНИ 1 СЕК ПРИ ОТСУТСТВИИ ИЗМЕНЕНИЯ outxx
//=================================================================================================
cntPack++
if(cntPack>=10)
{
  cmdPack=1
}
//=================================================================================================
//       4.ОТПРАВКА ПЕРЕМЕННЫХ В MCU
//=================================================================================================
if(cmdPack>0)     //--Проверка команды отправки (по изменению или 1 раз в сек)
{
  cmdPack=0       //--Очистка команды управления;
  cntPack=0     //--Очистка счетчика времени;
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=1            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5        //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  //crc+=out00
  crc+=out10
  crc+=out11
  crc+=out12
  crc+=out13
  crc+=out14
  //------------------------
  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 out10,1    //--Отправка байта регистра 1;
  prints out11,1    //--Отправка байта регистра 2;
  prints out12,1    //--Отправка байта регистра 3;
  prints out13,1    //--Отправка байта регистра 4;
  prints out14,1    //--Отправка байта регистра 5;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
  //========================================================================
  //======================= Отправка второго пакета данных =======================
}
//=================================================================================================
1.Проще всего значения >255 (int16_t,int32_t) отправлять 2/4 байтами.
2.Предусмотрен обмен и 16/32-разрядными регистрами (коды команд 0x16,0x26):
if(z.func==0x06){if(z.qntByte!=z.qnt) {z.codeErr=60;} else {if((z.adr+z.qnt)> z.lenArrByte) {z.codeErr=61;}}}
if(z.func==0x16){if(z.qntByte!=(z.qnt*2)){z.codeErr=62;} else {if((z.adr+z.qnt)> z.lenArrWord) {z.codeErr=63;}}}
if(z.func==0x26){if(z.qntByte!=(z.qnt*4)){z.codeErr=64;} else {if((z.adr+z.qnt)> z.lenArrLong) {z.codeErr=65;}}}

но это пожалуй неудобнее.
Я правильно понимаю, что в коде нужно заменить на

func=0x16 //--Отправка нескольких регистров байтовых регистров

prints qntReg,2 //--Кол-во записываемых регистров;
prints qntByte,2 //--Кол-во отправляемых байт;

А в МК поменять на integer
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Siberian писал(а): 15 фев 2025, 16:42
ecoins писал(а): 15 фев 2025, 16:24
Siberian писал(а): 15 фев 2025, 13:12 Здравствуйте, Парни!
Благодаря образцу проекта и руководству от ecoins почти разобрался с таймером tmOut.
Из панели передаются данные в МК.
У меня пока остался один вопрос.
Не передается значение более 255 из панели в МК.
Подскажите пожалуйста, где нужно подправить?

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

//=================================================================================================
//          ОБРАБОТКА И ОТПРАВКА ПАРАМЕТРОВ В MCU
// 1.Функция вызывается периодически с периодом 100ms;
// 2.Во временных переменных(outxx) сохраняются выводимые параметры;
// 3.Проверяется изменение переменных outxx (с использованием переменных agoxx).
//   Если есть изменение, устанавливается значение cmdPack=2;
// 4.Проверяется счетчик cntPack>10 для контроля достижения 1сек.
//   Если cntPack>10, устанавливается значение cmdPack=1;
//=================================================================================================
//=================================================================================================
//       1.СОХРАНЕНИЕ ВЫВОДИМЫХ ПАРАМЕТРОВ В ПОЛЬЗОВАТЕЛЬСКИХ ПЕРЕМЕННЫХ outxx
//=================================================================================================
//out00=bt0.val
out10=n1.val
out11=n2.val
out12=n3.val
out13=n4.val
out14=n5.val
// out13 -устанавливается по событиям (нажатие) кнопки (4 с фиксацией, 4 без фиксации)
//=================================================================================================
//       2.ПРОВЕРКА НА ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ outxx
//=================================================================================================
if(ago10!=out10)
{
  cmdPack=2
  ago10=out10
}
//------
if(ago11!=out11)
{
  cmdPack=2
  ago11=out11
}
//------
if(ago12!=out12)
{
  cmdPack=2
  ago12=out12
}
//------
if(ago13!=out13)
{
  cmdPack=2
  ago13=out13
}
if(ago14!=out14)
{
  cmdPack=2
  ago14=out14
}
//=================================================================================================
//       3.ПРОВЕРКА НА ДОСТИЖЕНИЕ ВРЕМЕНИ 1 СЕК ПРИ ОТСУТСТВИИ ИЗМЕНЕНИЯ outxx
//=================================================================================================
cntPack++
if(cntPack>=10)
{
  cmdPack=1
}
//=================================================================================================
//       4.ОТПРАВКА ПЕРЕМЕННЫХ В MCU
//=================================================================================================
if(cmdPack>0)     //--Проверка команды отправки (по изменению или 1 раз в сек)
{
  cmdPack=0       //--Очистка команды управления;
  cntPack=0     //--Очистка счетчика времени;
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=1            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5        //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  //crc+=out00
  crc+=out10
  crc+=out11
  crc+=out12
  crc+=out13
  crc+=out14
  //------------------------
  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 out10,1    //--Отправка байта регистра 1;
  prints out11,1    //--Отправка байта регистра 2;
  prints out12,1    //--Отправка байта регистра 3;
  prints out13,1    //--Отправка байта регистра 4;
  prints out14,1    //--Отправка байта регистра 5;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
  //========================================================================
  //======================= Отправка второго пакета данных =======================
}
//=================================================================================================
1.Проще всего значения >255 (int16_t,int32_t) отправлять 2/4 байтами.
2.Предусмотрен обмен и 16/32-разрядными регистрами (коды команд 0x16,0x26):
if(z.func==0x06){if(z.qntByte!=z.qnt) {z.codeErr=60;} else {if((z.adr+z.qnt)> z.lenArrByte) {z.codeErr=61;}}}
if(z.func==0x16){if(z.qntByte!=(z.qnt*2)){z.codeErr=62;} else {if((z.adr+z.qnt)> z.lenArrWord) {z.codeErr=63;}}}
if(z.func==0x26){if(z.qntByte!=(z.qnt*4)){z.codeErr=64;} else {if((z.adr+z.qnt)> z.lenArrLong) {z.codeErr=65;}}}

но это пожалуй неудобнее.
Я правильно понимаю, что в коде нужно заменить на

func=0x16 //--Отправка нескольких регистров байтовых регистров

prints qntReg,2 //--Кол-во записываемых регистров;
prints qntByte,2 //--Кол-во отправляемых байт;

А в МК поменять на integer
В целом да.
Кол-во передаваемых байт должно быть в два раза больше чем передаваемых регистров (1- регистр - 2 байта).
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

Поменял
func=0x06 на func=0x16
prints qntReg,1 на prints qntReg,2
prints qntByte,1 на prints qntByte,2

В МК (16) integer

Не заработало совсем.

Если Вас не затруднит, можете мне прям в моём коде исправить, который я выше выложил.
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Siberian писал(а): 15 фев 2025, 17:09 Поменял
func=0x06 на func=0x16
prints qntReg,1 на prints qntReg,2
prints qntByte,1 на prints qntByte,2

В МК (16) integer

Не заработало совсем.

Если Вас не затруднит, можете мне прям в моём коде исправить, который я выше выложил.
Заочно - не лучший путь. Обычно мы сразу видим на логическом анализаторе что передается, что доходит до контроллера, в принципе можно увидеть и код ошибок.
И еще раз повторю вопрос - а не проще ли передавать in16-t двумя байтами и на стороне контроллера преобразовывать два байта в int16?
В протоколе разные форматы данных были заложены изначально, но потом на практике стало понятно, что это как-бы избыточно и даже было планах убрать форматы int16,int32 (чтобы не отвлекали).
И еще вопрос - а какие данные формата int16 Вы передаете из панели? Наверное только то, что вводите в полях ввода?
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

ecoins писал(а): 15 фев 2025, 17:27
Siberian писал(а): 15 фев 2025, 17:09 Поменял
func=0x06 на func=0x16
prints qntReg,1 на prints qntReg,2
prints qntByte,1 на prints qntByte,2

В МК (16) integer

Не заработало совсем.

Если Вас не затруднит, можете мне прям в моём коде исправить, который я выше выложил.
Заочно - не лучший путь. Обычно мы сразу видим на логическом анализаторе что передается, что доходит до контроллера, в принципе можно увидеть и код ошибок.
И еще раз повторю вопрос - а не проще ли передавать in16-t двумя байтами и на стороне контроллера преобразовывать два байта в int16?
В протоколе разные форматы данных были заложены изначально, но потом на практике стало понятно, что это как-бы избыточно и даже было планах убрать форматы int16,int32 (чтобы не отвлекали).
И еще вопрос - а какие данные формата int16 Вы передаете из панели? Наверное только то, что вводите в полях ввода?
Мне нужно из панели передавать заданную температуру.
Верхнее значение 450.

Я не могу понять, как мне прописать в коде in16-t.
Поэтому и прошу Вас внести правку прям в тот код, который я выложил выше.
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Siberian писал(а): 15 фев 2025, 17:45
ecoins писал(а): 15 фев 2025, 17:27
Siberian писал(а): 15 фев 2025, 17:09 Поменял
func=0x06 на func=0x16
prints qntReg,1 на prints qntReg,2
prints qntByte,1 на prints qntByte,2

В МК (16) integer

Не заработало совсем.

Если Вас не затруднит, можете мне прям в моём коде исправить, который я выше выложил.
Заочно - не лучший путь. Обычно мы сразу видим на логическом анализаторе что передается, что доходит до контроллера, в принципе можно увидеть и код ошибок.
И еще раз повторю вопрос - а не проще ли передавать in16-t двумя байтами и на стороне контроллера преобразовывать два байта в int16?
В протоколе разные форматы данных были заложены изначально, но потом на практике стало понятно, что это как-бы избыточно и даже было планах убрать форматы int16,int32 (чтобы не отвлекали).
И еще вопрос - а какие данные формата int16 Вы передаете из панели? Наверное только то, что вводите в полях ввода?
Мне нужно из панели передавать заданную температуру.
Верхнее значение 450.

Я не могу понять, как мне прописать в коде in16-t.
Поэтому и прошу Вас внести правку прям в тот код, который я выложил выше.
1.В проекте Nexton на странице 1 Вы создаете переменные (X)Varible. Наверное удобнее использовать создаваемые переменные на вкладке Programs.s - та уже много создано (out10,out11 и другие).
2.Допустим в переменной ago10 находится значение 450.
ag011=ago10&0xFF //--получаем младший байт.
ago12=ago10>> //-- сдвигаем на 8-бит
ago12&=0xFF //--получаем старший байт.

Как-то так.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

Отличное решение мне подсказал WildCat!
Всё просто!
Описание ЗДЕСЬ
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Проблема была в том, что в библиотеке RT_HW_BASE.h не верно была прописана плата STM32H743VI.
Полезно на стадии отладки включать в проект вывод параметров проекта на консоль - многое позволяет выявлять, что влияет на работу.
В выложенном тесте это сделано - в UART1 выводятся параметры проекта.
Nextion_200225.jpeg
Board_STM32F743VI_TestEis_v02.zip
Работает.

Обновите библиотеки
RT_HW_00_BASE.ZIP
RT_HW_15_NEXTION.ZIP
В тесте немного поправил блоки вывода на пины на новые штатные блоки. Они стали гораздо удобнее, гибче, информативнее, работают быстро.
Успехов.
С уважением, ecoins.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
SSSR2000
Рядовой
Сообщения: 84
Зарегистрирован: 21 ноя 2022, 12:11
Имя: Alex
Благодарил (а): 3 раза
Поблагодарили: 6 раз

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

Сообщение SSSR2000 »

Прошу помощи в передаче и приеме с дисплея Nextion переменных с запятой и больших чисел. К примеру отправляю с дисплея устанавливаемую переменную n, записываю в неё значение допустим 55555, (out20|=0x20) Не могу разобраться как её принять в stm32h743, значения с контроллера принимаются, а вот с дисплея нет.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

SSSR2000 писал(а): 25 фев 2025, 09:57 Прошу помощи в передаче и приеме с дисплея Nextion переменных с запятой и больших чисел. К примеру отправляю с дисплея устанавливаемую переменную n, записываю в неё значение допустим 55555, (out20|=0x20) Не могу разобраться как её принять в stm32h743, значения с контроллера принимаются, а вот с дисплея нет.
Из панели нельзя передать значение больше 255, нужно разбивать на несколько частей, передавать отдельно, потом в МК умножать и слаживать.
Сам боролся с этой задачей.

Отличное решение мне подсказал WildCat!
Всё просто!
Описание ЗДЕСЬ
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

Здравствуйте!
Подскажите пожалуйста, сколько адресов по 5 регистров можно отправить в одном таймере tmOut?
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Siberian писал(а): 05 мар 2025, 20:35 Здравствуйте!
Подскажите пожалуйста, сколько адресов по 5 регистров можно отправить в одном таймере tmOut?
Начальный адрес всегда один, лучше не превышать кол-во регистров >24.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

Три пакета работают, четвёртый не передаётся.

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

//=================================================================================================
//          ОБРАБОТКА И ОТПРАВКА ПАРАМЕТРОВ В MCU
// 1.Функция вызывается периодически с периодом 100ms;
// 2.Во временных переменных(outxx) сохраняются выводимые параметры;
// 3.Проверяется изменение переменных outxx (с использованием переменных agoxx).
//   Если есть изменение, устанавливается значение cmdPack=2;
// 4.Проверяется счетчик cntPack>10 для контроля достижения 1сек.
//   Если cntPack>10, устанавливается значение cmdPack=1;
//=================================================================================================
//=================================================================================================
//       1.СОХРАНЕНИЕ ВЫВОДИМЫХ ПАРАМЕТРОВ В ПОЛЬЗОВАТЕЛЬСКИХ ПЕРЕМЕННЫХ outxx
//=================================================================================================
//--- Адрес - 1 -------------//
out01=1         // Передача заданной температуры в МК (значение разделено на 10)
out02=2          // Передача заданной температуры в МК (остаток после деления для сложения в МК)
out03=3        // Передача заданной Влажности в МК
out04=4
out05=5
//--- Адрес - 2 -------------//
out06=6
out07=7
out08=8
out09=9
out10=10
//--- Адрес - 3 -------------//
out11=11
out12=12
out13=13
out14=14
out14=15
//--- Адрес - 4 -------------//
out11=16
out12=17
out13=18
out14=19
out14=20
//=================================================================================================
//       2.ПРОВЕРКА НА ИЗМЕНЕНИЕ ПЕРЕМЕННЫХ outxx
//=================================================================================================
//--- Адрес - 1 -------------//
if(ago01!=out01)
{
  cmdPack=2
  ago01=out01
}

if(ago02!=out02)
{
  cmdPack=2
  ago02=out02
}

if(ago03!=out03)
{
  cmdPack=2
  ago03=out03
}

if(ago04!=out04)
{
  cmdPack=2
  ago04=out04
}
if(ago05!=out05)
{
  cmdPack=2
  ago05=out05
}
//--- Адрес - 2 -------------//
if(ago06!=out06)
{
  cmdPack=2
  ago06=out06
}

if(ago07!=out07)
{
  cmdPack=2
  ago07=out07
}
if(ago08!=out08)
{
  cmdPack=2
  ago08=out08
}
if(ago09!=out09)
{
  cmdPack=2
  ago09=out09
}
if(ago10!=out10)
{
  cmdPack=2
  ago10=out10
}
//--- Адрес - 3 -------------//
if(ago11!=out11)
{
  cmdPack=2
  ago11=out11
}
if(ago12!=out12)
{
  cmdPack=2
  ago12=out12
}
if(ago13!=out13)
{
  cmdPack=2
  ago13=out13
}
if(ago14!=out14)
{
  cmdPack=2
  ago14=out14
}
if(ago15!=out15)
{
  cmdPack=2
  ago15=out15
}
//--- Адрес - 4 -------------//
if(ago16!=out16)
{
  cmdPack=2
  ago16=out16
}
if(ago17!=out17)
{
  cmdPack=2
  ago17=out17
}
if(ago18!=out18)
{
  cmdPack=2
  ago18=out18
}
if(ago19!=out19)
{
  cmdPack=2
  ago19=out19
}
if(ago20!=out20)
{
  cmdPack=2
  ago20=out20
}
//=================================================================================================
//       3.ПРОВЕРКА НА ДОСТИЖЕНИЕ ВРЕМЕНИ 1 СЕК ПРИ ОТСУТСТВИИ ИЗМЕНЕНИЯ outxx
//=================================================================================================
cntPack++
if(cntPack>=10)
{
  cmdPack=1
}
//=================================================================================================
//       4.ОТПРАВКА ПЕРЕМЕННЫХ В MCU
//=================================================================================================
if(cmdPack>0)     //--Проверка команды отправки (по изменению или 1 раз в сек)
{
  cmdPack=0       //--Очистка команды управления;
  cntPack=0     //--Очистка счетчика времени;
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=1            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5        //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  crc+=out01
  crc+=out02
  crc+=out03
  crc+=out04
  crc+=out05
  //------------------------
  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 out01,1    //--Отправка байта регистра 1;
  prints out02,1    //--Отправка байта регистра 2;
  prints out03,1    //--Отправка байта регистра 3;
  prints out04,1    //--Отправка байта регистра 4;
  prints out05,1    //--Отправка байта регистра 5;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
  //========================================================================
  //======================= Отправка второго пакета данных =======================
  //========================================================================
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=6            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5       //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  crc+=out06
  crc+=out07
  crc+=out08
  crc+=out09
  crc+=out10
  //------------------------
  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 out06,1    //--Отправка байта регистра 6;
  prints out07,1    //--Отправка байта регистра 7;
  prints out08,1    //--Отправка байта регистра 8;
  prints out09,1    //--Отправка байта регистра 9;
  prints out10,1    //--Отправка байта регистра 10;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
  //========================================================================
  //======================= Отправка третьего пакета данных =======================
  //========================================================================
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=11            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5       //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  crc+=out11
  crc+=out12
  crc+=out13
  crc+=out14
  crc+=out15
  //------------------------
  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 out11,1    //--Отправка байта регистра 11;
  prints out12,1    //--Отправка байта регистра 12;
  prints out13,1    //--Отправка байта регистра 13;
  prints out14,1    //--Отправка байта регистра 14;
  prints out15,1    //--Отправка байта регистра 15;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
    //========================================================================
  //======================= Отправка четвёртого пакета данных =======================
  //========================================================================
  head=0x3A       //--Заголовок
  func=0x06        //--Отправка нескольких регистров байтовых регистров
  adr=16            //--Адрес первого отправляемого регистра
  qntReg=5         //--Кол-во отправляемых регистров
  qntByte=5       //--Кол-во отправляемых байт
  crc=head         //--Код заголовка (':') в КС
  crc+=func       //--Параметр func
  crc+=adr        //--Параметра adr
  crc+=qntReg      //-- Параметр qntReg
  crc+=qntByte     //-- Параметр qntByte
  //----Добавление в crc передаваемых регистров----------------------------------------------------
  crc+=out16
  crc+=out17
  crc+=out18
  crc+=out19
  crc+=out20
  //------------------------
  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 out16,1    //--Отправка байта регистра 16;
  prints out17,1    //--Отправка байта регистра 17;
  prints out18,1    //--Отправка байта регистра 18;
  prints out19,1    //--Отправка байта регистра 19;
  prints out20,1    //--Отправка байта регистра 20;
  prints crc,1     //--Отправка байта crc;
  printh FF FF FF   //--Отправка кодов завершения посылки
}
//=================================================================================================
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

Siberian писал(а): 06 мар 2025, 14:19 Три пакета работают, четвёртый не передаётся.
1.Посмотрел текст.
2.Возможно все-таки передается, но не принимается. Лучше всего посмотреть на это логическим анализатором.
3.Возможно не зарезервированы в программе буфер на последние адреса. Попробуйте отправить только два пакета, например 1 и 4. Получите дополнительные данные для анализа.
4.Ну и отправлять 4 пакета подряд из общих соображений не очень красиво. Хотя вроде бы должно работать - у Вас ведь процессор скорее всего достаточно мощный (STM32H743VI).
--------
Если Вы решаете конкретную прикладную задачу, то я бы порекомендовал Вам перейти на какую-нибудь панель типа Kingo, Luchian(новая панель с хорошим визуальным интерфейсом) - возможностей у Вас будет гораздо больше.
-------
С уважением, ecoins.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 633
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 34 раза
Поблагодарили: 5 раз

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

Сообщение Siberian »

ecoins писал(а): 06 мар 2025, 18:55
Siberian писал(а): 06 мар 2025, 14:19 Три пакета работают, четвёртый не передаётся.
1.Посмотрел текст.
2.Возможно все-таки передается, но не принимается. Лучше всего посмотреть на это логическим анализатором.
3.Возможно не зарезервированы в программе буфер на последние адреса. Попробуйте отправить только два пакета, например 1 и 4. Получите дополнительные данные для анализа.
4.Ну и отправлять 4 пакета подряд из общих соображений не очень красиво. Хотя вроде бы должно работать - у Вас ведь процессор скорее всего достаточно мощный (STM32H743VI).
--------
Если Вы решаете конкретную прикладную задачу, то я бы порекомендовал Вам перейти на какую-нибудь панель типа Kingo, Luchian(новая панель с хорошим визуальным интерфейсом) - возможностей у Вас будет гораздо больше.
-------
С уважением, ecoins.
Я сейчас использую ESP32, для данного проекта мне достаточно.
У меня нет таких проектов, в которых нужно будет отправлять 20 реестров.
Это проект для настройки, там много значений 4-5 знаков, которые нужно делить и отправлять частями.
Спасибо!
Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость