1

Тема: Программирование CANNY5 DUO

Добрый день!
Есть две задачи:
1) Фильтрация трафика на кан-шине между устройствами
2) Включение одного из выводов контроллера по сообщению на шине.
К сожалению, я от программирования далек. Даже на основе примера не смог разобраться как настроить шлюз.
Собственно первая  задача выглядит так:
Нужно на одном интерфейсе ловить сообщение с ID 0006FB длина 8, само сообщение  01 84 10 0C 83 05 88 80 и отправлять его на второй интерфейс как ID 0006FB, длина  8,  01 85 10 0C 83 05 88 80.
Для всех остальных сообщений фильтр прозрачен.
Вторая задача - для сообщения с ID 000308 отслеживает значение разряда d1. При значение 0e и больше включать выход контроллера.

Входной интерфейс кан одни для обеих задач.


С надеждой на помощь.
Заранее спасибо!

2

Re: Программирование CANNY5 DUO

Давайте решать задачу по частям, затем соберем всё вместе.
Начните со второй части - она проще.
Создайте новый файл диаграммы для вашего контроллера в CannyLab и попробуйте составить диаграмму по вашим данным, для вашего контроллера, по аналогии с третьим примером отсюда: http://wiki.canny.ru/index.php?title=CA … 1.80.D1.8B

Покажите вариант, который у вас получился. Сообщите, с какими именно затруднениями вы столкнулись.

3

Re: Программирование CANNY5 DUO

Спасибо за удачный пример! Насколько можно доверять симулятору, такая схема должна работать.
Если сможете подсказать, насколько она оптимальна, буду признателен.

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

Иконка вложения Управление выходом.cfd 1.24 кб, скачивался 417 раз, последний раз 2016-04-22 

4 (22-04-2016 18:48:06 отредактировано Dark-angel)

Re: Программирование CANNY5 DUO

Константин,  по этой теме. Подскажите как в примере шлюза  http://forum.canny.ru/viewtopic.php?id=233
c5duo_example1c.cfd указать
1 - не пропускать определенный пакет а не все пакеты с идентификатором  0х0123 из Can0 в Can1.  У нас есть определенно конкретный пакет который нужно заблокировать  0x06f8   0x8401 0x0c10 0x0583 0x8088, остальные  должны падать без изменений.
2 - в том же  примере  после того как шлюз видит пакет  IDL= 0х0123 с d0=0x10 он шлет пакет  IDL=0x0100 с байтами данных в Can0 - как сделать так чтоб он слал этот пакет в Can1?

Спасибо заранее. решаем проблему с    Gvidonovich сообща.

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

Иконка вложения c5duo_example1c_filter.cfd 4.96 кб, скачивался 366 раз, последний раз 2016-04-22 

5

Re: Программирование CANNY5 DUO

Константа конфигурации CAN у вас не соединена с регистром, просто подтащена к нему.
Блок №7 можно вообще исключить, и подключить регистр выходного значения напрямую к выходу блока №5, результат не изменится.
Если все работает так, как вы ожидали, то можно двигаться дальше.

Зададим конфигурацию второго интерфейса CAN  и включим драйвер шлюза.

При включенном драйвере шлюза, в диаграмму будут попадать сообщения только с теми ID, которые фигурируют в отборе шлюза. Поэтому, настроим один из шлюзов драйвера для работы в полностью прозрачном режиме, ретранслирующим сообщения c ID 0x308 насквозь без изменений, лишь для того, чтобы мы могли получать их в диаграмме. Сообщения с другими идентификаторами, не попадут в отбор и по умолчанию будут так же ретранслированы без изменений, однако в диаграмму они уже не попадут. Теперь контроллер будет пропускать весь трафик CAN через себя без изменений, попутно регистрируя сообщения с ID 0x308  и реагируя на изменения в них в соответствии с диаграммой.

Дополнительный вопрос: какие еще значения может принимать второй байт этого сообщения  кроме 0x84 и 0x85 ?

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

duo1.png, 3.92 кб, 258 x 64
duo1.png 3.92 кб, скачивался 436 раз, последний раз 2016-04-22 

duo2.png, 5.85 кб, 295 x 83
duo2.png 5.85 кб, скачивался 417 раз, последний раз 2016-04-22 

