Jump to content

    
DDDDRRRRR

TCP сервер на stm32

Recommended Posts

Здравствуйте, необходимо реализовать обмен данными между мк stm32 и пк посредством ethernet.

МК передает данные с датчиков, АПЦ и тд, ПК передает управляющие сигналы - зажечь, потушить светодиод и тд. МК - stm32f746 dicovery, PHY - LAN8742. Предполагаю использовать CubeMX, соответственно HAL, т.к. stm32f7, IDE - STM32CubeIDE, в качестве стека LWIP без ОС (читал разные мнения относительно применения FreeRTOS при использовании LWIP, пока решил не прикручивать его сюда).

Перечитал кучу информации, форумов, но ничего толком не нашел, что можно было бы использовать в качестве основы, т.к. с Ethernet сталкиваюсь впервые. МОжет кто сможет помочь информацией, как должна выглядеть архитектура такой программы, код, примеры? Вроде понимание теории есть, проблемы с реализацией.

Share this post


Link to post
Share on other sites
48 минут назад, .crz сказал:

Здравствуйте. Предлагаю посмотреть Cyclone TCP https://www.oryx-embedded.com/products/CycloneTCP

В репозитории есть готовые примеры, так что старт будет довольно легким.

 

Спасибо за совет, но хотелось бы использовать что-то более распространенное, желательно поддерживаемое самим разработчиком, первый раз слышу об Cyclone TCP

Share this post


Link to post
Share on other sites

У вас же LWIP  на борту будет. Вот по нему и ищите примеры. Распространённая штука. Ну и как бы устройство TCP/IP само собой от зубов должно отлетать.

Share this post


Link to post
Share on other sites
38 минут назад, VladislavS сказал:

У вас же LWIP  на борту будет. Вот по нему и ищите примеры. Распространённая штука. Ну и как бы устройство TCP/IP само собой от зубов должно отлетать.

Из примеров по нему я нашел по сути только эхо, но нигде не могу найти какие настройки задавать в кубе, какие функции прописывать и использовать в коде, грубо говоря рабочий пример передачи данных, наподобие поставленной задачи, который можно перебрать под свои нужды

Share this post


Link to post
Share on other sites
1 час назад, DDDDRRRRR сказал:

в качестве стека LWIP без ОС

Есть в нем пример web-сервера именно в такой конфигурации. Чем не устраивает? Вот вбил в гуглю "lwip sample" и прямо первая ссылка.

1 час назад, DDDDRRRRR сказал:

МК передает данные с датчиков, АПЦ и тд,

То есть вам либо надо использовать websockets, либо не нужен web вообще. В последнем случае непонятно, в чем сложности? Соединились и шлите себе данные в обе стороны, протокол поверх TCP самопальный. Это вообще нижний уровень любого примера.

Share this post


Link to post
Share on other sites
2 минуты назад, Сергей Борщ сказал:

То есть вам либо надо использовать websockets, либо не нужен web вообще

Насколько я понимаю websockets используются для связи с браузером, мне же необходимо передавать пакеты с программку на пк наподобие терминала, которая в дальнейшем будет обрабатывать данные. 

4 минуты назад, Сергей Борщ сказал:

протокол поверх TCP самопальный

В этом основные сложности, что должен содержать этот самопальный протокол, какие проверки данных, какую информацию добавлять при отправке пакета и тд, действия в случае ошибок. Просто нет пока понимания архитектуры приложения и за что отвечает LWIP ,а какие функции необходимо дописывать самому

Share this post


Link to post
Share on other sites
26 минут назад, DDDDRRRRR сказал:

что должен содержать этот самопальный протокол

То, что вам нужно.

26 минут назад, DDDDRRRRR сказал:

какие проверки данных

Заботу об ошибках берет на себя TCP. Считайте, что это такой безошибочный COM-порт с определением выдергивания кабеля. 

26 минут назад, DDDDRRRRR сказал:

какую информацию добавлять при отправке пакета и тд

Протокол потоковый, по дороге пакеты могут фрагментироваться/дефрагментироваться, поэтому придется самостоятельно разбираться, где заканчивается одно сообщение и начинается следующее.

 

Share this post


Link to post
Share on other sites
1 час назад, DDDDRRRRR сказал:

мне же необходимо передавать пакеты с программку на пк наподобие терминала

Это называется "соединение TCP-сокет". Обмен внутри TCP-сокета - байт-ориентированный. Если нужны кадры - это уже делаете сами, поверх него, собираете кадры из потока байт. Любым удобным протоколом. Гарантия доставки и правильность порядка байт этого байтового потока гарантируется TCP-стеком (как уже сказали выше).

Share this post


Link to post
Share on other sites
6 hours ago, DDDDRRRRR said:

Из примеров по нему я нашел по сути только эхо, но нигде не могу найти какие настройки задавать в кубе, какие функции прописывать и использовать в коде, грубо говоря рабочий пример передачи данных, наподобие поставленной задачи, который можно перебрать под свои нужды

В репозитории куба есть примеры: STM32Cube_FW_F7_V1.15.0\Projects\STM32756G_EVAL\Applications\LwIP. Вам стоит посмотреть TCP Echo client и TCP Echo server.

Share this post


Link to post
Share on other sites

Неплохо получается 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 тоже есть

Share this post


Link to post
Share on other sites
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 делаются буквально за минуту:

image.thumb.png.aa2ad3304c0ac4c5a00c2d7747ab0bb6.png

Никакого кодирования, можно без всяких сторонних виджетов. Только конфигурирование и все.
Поток информации получаете в реальном времени.  

Share this post


Link to post
Share on other sites
4 часа назад, AlexandrY сказал:

Я бы вам предложил использовать во такую программу -

Жуть какая! Это что, сегодняшняя мода программирования? Немудрено, что толковых прогеров сейчас днем с огнем...

Share this post


Link to post
Share on other sites
12.06.2020 в 14:00, Сергей Борщ сказал:

Считайте, что это такой безошибочный COM-порт с определением выдергивания кабеля. 

Считайте, что это такой безошибочный COM-порт БЕЗ определением выдергивания кабеля.

Share this post


Link to post
Share on other sites
49 минут назад, razrab83 сказал:

Считайте, что это такой безошибочный COM-порт БЕЗ определением выдергивания кабеля.

Если включить keep-alive , то с определением выдергивания кабеля.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.