Перейти к содержанию
    

W5500, фрагментация пакета

Посмотрите в сторону манипуляций с алгоритмом Нэйгла. Возможно, есть там что-то такое.

ИМХО, рассчитывать в байт-ориентированном протоколе TCP (как уже выше правильно заметили) на кадр-ориентированность как-то наивно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, tonyk_av said:

Даже три. Третий _WIZCHIP_IO_MODE_SPI_5500_, хотя он, вроде, идентичен FDM. Пробовал это менять, никак не влияет. Зато в примерах работы с Модбас показаны именно целые, не фрагментированные, пакеты. И разбивка одной посылки как 4+4+2 настораживает. Видимо, есть какая-то настройка у этого 5500, которая влияет на это. Только вот какая, где она описана?

Вы тут вскользь помянули Modbus.  Если реализуете Modbus-TCP то и смотреть приходящие пакеты надо утилитой-монитором, поддерживающим этот протокол на базе TCP (подобные modpoll, с TCP).  

Если есть желание работать именно с пакетами-фреймами, то

17 hours ago, jcxz said:

В протоколе. Если надо чтобы не делились - меняйте на другой. UDP например.

используйте датаграммы / UDP получите работу с пакетами в чистейшем-простейшем виде. Недостаток только один (вернее два) - подтверждения-повторы канала  вам придется реализовывать собственноручно. И "потока" со сборкой в готовый файл уже не будет. Зато будет существенное повышение производительности и "реалтаймовости" канала. Да, и "устойчивать" соединения будет зависить только от того, как Вы программно реализуете эту устойчивость (для TCP это задача по большей части в самом TCP).

Можете реализовать "свой" протокол на базе UDP где пакеты modbus будут "упакованы" в UDP в качестве данных.

Чтобы разобраться с W5500 "не методом тыка" Вам нужно подключить на Ethernet сниффер. "В чистую" нужен старый HUB + софтина для просмотра трафика TCP по Ethernet. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, k155la3 сказал:

Недостаток только один (вернее два) - подтверждения-повторы канала  вам придется реализовывать собственноручно. И "потока" со сборкой в готовый файл уже не будет.

Если автор будет из UDP-пакетов собирать какие-то свои, более крупные пакеты, то кроме подтверждений-повторов, нужно будет ещё озаботиться восстановлением последовательности отправленных кадров на стороне приёма.

3 часа назад, k155la3 сказал:

Зато будет существенное повышение производительности и "реалтаймовости" канала.

Если из UDP-кадров нужно будет собирать свои кадры (более крупные), то есть 2 пути:

1) каждый UDP-кусочек передавать в режиме запрос-ответ, не передавая следующий кусочек пока удалённая сторона не квитирует предыдущий;

2) передавать сразу несколько UDP-кусочков, не ожидая подтверждения ответа удалённой стороны (подтверждая сразу группу например - а-ля TCP).

В 1-м способе общая скорость передачи будет зависеть от задержек канала. И в общем случае большой скорости не добиться.

В 2-м способе общая скорость будет значительно выше, но надо будет бороться с перепутыванием последовательности кадров. И в целом придётся построить что-то типа TCP-поверх-UDP. Что для начинающего будет весьма сложно. Тем более для человека, никак не могущего взять толк, почему в TCP в принципе нельзя рассчитывать на какие-то "кадры".

Естественно - 1-й способ намного проще.

4 часа назад, tonyk_av сказал:

Видимо, есть какая-то настройка у этого 5500, которая влияет на это. Только вот какая, где она описана?

Когда уже наконец-то прочитаете - что такое TCP???

В TCP нет понятия кадров. В принципе нет. Это байтовый поток.

То что вы передаёте эти байты группами в W5500 - ничего не значит. Эти группы байт, далее, при движении через сеть, могут передаваться или сразу целиком или по кусочкам, хоть по одному байту. И на удалённой стороне, в выходной интерфейс (какой бы он у вас ни был), могут вылезать так же: или все сразу вместе или группами. Как повезёт. Сейчас они вылезли вместе, через минуту следующая посылка - разбившись на несколько групп. Какие бы настройки вы не нашли в W5500 - ничего не поможет. W5500 от себя в сеть может отправить сразу все байты, а по дороге эта группа байт может быть фрагментирована и доставлена в целевую точку в нескольких посылках.

 

PS: Чем раньше сядете за учебник по TCP/IP, тем меньше потеряете времени впустую.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, aaarrr said:

Самого интересного недостаёт - таймстемпов.

 

Screenshot_401.jpg

Screenshot_402.jpg

Вызов wizchip_gettimeout( &to ) дал вот такие результаты. Вроде, адекватные значения.

561416724_.png.d9edf253d12544ecb46d694b2e039cff.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 minutes ago, aaarrr said:

Между пакетами аккурат по 10мс. Не бьётся с какими-нибудь времянками ПО?

Ещё раз запустил сканер. Картина другая.

10мс есть. Пробовал менять её до 1с- разницы нет.

1557279360_.png.35d3db3828f81301e0f15ee1859cc047.png

Screenshot_403.jpg

Изменено пользователем tonyk_av

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, tonyk_av said:

Картина другая.

Те же аккуратные 10мс между исходящими пакетами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, aaarrr said:

Те же аккуратные 10мс между исходящими пакетами.

То есть пилит при отправке 5500, так что ли?

Изменено пользователем tonyk_av

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, tonyk_av said:

То есть пилит при отправке 5500, так что ли?

Если только в неё данные отгружаются без таких пауз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, aaarrr said:

Если только в неё данные отгружаются без таких пауз.

Пардон, не понял. Можно пояснить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, tonyk_av said:

Пардон, не понял. Можно пояснить?

Если каким-то образом из вашего ПО в W5500 данные не отгружаются тремя частями с перерывом в 10мс (или просто медленно или с паузами).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, aaarrr said:

Если каким-то образом из вашего ПО в W5500 данные не отгружаются тремя частями с перерывом в 10мс.

Я прошёл в отладчике Визнетовскую библиотеку и нигде не встретил никаких попыток повторной отправки: загрузили в 5500 3 управляющих байта и 10 байт посылки- и всё, вернули 10.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы посмотрел серверную часть. Потому как есть вероятность что идут очень частые запросы на клиента по каналу управления. 

И они "не сторговались" в этой части. Или вообще проблема не в W5500 а в работе софта-сервера (настройки).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...