6

Re: Программирование CANNY5 DUO

Dark-angel пишет:

2 - в том же  примере  после того как шлюз видит пакет  IDL= 0х0123 с d0=0x10 он шлет пакет  IDL=0x0100 с байтами данных в Can0 - как сделать так чтоб он слал этот пакет в Can1?

Заменить регистры интерфейса CAN0 на регистры интерфейса CAN1 (см.приложенное изображение)

Dark-angel пишет:

1 - не пропускать определенный пакет а не все пакеты с идентификатором  0х0123 из Can0 в Can1.  У нас есть определенно конкретный пакет который нужно заблокировать  0x06f8   0x8401 0x0c10 0x0583 0x8088, остальные  должны падать без изменений.

Драйвер шлюза может отбирать и асинхронно (минуя диаграмму) обрабатывать сообщения только по ID. Как вариант можете полностью блокировать ретрансляцию сообщений с этим ID и отправлять сообщения из диаграммы "вручную": приняли пакет из CAN0, проанализировали, переслали в CAN1 или отбросили. Чуть сложнее чем в примере который вы модифицируете но направление правильное.

Может оказаться, что на практике для решения вашей задачи, вместо любого полученного сообщения с ID 0x06f8 достаточно отправлять сообщение с одним и тем же фиксированным набором данных. В этом случае диаграмма упроситься до элементарной.

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

duo3.png, 16.55 кб, 661 x 218
duo3.png 16.55 кб, скачивался 458 раз, последний раз 2016-04-22 

7

Re: Программирование CANNY5 DUO

В рамках задачи этот байт всегда 84 на входе шлюза, он не изменяется при работе машины. На выходе, соответственно, всегда 85

8

Re: Программирование CANNY5 DUO

Gvidonovich пишет:

В рамках задачи этот байт всегда 84 на входе шлюза, он не изменяется при работе машины. На выходе, соответственно, всегда 85

Это всё упрощает (см изображение)

Только определитесь:

Gvidonovich пишет:

Нужно на одном интерфейсе ловить сообщение с ID 0006FB

Dark-angel пишет:

пакет который нужно заблокировать  0x06f8   0x8401 0x0c10 0x0583 0x8088

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

duo4.png, 29.49 кб, 616 x 301
duo4.png 29.49 кб, скачивался 464 раз, последний раз 2016-04-22 

9

Re: Программирование CANNY5 DUO

ID сообщения 6FB

10 (22-04-2016 22:02:20 отредактировано Gvidonovich)

Re: Программирование CANNY5 DUO

С учетом ваших советов диаграмма приобрела вот такой вид.
Но вопросы остались:
- Передача измененного сообщения сделана верно?
- Правильно ли сделана регистрация сообщений с ID308 для второй части задачи?

Режим симуляции в CannyLab позволяет проверить работу выхода по событию, но как проверить работу фильтра?

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

Иконка вложения filter_trigger.cfd 3.1 кб, скачивался 396 раз, последний раз 2016-04-22 

11

Re: Программирование CANNY5 DUO

Gvidonovich пишет:

С учетом ваших советов диаграмма приобрела вот такой вид.
Но вопросы остались:
- Передача измененного сообщения сделана верно?
- Правильно ли сделана регистрация сообщений с ID308 для второй части задачи?

Режим симуляции в CannyLab позволяет проверить работу выхода по событию, но как проверить работу фильтра?

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

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

Немного перегруппировал элементы на диаграмме по смыслу и изменил комментарий шлюза 0.
Так же у вас была пара регистров за границами рабочей области диаграммы, внизу, убрал и их.

Работа периферии (драйверов/регистров) контроллера в симуляторе не имитируется, проверяйте "в железе".

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

Иконка вложения filter_trigger-3.cfd 2.43 кб, скачивался 411 раз, последний раз 2016-04-22 

12

Re: Программирование CANNY5 DUO

Спасибо!

13

Re: Программирование CANNY5 DUO

