1

Тема: Снова 7.2 про потерю пакетов

Снова добрый день, и снова я со своими потерянными пакетам в CAN. Прошу сильно не пинать, но видимо проклятье у мен такое, терять пакеты.
На этот раз исходный пример №4 вот отсюда: https://canny.ru/docs/c72duo/cangateway … ay-primery
Если в сети небольшое количество пакетов с частотой плюс минус 20мс, то всё работает отлично, и сколько входит пакетов на кан0 в контроллер, столько и выходит. Если же количество пакетов увеличивается, условно до 20 пакетов, с периодом тем же 20мс, и пара из них частота по 3мс, тогда часть пакетов теряется. Условно пришло 10000 пакетов, на выходе может быть 9500. Тестовый стенд выглядит как канхакер, который подключён соответственно к кан0 и кан1 контроллера. 120 Ом подтянуты на самом канхакере, и так же подпаяны на контролере. Так же замечено что если в сети нет пакетов которые попадают в отбор, тогда и потерь нет, даже если в сети около 50 пакетов. Либо если вручную изменить частоту передаче канхакером на столе до 10мс (меньше нельзя), то так же потерь нет.

Прикрепил диаграмму где пробую делать 2 подмены пакетов, там потерь несколько больше. В моей задачке необходимо будет сделать порядка 10 изменений в пакетах, т.е. из диаграммы отправлять 10 пакетов.

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

Вложений в сообщении

Иконка вложения c72duo_cangateway_4_доп.cfd 7.67 кб, скачивался 8 раз, последний раз 2024-11-05 

2

Re: Снова 7.2 про потерю пакетов

На этот раз исходный пример №4...
Так же замечено что если в сети нет пакетов которые попадают в отбор, тогда и потерь нет, даже если в сети около 50 пакетов.

Пример 4 демонстрирует синхронную обработку сообщений CAN, то есть анализ, изменение и ретрансляция сообщений производится диаграммой. При включенном драйвере шлюза, в диаграмму (в регистры драйвера приема CAN) поступают только те сообщения, которые попадают в отборы драйвера шлюза.

Если же количество пакетов увеличивается, условно до 20 пакетов, с периодом тем же 20мс, и пара из них частота по 3мс, тогда часть пакетов теряется.

Для обработки сообщений поступающих со столь высокой частотой следует максимально использовать возможности асинхронного драйвера шлюза CAN по статической замене данных сообщений.

При  использовании синхронного режима, если сообщения будут поступать чаще, чем диаграмма сможет их обрабатывать (см. https://canny.ru/docs/c72duo/resources/ … -diagrammy ), то со временем возникнет переполнение, для контроля которого в драйвере предусмотрен соотвествующий регистр (см. Регистр переполнения буфера приема CANx https://canny.ru/docs/c72duo/can/#sec-- … y-drajvera ), и сообщение будет отброшено.

Направьте пожалуйста в нужную сторону.

Основной совет приведен в п.9 здесь: https://canny.ru/docs/tips_tricks/solut … ents_tips/

Варианты вижу только такой что придётся делать асинхронной передачей, без использования режима шлюза, т.е. принимаем пакет (возможно не все потребуются, нужно проверять), и отправляем через асинхронную отправку.

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

3

Re: Снова 7.2 про потерю пакетов

Понял, спасибо за ответ. По итогу отпишусь.