1 (07-04-2021 11:43:44 отредактировано Nikolay)

Тема: Can шлюз с подменой ID и изменением данных

Здравствуйте, подскажите пожалуйста, на данный момент пробую на CANNY 7.2 DUO сделать шлюз передачи данных с CAN0 в CAN1, при передаче необходимо:
1) Фильтровать сообщение по IDL и IDH (сделано)
2) Фильтровать сообщения по D0:D3 (сделано)
3) Передавать D4:D7 с нужной маской в D0:D4 с заменой IDL и IDH (сделал замену IDL и IDH, как сделать передачу именно в D0:D4, сейчас передаётся всё сообщение)
4) Передавать 0, если не было сообщений с данной маской D0:D4 (подскажите такое возможно?)
5) Сделать передачу раз в 1 сек, независимо от того есть ли сообщения с данной маской, к примеру сообщение по отбору 1 передается только при включении оборудования, а мне необходимо ловить это значение и передавать раз в 1 сек
6) Запретить передачу самого ID с которого беру данные, сейчас передается три ID 1CE726A0, 1AE40101, 1AE40102, необходимо что бы первый не передавался

Диаграмма в приложении, сделана по образцу из одной из тем на форуме

Была попытка еще через "Логическое И" и равенства, но так фильтрация почему то не работала вообще у меня

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

Иконка вложения c72duo_шлюз.cfd 5.81 кб, скачивался 170 раз, последний раз 2021-04-07 

2

Re: Can шлюз с подменой ID и изменением данных

Nikolay пишет:

3) Передавать D4:D7 с нужной маской в D0:D4 с заменой IDL и IDH (сделал замену IDL и IDH, как сделать передачу именно в D0:D4, сейчас передаётся всё сообщение)

Не совсем понятно. Поясните, пожалуйста, какие байты, на каких местах должны отправляться и какова общая длина передаваемого сообщения?

Nikolay пишет:

4) Передавать 0, если не было сообщений с данной маской D0:D4 (подскажите такое возможно?)
5) Сделать передачу раз в 1 сек, независимо от того есть ли сообщения с данной маской..

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

Nikolay пишет:

6) Запретить передачу самого ID с которого беру данные, сейчас передается три ID 1CE726A0, 1AE40101, 1AE40102, необходимо что бы первый не передавался

Возможно, нужно рассматривать в совокупности с ответами на предыдущие вопросы.

3

Re: Can шлюз с подменой ID и изменением данных

1) Не совсем понятно. Поясните, пожалуйста, какие байты, на каких местах должны отправляться и какова общая длина передаваемого сообщения?

Общая длина сообщений в данном ID 8 байт, 4 байта маска (D3:D0), 4 байта данные (D7:D4)
Мне необходимо на примере диаграммы:
Полученное сообщение ID 1CE726A0, D0:D7( A8 30 01 FF C8 00 00 00), в котором A8 30 01 FF - маска, C8 00 00 00 - данные
Переданное сообщение ID 1AE40101, D0:D3 (C8 00 00 00), то есть не передавать маску, а передавать только данные

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

Относится к обоим отборам? По истечении какого времени отсутствия получения нужного сообщения?
Будет относится к отдельным отборам, не ко всем, некоторые нужно передавать 0 при отсутствии сообщений в течении 10-15 сек, некоторые запоминать последние данные с сообщения и передавать их до прихода новых (к примеру отбор 0 нужно обнулять, отбор 1 нужно передавать последние последние данные)

В каких байтах должны быть нули?
D0:D3 в передаваемом сообщении


Надеюсь нормально объяснил, если необходимо что то еще скажите пожалуйста, попробую описать

4

Re: Can шлюз с подменой ID и изменением данных

Вариант решения во вложении. Надеюсь, правильно понял задачу. Диаграмма проверена на стенде, должна работать корректно.
Этот пример, в принципе, расширяемый. Есть и другие варианты решений, но целесообразность их применения зависит от конкретной ситуации, в данном случае этот - один из наиболее оптимальных и понятных.
Для реализации отправки данных по времени требуется обработка сообщений в диаграмме. Ретрансляция отборов запрещена, отправка сообщений выполняется из диаграммы.

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

Иконка вложения c72duo_шлюз.cfd 12.36 кб, скачивался 181 раз, последний раз 2021-04-07 

5

Re: Can шлюз с подменой ID и изменением данных

Денис, CANNY пишет:

Вариант решения во вложении. Надеюсь, правильно понял задачу. Диаграмма проверена на стенде, должна работать корректно.
Этот пример, в принципе, расширяемый. Есть и другие варианты решений, но целесообразность их применения зависит от конкретной ситуации, в данном случае этот - один из наиболее оптимальных и понятных.
Для реализации отправки данных по времени требуется обработка сообщений в диаграмме. Ретрансляция отборов запрещена, отправка сообщений выполняется из диаграммы.


Да заработало, спасибо!

Подскажите пожалуйста как в эту схему добавлять еще отборы?
Не совсем понимаю как это сделать, добавил два отбора по аналогии с Вашим, но ID в CAN 1 не появились, подскажите пожалуйста как это сделать? всего необходимо 15 отборов, добавил сами отборы в схему, но пробовал передать только отбор 2,3

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

Иконка вложения c72duo_шлюз.cfd 46.75 кб, скачивался 150 раз, последний раз 2021-04-08 

6

Re: Can шлюз с подменой ID и изменением данных

Это должно выглядеть примерно так (см. вложение). Тут используется "Присвоение константы по условию" (с приоритетом) - https://canny.ru/docs/tips_tricks/const … condition/ .
Для большего количества отправляемых сообщений коммутатор 1-в-8 (блок №3) потребуется заменить на коммутатор 1-в-16, а коммутаторы 8-в-1 (блоки №№14,30,18,28,25,10,16) на коммутаторы 16-в-1, или применить каскадирование коммутаторов - https://canny.ru/docs/tips_tricks/switches_cascading/ , но это если не хватит обычных коммутаторов.

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

Иконка вложения c72duo_шлюз_1.cfd 46.02 кб, скачивался 175 раз, последний раз 2021-04-08 

7

Re: Can шлюз с подменой ID и изменением данных

Спасибо огромное за помощь! Все заработало как нужно.

8

Re: Can шлюз с подменой ID и изменением данных

Подскажите пожалуйста, сейчас заметили, что через какое то время после передачи правильных параметров, они сбрасываются в 0, при долгом отсутствии сообщений с данной маской, возможно ли как то явно указать что необходимо постоянно передавать последнее принятое значение?

9

Re: Can шлюз с подменой ID и изменением данных

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

10

Re: Can шлюз с подменой ID и изменением данных

Денис, CANNY пишет:

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

Обнуляются именно те, которые установлены в режиме передавать последнее сообщение

11

Re: Can шлюз с подменой ID и изменением данных

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

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

изображение_2021-04-12_131735.png, 10.18 кб, 452 x 136
изображение_2021-04-12_131735.png 10.18 кб, скачивался 146 раз, последний раз 2021-04-12 

12

Re: Can шлюз с подменой ID и изменением данных

Nikolay пишет:

Обнуляются именно те, которые установлены в режиме передавать последнее сообщение

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