Эксперимент оказался удачным лишь частично.
Вторая часть диаграммы (с контролем ID308) работает нормально. Но с фильтром глухо - на CAN1 трафик просто отсутствует. Совсем.
Что упустили?
Подключение для теста: CAN0 фильтра подключен к автомобилю и в этой же точке подключен первый канал CAN анализатора, CAN1 фильтра подключен ко второму каналу анализатора. Наличие или отсутствие терминатора на канале подключенном к CAN1не меняет ситуацию.

14

Re: Программирование CANNY5 DUO

Проверили на столе - работает без нареканий.
Проверьте правильность физического подключения CAN1 и настройки скорости обмена второго канала вашего анализатора CAN.

15

Re: Программирование CANNY5 DUO

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

Параллельно вопрос: Реакция на ID308 есть при нормальном подключении (к машине подключен CAN0). Если к бортовой шине подключить CAN1, то реакция отсутствует. Хотя в диаграмме нет указания с какого порта ловить это ID.

16

Re: Программирование CANNY5 DUO

У нас тоже без изменений - контроллер CANNY 5 duo с системным ПО из состава  CANNY Lab 1.19 и диаграммой из этого поста:http://forum.canny.ru/viewtopic.php?pid=5111#p5111  работает при включении между двумя тестовыми CAN-подсетями. Кстати, ваш экземпляр контроллера успешно тестировался перед отгрузкой на этой же диаграмме.

Попробуйте поменять местами каналы CAN анализатора.

В диаграмме есть прямое указание на счет номера интерфейса отбора шлюза 1, посмотрите секцию "Активация отбора в диаграмму сообщений с ID 308"

17 (25-04-2016 20:52:07 отредактировано Gvidonovich)

Re: Программирование CANNY5 DUO

Тогда совсем непонятно. В диаграмме "правило отбора шлюза 1 CAN" Но с 0го порта это правило работает, а с первого нет.

Проверяю именно на этой диаграмме.

18

Re: Программирование CANNY5 DUO

Всего в драйвере шлюза CAN восемь отборов. Таким образом, вы можете выделить и независимо обработать сообщения с восемью различными ID из общего потока ретранслируемого шлюзом. Для каждого отбора задается номер интерфейса CAN (0 или 1) при поступлении с которого, сообщение должно быть отобрано. В рассматриваемой диаграмме отбор №1 сконфигурирован как отбор сообщений с ID 308 поступивших с интерфейса CAN-0

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

selector1.png, 10.5 кб, 642 x 150
selector1.png 10.5 кб, скачивался 425 раз, последний раз 2016-04-25 

19

Re: Программирование CANNY5 DUO

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

20

Re: Программирование CANNY5 DUO

Попробуйте эту диаграмму. Сначала подключите одним интерфейсом CAN к потоку и проверьте реакцию на 0x308 по светодиоду, а затем то же самое проверьте подключив контроллер к потоку другим интерфейсом CAN.

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

Иконка вложения filter_trigger-4.cfd 4.15 кб, скачивался 434 раз, последний раз 2016-04-25 

21 (26-04-2016 10:21:06 отредактировано Dark-angel)

Re: Программирование CANNY5 DUO

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

22

Re: Программирование CANNY5 DUO

Все что есть из литературы на сегодняшний день, это руководство доступное в CANNY Lab по нажатию клавиши F1. Данное неполное руководство перенесено в wiki: http://wiki.canny.ru и в дальнейшем будет наполняться уже там. Мы рассматриваем этот форум как важную часть документации и с готовностью отвечаем здесь на все актуальные вопросы пользователей.

23

Re: Программирование CANNY5 DUO

Константин, большое спасибо за помощь.. будем учиться..

24

Re: Программирование CANNY5 DUO

Проверил предложенную диаграмму (единственное изменил значение порога на 0400, чтоб сильно не газовать на стоянке), CANNY реагирует светодиодом с обоих портов. Те все штатно.

Попробовал диаграмму для проверки передачи сообщений фильтром без подключения к машине. Диаграмма во вложении. В таком варианте - тишина, те анализатор не видит сообщений от фильтра. Наличие/отсутствие терминатора не влияет никак.
Получается загадочная ситуация: анализатор слышит шину в авто, но не видит фильтр.

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

Иконка вложения Test.cfd 1005 б, скачивался 362 раз, последний раз 2016-04-26 

25

Re: Программирование CANNY5 DUO

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