DDDDRRRRR 0 Posted June 12, 2020 · Report post Здравствуйте, необходимо реализовать обмен данными между мк stm32 и пк посредством ethernet. МК передает данные с датчиков, АПЦ и тд, ПК передает управляющие сигналы - зажечь, потушить светодиод и тд. МК - stm32f746 dicovery, PHY - LAN8742. Предполагаю использовать CubeMX, соответственно HAL, т.к. stm32f7, IDE - STM32CubeIDE, в качестве стека LWIP без ОС (читал разные мнения относительно применения FreeRTOS при использовании LWIP, пока решил не прикручивать его сюда). Перечитал кучу информации, форумов, но ничего толком не нашел, что можно было бы использовать в качестве основы, т.к. с Ethernet сталкиваюсь впервые. МОжет кто сможет помочь информацией, как должна выглядеть архитектура такой программы, код, примеры? Вроде понимание теории есть, проблемы с реализацией. Quote Ответить с цитированием Share this post Link to post Share on other sites
.crz 0 Posted June 12, 2020 · Report post Здравствуйте. Предлагаю посмотреть Cyclone TCP https://www.oryx-embedded.com/products/CycloneTCP В репозитории есть готовые примеры, так что старт будет довольно легким. Quote Ответить с цитированием Share this post Link to post Share on other sites
DDDDRRRRR 0 Posted June 12, 2020 · Report post 48 минут назад, .crz сказал: Здравствуйте. Предлагаю посмотреть Cyclone TCP https://www.oryx-embedded.com/products/CycloneTCP В репозитории есть готовые примеры, так что старт будет довольно легким. Спасибо за совет, но хотелось бы использовать что-то более распространенное, желательно поддерживаемое самим разработчиком, первый раз слышу об Cyclone TCP Quote Ответить с цитированием Share this post Link to post Share on other sites
VladislavS 0 Posted June 12, 2020 · Report post У вас же LWIP на борту будет. Вот по нему и ищите примеры. Распространённая штука. Ну и как бы устройство TCP/IP само собой от зубов должно отлетать. Quote Ответить с цитированием Share this post Link to post Share on other sites
DDDDRRRRR 0 Posted June 12, 2020 · Report post 38 минут назад, VladislavS сказал: У вас же LWIP на борту будет. Вот по нему и ищите примеры. Распространённая штука. Ну и как бы устройство TCP/IP само собой от зубов должно отлетать. Из примеров по нему я нашел по сути только эхо, но нигде не могу найти какие настройки задавать в кубе, какие функции прописывать и использовать в коде, грубо говоря рабочий пример передачи данных, наподобие поставленной задачи, который можно перебрать под свои нужды Quote Ответить с цитированием Share this post Link to post Share on other sites
Сергей Борщ 0 Posted June 12, 2020 · Report post 1 час назад, DDDDRRRRR сказал: в качестве стека LWIP без ОС Есть в нем пример web-сервера именно в такой конфигурации. Чем не устраивает? Вот вбил в гуглю "lwip sample" и прямо первая ссылка. 1 час назад, DDDDRRRRR сказал: МК передает данные с датчиков, АПЦ и тд, То есть вам либо надо использовать websockets, либо не нужен web вообще. В последнем случае непонятно, в чем сложности? Соединились и шлите себе данные в обе стороны, протокол поверх TCP самопальный. Это вообще нижний уровень любого примера. Quote Ответить с цитированием Share this post Link to post Share on other sites
DDDDRRRRR 0 Posted June 12, 2020 · Report post 2 минуты назад, Сергей Борщ сказал: То есть вам либо надо использовать websockets, либо не нужен web вообще Насколько я понимаю websockets используются для связи с браузером, мне же необходимо передавать пакеты с программку на пк наподобие терминала, которая в дальнейшем будет обрабатывать данные. 4 минуты назад, Сергей Борщ сказал: протокол поверх TCP самопальный В этом основные сложности, что должен содержать этот самопальный протокол, какие проверки данных, какую информацию добавлять при отправке пакета и тд, действия в случае ошибок. Просто нет пока понимания архитектуры приложения и за что отвечает LWIP ,а какие функции необходимо дописывать самому Quote Ответить с цитированием Share this post Link to post Share on other sites
Сергей Борщ 0 Posted June 12, 2020 · Report post 26 минут назад, DDDDRRRRR сказал: что должен содержать этот самопальный протокол То, что вам нужно. 26 минут назад, DDDDRRRRR сказал: какие проверки данных Заботу об ошибках берет на себя TCP. Считайте, что это такой безошибочный COM-порт с определением выдергивания кабеля. 26 минут назад, DDDDRRRRR сказал: какую информацию добавлять при отправке пакета и тд Протокол потоковый, по дороге пакеты могут фрагментироваться/дефрагментироваться, поэтому придется самостоятельно разбираться, где заканчивается одно сообщение и начинается следующее. Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted June 12, 2020 · Report post 1 час назад, DDDDRRRRR сказал: мне же необходимо передавать пакеты с программку на пк наподобие терминала Это называется "соединение TCP-сокет". Обмен внутри TCP-сокета - байт-ориентированный. Если нужны кадры - это уже делаете сами, поверх него, собираете кадры из потока байт. Любым удобным протоколом. Гарантия доставки и правильность порядка байт этого байтового потока гарантируется TCP-стеком (как уже сказали выше). Quote Ответить с цитированием Share this post Link to post Share on other sites
alag57 0 Posted June 12, 2020 · Report post 6 hours ago, DDDDRRRRR said: Из примеров по нему я нашел по сути только эхо, но нигде не могу найти какие настройки задавать в кубе, какие функции прописывать и использовать в коде, грубо говоря рабочий пример передачи данных, наподобие поставленной задачи, который можно перебрать под свои нужды В репозитории куба есть примеры: STM32Cube_FW_F7_V1.15.0\Projects\STM32756G_EVAL\Applications\LwIP. Вам стоит посмотреть TCP Echo client и TCP Echo server. Quote Ответить с цитированием Share this post Link to post Share on other sites
BioWolf2000 0 Posted June 13, 2020 · Report post Неплохо получается freemodbus+freertos+lwip. https://www.embedded-experts.at/en/produkt/modbus-slave-evaluation-version/ Без проблем зарегистрироваться и скачать. В eval версии полностью исходники и примеры для STM32 под STM32CubeMX. На первое время отладку на ПК можно делать через Modbus Poll. Датчики повесить на Inputs, управляющие сигналы на Coils, настроечные параметры - Holdings, в разборе Coils обеспечить вызов функций. Доступ к переменным через Union union{ uint16_t arr[10]; struct{ uint16_t reg1; uint16_t reg2; // } } mbHoldings; Модбас работает через mbHoldings.arr, программа через mbHoldings.reg1 и тд ps. Есть перевод UM1713 на русский http://pro-interes.com/wp-content/uploads/2020/02/LwIP_TCP_IP_stack_descriptionRus.pdf Про Modbus можно почитать тут https://habr.com/ru/post/281430/ И рекомендую поставить сниффер TCP - Wireshark. Без него никак. Там кстати плагин modbus тоже есть Quote Ответить с цитированием Share this post Link to post Share on other sites
AlexandrY 0 Posted June 13, 2020 · Report post On 6/12/2020 at 9:28 AM, DDDDRRRRR said: Перечитал кучу информации, форумов, но ничего толком не нашел, что можно было бы использовать в качестве основы, т.к. с Ethernet сталкиваюсь впервые. МОжет кто сможет помочь информацией, как должна выглядеть архитектура такой программы, код, примеры? Вроде понимание теории есть, проблемы с реализацией. Я бы вам предложил использовать во такую программу - https://www.nxp.com/design/software/development-software/freemaster-run-time-debugging-tool:FREEMASTER Целиком решение сотоит из программы на PC и программного модуля в вашем микроконтроллере. Программный модуль для микроконтроллера там отдельно скачивается. Поскольку программа работет через последовательный порт (и несколько других неподходящих интерфейсов), то вам надо еще дописать в микроконтроллере отправку данных не в UART, а в TCP соединение. Это элементарно. А на стороне PC надо будет поставить эту программу - https://www.hw-group.com/software/hw-vsp3-virtual-serial-port для конвертации TCP соединения в виртуальный последовательный порт. Решение очень универсальное, вам после этого даже не надо будет как то специальным образом объявлять переменные в микроконтроллере для доступа к ним из PC. Они могут импортироваться прямо из ELF файла получаемого после компиляции проекта. Дашборды во FreeMaster делаются буквально за минуту: Никакого кодирования, можно без всяких сторонних виджетов. Только конфигурирование и все. Поток информации получаете в реальном времени. Quote Ответить с цитированием Share this post Link to post Share on other sites
mantech 0 Posted June 13, 2020 · Report post 4 часа назад, AlexandrY сказал: Я бы вам предложил использовать во такую программу - Жуть какая! Это что, сегодняшняя мода программирования? Немудрено, что толковых прогеров сейчас днем с огнем... Quote Ответить с цитированием Share this post Link to post Share on other sites
razrab83 0 Posted June 18, 2020 · Report post 12.06.2020 в 14:00, Сергей Борщ сказал: Считайте, что это такой безошибочный COM-порт с определением выдергивания кабеля. Считайте, что это такой безошибочный COM-порт БЕЗ определением выдергивания кабеля. Quote Ответить с цитированием Share this post Link to post Share on other sites
gerber 0 Posted June 18, 2020 · Report post 49 минут назад, razrab83 сказал: Считайте, что это такой безошибочный COM-порт БЕЗ определением выдергивания кабеля. Если включить keep-alive , то с определением выдергивания кабеля. Quote Ответить с цитированием Share this post Link to post Share on other sites