• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Разработка ‘библиотеки’ малого webсервера на esp8266.

relink

New member
История с вашим приращением ещё старее:
RE: [lwip-users] Bug in snd_buf calculation
lwip-users-tcp-ip - RE: [lwip-users] Bug in snd_buf calculation - msg#00009 - Programming Mailing Lists
lwIP - A Lightweight TCP/IP stack - Bugs: bug #2679, Data packet split on odd... [Savannah]
Но у нас этих проблем нет, что в ESP8266, что в ARM RTL871x. У них у всех байтный доступ к областям памяти, где находятся буфера данных.
Результаты тестирования показали, что исправление oddbyte (snd_buf) для связки esp-lwip не нужно. Логически это понятно, но утверждение лучше и быстрее было-бы перепроверить отладчиком, последовательность все-таки через какое-то время нарушается.
Никому не удалось запустить вот эту прошивку для jtag отладки в VisualGDB 7.11, или это у меня только openOCD jtag transport не видит.
 

pvvx

Активный участник сообщества
Никому не удалось запустить вот эту прошивку для jtag отладки в VisualGDB 7.11, или это у меня только openOCD jtag transport не видит.
Не видит USB устройство или ? Zadig - USB driver installation made easy
Снимок1261.gif Снимок1262.gif
Код:
@echo off
PATH=D:\MCU\OpenOCD;%PATH%
taskkill /F /IM openocd.exe
start openocd -f interface\Jlink.cfg -f xxxxx.cfg
Не думаю, что там какие-то ошибки.
Пример - на том-же LwiP работает RTL8710AF, читаем SD через FTP сервер:
Connecting in passive mode
Sending AMBA1858.MOV
150-Connected to port 55600
150 914220179 bytes to download
226-File successfully transferred
226 643788 ms, 1420 kbytes/s

Уже много Гега-Байт туда-сюда и ошибок нет.
 
Последнее редактирование:

vad7

Active member
@pvvx, у вас в свалке этот код выполняется?
CLEAR_PERI_REG_MASK(I2SCONF, I2S_I2S_RESET_MASK);

Выдает:
Fatal exception (28):
epc1=0x4020758f, epc2=0x00000000, epc3=0x00000000, excvaddr=0x02190000, depc=0x00000000
 

vad7

Active member
Чего-то I2S не заводится.

Куда не вставлял этот код, все тот же эксепшен LoadProhibitedCause (28).
Пробовал даже в самый стартап app_main.c, откатывал свалку на самые первые версии в гитхабе - то же самое.

Что-то лишнее удалено из SDK или не инициализировано...

Код:
rom_i2c_writeReg_Mask(i2c_bbpll, i2c_bbpll_hostid, i2c_bbpll_en_audio_clock_out,
      i2c_bbpll_en_audio_clock_out_msb, i2c_bbpll_en_audio_clock_out_lsb, 1);

   CLEAR_PERI_REG_MASK(I2SCONF, I2S_I2S_RESET_MASK); // <-  exception here
  
   SET_PERI_REG_MASK(I2SCONF, I2S_I2S_RESET_MASK);
   CLEAR_PERI_REG_MASK(I2SCONF, I2S_I2S_RESET_MASK);

   WRITE_PERI_REG(I2SCONF, (READ_PERI_REG(I2SCONF) & 0xf0000fff)|
         (((26&I2S_BCK_DIV_NUM )<<I2S_BCK_DIV_NUM_S)|
               ((5&I2S_CLKM_DIV_NUM)<<I2S_CLKM_DIV_NUM_S)|
               ((1&I2S_BITS_MOD) << I2S_BITS_MOD_S ) ) );
              
   PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_I2SO_BCK);
 
Последнее редактирование:

pvvx

Активный участник сообщества
Чего-то I2S не заводится.

Куда не вставлял этот код, все тот же эксепшен LoadProhibitedCause (28).
Пробовал даже в самый стартап app_main.c, откатывал свалку на самые первые версии в гитхабе - то же самое.

Что-то лишнее удалено из SDK или не инициализировано...

Код:
rom_i2c_writeReg_Mask(i2c_bbpll, i2c_bbpll_hostid, i2c_bbpll_en_audio_clock_out,
      i2c_bbpll_en_audio_clock_out_msb, i2c_bbpll_en_audio_clock_out_lsb, 1);

   CLEAR_PERI_REG_MASK(I2SCONF, I2S_I2S_RESET_MASK); // <-  exception here
 
   SET_PERI_REG_MASK(I2SCONF, I2S_I2S_RESET_MASK);
   CLEAR_PERI_REG_MASK(I2SCONF, I2S_I2S_RESET_MASK);

   WRITE_PERI_REG(I2SCONF, (READ_PERI_REG(I2SCONF) & 0xf0000fff)|
         (((26&I2S_BCK_DIV_NUM )<<I2S_BCK_DIV_NUM_S)|
               ((5&I2S_CLKM_DIV_NUM)<<I2S_CLKM_DIV_NUM_S)|
               ((1&I2S_BITS_MOD) << I2S_BITS_MOD_S ) ) );
             
   PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_I2SO_BCK);
Для этого кода от SDK ничего не требуется. Тактирование у I2S включено - можете посмотреть на веб странице
Снимок1268.gif
Описание в Харде ESP8266 хидере.
Никчемные MEMW() инструкции отключены в трансляторе. Что это такое - тоже написано в том-же хидере.
Меняйте ключи трансляции к своему коду если они нужны.
 

DorianGray

New member
Добрый день. Использую ESP для подключения к Modbus устройству. Как клиент используется два ПК, но вот сложилась ситуация, что если ПК1 держит сокет открытым, а ПК2 открывает соединение, то соответственно сокет ПК1 закрывается. Вопрос: это ограничение в вашем проекте? Мне прост необходимо что б можно было подключится несколькими устройствами к одной ESP8266.
 

pvvx

Активный участник сообщества
Добрый день. Использую ESP для подключения к Modbus устройству. Как клиент используется два ПК, но вот сложилась ситуация, что если ПК1 держит сокет открытым, а ПК2 открывает соединение, то соответственно сокет ПК1 закрывается. Вопрос: это ограничение в вашем проекте? Мне прост необходимо что б можно было подключится несколькими устройствами к одной ESP8266.
Многопользовательский интерфейс для Modbus не встречал. Там всегда есть мастер и подчиненные. При многопользовательском варианте нарушается сия концепция. 10 мастеров на шине modbus? :)
Закрытие текущего соединения при запросе нового отключается на странице конфигурации...
 

DorianGray

New member
А вообще есть ли возможность реализовать такую идею с несколькими подключениями от двух ПК (допустим понизив скорость опроса прибора - в модбасе, насколько я понимаю максимальный таймаут ответа от прибора ограничивается протоколом modbus ).
 

pvvx

Активный участник сообщества
А вообще есть ли возможность реализовать такую идею с несколькими подключениями от двух ПК (допустим понизив скорость опроса прибора - в модбасе, насколько я понимаю максимальный таймаут ответа от прибора ограничивается протоколом modbus ).
А кому надо такое извращение? Многопользовательский UART ? :) Как там разделять когда кому и куда? Пол бита передать от Васи, а четверть от Сани?
Решили NAT построить на COM порт?
 

DorianGray

New member
Использовать очередь (но будет тормозить), сначала один пообщался, закрыл сокет, потом второй пообщался и тоже закрыл.
 

DorianGray

New member
Тогда вопрос, модуль закрывает старое соединение сразу?(ситуация когда, по предыдущему сокету был отправлен modbus пакет на устройство, но ответа от прибора еще не поступило, но к esp уже ломяться по другому сокету).
 

DorianGray

New member
Меня интересует вот такая реализация
upload_2017-2-2_18-4-16.png
Насколько я понимаю то Modbus TCP это позволяет.
 

pvvx

Активный участник сообщества
Меня интересует вот такая реализация
Посмотреть вложение 3360
Насколько я понимаю то Modbus TCP это позволяет.
Да - по физической линии изернет можно обращаться к разным устройствам. Вот вы сейчас обращаетесь на данный сайт, т.е. имеете выбор с кем соединится. А по протоколу Modbus - нет - там мастер один и он задает арбитраж подчиненных. Например сетевой кабель у вас работает только как точка-точка. Старый инет по коаксиалу работал сразу со всеми устройствами и имел кучу коллизий.
Устройство Modbus TCP на ESP позволяет использовать схему на вашем приведенном рисунке. Соединяетесь с ней и передаете на локальную шину RS-485 запросы разным устройствам и наоборот. Включив вторую ESP к одной физической линии, в данном случае это у нас радио-эфир WiFi, соединяете его мастера с другим участком Modbus...
Т.е. на физике WiFi (как линии) вы можете иметь несколько цепей server-client. Соединение кто- скем в данном случае распределятся по MAC и IP.
Для "сборки" множественных "линий" server-client существуют специальные программные серверы. К примеру вы на своем компе открываете одно Modbus TCP соединение с одной ESP и второе соединение Modbus TCP с другой ESP. Данные с них сливаете в единую таблицу. Это уже программный уровень. Для контроля за массой соединений в промышленности используется специальное ПО - серверы (к примеру SCADA).
У нас же уровень ниже - обычный Modbus TCP мост (gateway) на ESP. Он полностью обеспечивает уровень Modbus TCP и имеет дополнительные фишки.
 
Последнее редактирование:

DorianGray

New member
Спасибо за разъяснения! То есть, если ESP будет выступать в роли шлюза между RS485 и TCP, ESP должен реализовывать арбитраж шины RS485 в соответствии со спецификацией Modbus TCP, и перенаправлять пакеты из сети TCP в RS485 по очереди. Но использовать ESP для такой задачи смысла нет - так как не хватит ее мощности для подобных задач. И по этому вы не реализовывали подобную возможность и делали реализацию точка-точка между одним TCP клиентом и модулем ESP8266, который уже может общаться с несколькими устройствами на шине RS485.
 

pvvx

Активный участник сообщества
Спасибо за разъяснения! То есть, если ESP будет выступать в роли шлюза между RS485 и TCP, ESP должен реализовывать арбитраж шины RS485 в соответствии со спецификацией Modbus TCP
Это и сделано.
, и перенаправлять пакеты из сети TCP в RS485 по очереди.
А не по очереди как? :) Перемешивая данные в пакете? :)
Но использовать ESP для такой задачи смысла нет - так как не хватит ее мощности для подобных задач.
Не понял. - именно это и работает - реализовано.
Вы хоть тему то Modbus TCP / RTU RS-485 + WEB server читали?
Там описание в первом сообщении с ссылками.
Кроме того работает и многопользовательский шлюз к Modbus-ам через web-сервер и даже подобие сервера сборки данных по Modbus сетям...
 

DorianGray

New member
Не, я читал, просто я с двух разных TCP устройств одновременно не могу подключиться, я про это.
 

pvvx

Активный участник сообщества
Не, я читал, просто я с двух разных TCP устройств одновременно не могу подключиться, я про это.
В modbus один мастер. Если нет - это не modbus, а что-то другое. Общение мастера со слейв - это точка-точка. Подчиненных может быть много. Мастер - один.
 

DorianGray

New member
Но один мастер в Modbus RTU/ASCII, а в Modbus TCP может быть несколько мастеров (так как у нас есть устройства Modbus TCP Gate). В документашке на modbus tcp про это есть. Или я не понимаю сути преобразователей =(

"The definition of the number of TCP client and server connections is not on the scope of this document (value n in this document). Depending on the device capacities the number of TCP connections can be different."
 
Последнее редактирование:

pvvx

Активный участник сообщества
Но один мастер в Modbus RTU/ASCII, а в Modbus TCP может быть несколько мастеров (так как у нас есть устройства Modbus TCP Gate). В документашке на modbus tcp про это есть. Или я не понимаю сути преобразователей =(

"The definition of the number of TCP client and server connections is not on the scope of this document (value n in this document). Depending on the device capacities the number of TCP connections can be different."
Сложно понять куцый язык: "В зависимости от возможностей устройства количество соединений TCP могут быть разными."
Но всё равно не может быть несколько мастеров. Нарушится всё.
Номер транзакции у меня сопровождается полностью, а большинство ПО его просто отбрасывает. Если к нему привязываться, то возможно расширение протокола по типу NAT :)
 
Сверху Снизу