51 (30-01-2017 18:19:28 отредактировано ЭллипсАвто)

Re: Примеры передачи сообщений CAN

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

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

Понял. Спасибо

Я так понял что от 1-до 5 может пройти гораздо большее кол-во сообщений?

52

Re: Примеры передачи сообщений CAN

ЭллипсАвто пишет:

...Я так понял что от 1-до 5 может пройти гораздо большее кол-во сообщений?

Да. 5 циклов по 500мс - 2500мс - все это время в регистре начала передачи сообщения CAN находится "1" и на каждом цикле выполнения диаграммы будет выполняться попытка передачи данных. 1 цикл - ~5мс (допустим). Итого, может получиться 500 сообщений.
Также неправильная отправка данных может привести к переполнению буфера передачи драйвера и часть отправляемых сообщений будет потеряна. В случае необходимости отправки большого количества сообщений с маленькими интервалами между ними, также может потребоваться проверка регистра готовности буфера передачи драйвера к приему нового сообщения и выполнять заполнение буфера передачи только при его готовности к приему данных. При отправке 5 сообщений по Генератору ШИМ и интервалами более 50мс такая проверка, скорее всего, не потребуется.

53

Re: Примеры передачи сообщений CAN

Добрый день! Помогите пожалуйста реализовать казалось бы простой алгоритм. Перечитал несколько раз как отправлять в  CAN и как индексировать коммутаторы на тройку понял. 4-е входа управления. При появлении единицы на трех первых отправляется посылка по одному и тому же id, но с изменением значения в одном байте. Т.е. появляется единица на первом входе начинается посылка с одним значением, появляется единица на втором, но не пропадает на первом значение посылки меняется в одном байте. Появляется на третьем, но не пропадает на первых двух, значение этого байта меняется на другое. При появлении единицы на 4м входе значение посылки по этому id не меняется, но добавляются еще около 15 других посылок с разными id.
Спасибо.

54 (07-03-2017 09:30:36 отредактировано ЭллипсАвто)

Re: Примеры передачи сообщений CAN

grantik.s пишет:

Добрый день! Помогите пожалуйста реализовать казалось бы простой алгоритм. Перечитал несколько раз как отправлять в  CAN и как индексировать коммутаторы на тройку понял. 4-е входа управления. При появлении единицы на трех первых отправляется посылка по одному и тому же id, но с изменением значения в одном байте. Т.е. появляется единица на первом входе начинается посылка с одним значением, появляется единица на втором, но не пропадает на первом значение посылки меняется в одном байте. Появляется на третьем, но не пропадает на первых двух, значение этого байта меняется на другое.
Спасибо.

По этой части вопроса можно так попробовать
https://forum.canny.ru/misc.php?action=pun_attachment&item=411&download=1

grantik.s пишет:

При появлении единицы на 4м входе значение посылки по этому id не меняется, но добавляются еще около 15 других посылок с разными id.

По этому есть пример №4

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

Иконка вложения 1.png 76.46 кб, скачивался 2905 раз, последний раз 2017-03-07 

55

Re: Примеры передачи сообщений CAN

Спасибо за ответ! Есть над чем поразмыслить.

56

Re: Примеры передачи сообщений CAN

ЭллипсАвто пишет:

По этой части вопроса можно так попробовать...

Тут вопрос спорный. Одно и то же сообщение отправится при разных комбинациях активных входов. Например сообщение с индексом 1 отправится как при активном входе 0 и остальных неактивных, так и при активном входе 1 и остальных неактивных и т.д.
Если соответствующие сообщения должны отправляться только при определенных комбинациях активных входов, то можно попробовать такой подход:
https://forum.canny.ru/misc.php?action=pun_attachment&item=412&download=1
Но этот подход не учитывает строгость очередности активации входов. Если требуется отправка сообщения только при активации входов в строгой очередности и сбрасывать последовательность отправки при пропадании сигнала на ранее активированных входах, то можно попробовать так:
https://forum.canny.ru/misc.php?action=pun_attachment&item=413&download=1

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

c7CANdemo1.png, 100.44 кб, 850 x 257
c7CANdemo1.png 100.44 кб, скачивался 2957 раз, последний раз 2017-03-07 

Иконка вложения c7CANdemo2.png 50.5 кб, скачивался 2651 раз, последний раз 2017-03-07 

57

Re: Примеры передачи сообщений CAN

Вы правы. Не учел этого)

58

Re: Примеры передачи сообщений CAN

Денис, спасибо! Разжевали очередной раз. Если мою задачу описать несколько иначе, то получается так- 4 входа, первые три 0, 1, 2 работают с одним и тем же id меняя в нем значение одного байта, но приоритет имеет 1 над 0 или 2 над 1 и 0. А 4й вход дает разрешение на трансляцию еще как минимум 15 id, при этом не оказывает влияния на состояние первых 3х входов. Свой вариант диаграммы выложу чуть позже.
Еще раз спасибо.

59

Re: Примеры передачи сообщений CAN

Добрый день! Уважаемые гуру, проведите плиз работу над ошибками. Мой вариант первой части схемы предполагает пока что изменение 5го разряда в зависимости от входов 5,7,6. Приоритет имеет 7й вход над 5м, 6й над 5м и 7м.
Спасибо.

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

Иконка вложения #1.cfd 5.84 кб, скачивался 473 раз, последний раз 2017-03-12 

60

Re: Примеры передачи сообщений CAN

grantik.s пишет:

Добрый день! Уважаемые гуру, проведите плиз работу над ошибками. Мой вариант первой части схемы предполагает пока что изменение 5го разряда в зависимости от входов 5,7,6. Приоритет имеет 7й вход над 5м, 6й над 5м и 7м.
Спасибо.

1. По данному алгоритму последовательность активации входов не строгая - используется только комбинация активных входов.
2. Комбинация блоков №№1,2,3,4 отправит сообщение в CAN только 1 раз при активации одного, первого (любого) входа. Последующая активация входов, при уже активном хотя бы одном входе, отправку в CAN не выполнит, т.к. на входе блока №4 (детектор переднего фронта) значение не изменится, т.е. будет присутствовать "1" и активация нового входа не вызовет появления переднего фронта на выходе блока №3.
Для проверки работы алгоритмов полезно использовать симулятор CannyLab. Он наглядно иллюстрирует особенности работы пользовательских диаграмм.

61

Re: Примеры передачи сообщений CAN

Добрый день! Денис, скажите пожалуйста в кэнилаб есть ограничение на количество элементов в диаграмме? В мануале к кэнилаб я что то не нашел. Диаграмму я составил по Вашей схеме, только немного доработал, т.к. за месяц экспериментов несколько раз менялось ТЗ и диаграмму пришлось дополнять.
Задача на данный момент немного изменилась. 16 ID, которые изменяют свои значения в зависимости от состояния 4х входов. Всего 7 возможных состояний по входам- 7, 7+6, 7+6+5, 10, 10+7, 10+7+6, 10+7+6+5.
В диаграмме у меня получилось 48 коммутаторов. В симуляторе, когда я проверял по отдельности каждый из блоков, все работало. Теперь, когда я в кучу все собрал нижние 2 ряда коммутаторов с 56го по 71 не работают.
Проверьте пожалуйста, где что не так.

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

Иконка вложения ver4.1.cfd 56.33 кб, скачивался 476 раз, последний раз 2017-04-17 

62

Re: Примеры передачи сообщений CAN

grantik.s пишет:

...Проверьте пожалуйста, где что не так.

На самом деле правильно не работает ни один из рядов коммутаторов (проверьте работу схемы в симуляторе). Причина - использование логического И (блоки №№10, 12, 14, 16, 19, 21, 23), которые на выходе могут выдавать только значения 0 или 1.
Очевидно, если я правильно понимаю логику работы диаграммы, вместо группы блоков №№2, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23 следует использовать коммутатор 1-в-16, на вход которого будет подаваться выходное значение блока №9 (Счетчик), а на Индекс - значение выхода блока №1 (конвертер). На выходы №№1, 3, 7, 8, 9, 11, 15 коммутатора (upd) 1-в-16 нужно будет подключить соответствующие соединительные линии (сети).

63

Re: Примеры передачи сообщений CAN

Как всегда все оперативно! Спасибо огромное!

64

Re: Примеры передачи сообщений CAN

umo2008 пишет:

...
Хочу разобраться...


CANNY 7 может отправить любое корректное сообщения CAN. Если вы знаете какое сообщение CAN закроет ЦЗ GM и знаете как получить сведения о скорости автомобиля GM, то диаграмма для решения вашей задачи будет очень похожа на диаграмму приведенную в Примере №2 в первом сообщении данной темы форума.

Если желаете продолжить обсуждение вашего вопроса, то не отвечайте здесь, а создайте, пожалуйста, новую тему на форуме.

65

Re: Примеры передачи сообщений CAN

Здравствуйте, подскажите по данному вопросу:
требуется отправлять в CAN шину несколько сообщений одновременно:
Условно опишу:
1 сообщение: ID=001, Message= 11 12 13 14 15 16 17 18, Period = 1000
2 сообщение: ID=002, Message= 21 22 23 24 25 26 27 28, Period = 1000
3 сообщение: ID=003, Message= 31 32 33 34 35 36 37 38, Period = 50
4 сообщение: ID=005, Message= 41 42 43 44 45 46 47 48, Period = 10

То есть разные ID  и сообщения, НО! и в том числе периоды отправки
Уже всю голову сломал
Поставил ШИМ генератор с минимально необходимым периодом - 10 \ 5
после него счетчик и проверка x==y сравнивает выход счетчика с 100 (10х100 = 1000) - период 1000
и если верно - устанавливает через коммутаторы нужный адрес и сообщение и сбрасывает счетчик на 0

с одним сообщением - работает
а вот как добавить еще остальные сообщения,
Если добавляю параллельно еще "x==y" с другим значением, например 5 (10х5 = 50) - период 50, то
при запуске отладки, все время натыкаюсь на ошибку "выход используется более одного раза" или подобную, дословно не помню

66

Re: Примеры передачи сообщений CAN

Alyans пишет:

...требуется отправлять в CAN шину несколько сообщений одновременно...

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

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

Иконка вложения can_multisend.cfd 6.33 кб, скачивался 516 раз, последний раз 2019-04-03 

67

Re: Примеры передачи сообщений CAN

Добрый день!
Подскажите пожалуйста пример для отправки нескольких  сообщений CAN при появлении  минусов на входах контроллера, например появился минус на канале 8 началась передача сообщения 1 в шину CAN, появился минус на канале 9, началась трансляция еще на одном канале одновременно? как это реализовать? как сделать это для трансляции 1 сообщения я разобрался, а для нескольких не догоняю(

68

Re: Примеры передачи сообщений CAN

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

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

Иконка вложения can_multisend_io.cfd 4.33 кб, скачивался 435 раз, последний раз 2019-07-09 

69 (11-09-2019 17:48:07 отредактировано Alyans)

Re: Примеры передачи сообщений CAN

И снова про несколько одновременных сообщений.
требуется отправлять 12 сообщений с интервалами:
20, 50, 50, 100, 100, 500, 500, 500, 500, 1000, 1000, 1000
Генератор ШИМ ставлю на минимльно возможное 2мс (заполнение 1мс)
При этом минимальный период у меня 20мс, максимальный 1000мс
Делим 20 \ 2 - получаем 10 сообщений я могу "впихнуть" на счётчик, который будет считать выход генератора ШИМ
То есть при значении счетчика 0 - отправляю первое сообщение (например с периодом 20), при значении 2 - второе (например с периодом 50) , ...... ,  при значении 10 - снова первое с периодом 20 и т.д. до знчения счетчика 500 - сброс на 0.

Вопрос: как уместить и отправлять еще 2 сообщения, не меняя интервалов.
И маленький оффтоп: как нибудь можно мониторить формируемые сообщения кан шины в симуляторе?

70

Re: Примеры передачи сообщений CAN

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

71

Re: Примеры передачи сообщений CAN

Alyans пишет:

И снова про несколько одновременных сообщений...

Посмотрел на задачу внимательнее. При использовании ранее показанного подхода с отправкой нескольких сообщений (см. ответ) отправка сообщений происходит не по счетчику и генератору ШИМ, а по наличию не отправленных сообщений; генератор ШИМ там используется только для расчета интервалов времени. Основная проблема может быть в длительности цикла выполнения диаграммы. При большой диаграмме цикл диаграммы может длиться 5-10мс. Тогда сообщения с большими периодами отправки могут не успевать отправляться в интервалах между отправкой сообщений с меньшими периодами и более высокими приоритетами. Можно попробовать ставить для сообщений с большим периодом более высокие приоритеты, тогда они будут вклиниваться в поток сообщений с маленькими периодами, но это может привести к нарушению периодичности отправки сообщений с малыми периодами.

Alyans пишет:

...как нибудь можно мониторить формируемые сообщения кан шины в симуляторе?

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

72 (17-09-2019 14:01:16 отредактировано Alyans)

Re: Примеры передачи сообщений CAN

Alyans пишет:

И снова про несколько одновременных сообщений.

Задачу решил. С помощью экселя и какой-то там матери smile удалось рассчитать таблицу время\сообщение и "вклинить" туда все сообщения с нужными периодами. Получилось небольшое смещение по коротким периодам (20->24, 50->48, 100->96) но это, как оказалось, не столь критично.

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

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

Так делал изначально, но очень ненаглядно: приходится "собирать" все кусочки одного сообщения с каждого коммутатора, "переворачивать" и только потом видеть что же отправляется.
Как вариант: если бы была возможность чтобы "CAN\LIN монитор" мог мониторить сам себя, даже пусть с записанной диаграммой в контроллер.
Или в интерфейсе CannyLab чтобы было какое либо окошко с подобным монитором, где уже отображается лог формируемых на CAN\LIN шине сообщений и их периодичность. (мне кажется это несколько проще в реализации чем первый вариант). А так же отображение состояния регистров тоже бы не помешало.
На данном этапе приходится записывать диаграмму, подключать внешнее питание к контроллеру (отключать USB), подключаться сторонним CAN Hacker'ом и уже смотреть в нём что получается на выходе.

73

Re: Примеры передачи сообщений CAN

Во вариант, о котором я говорил (см.вложение).
Сообщение с ID=0x20 (самое частое) конечно немного страдает: иногда задерживается, иногда уходят 2 подряд.
В регистре D1:D0 сообщения ID=0x20 в шину передается длительность программного цикла, она для этой диаграммы приблизительно 1,5мс (между 1 и 2мс).
Можно попробовать немного поиграть периодами отправки для улучшения результатов.

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

Иконка вложения can_multisend_12.cfd 13.11 кб, скачивался 394 раз, последний раз 2019-09-17 

74

Re: Примеры передачи сообщений CAN

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

75 (07-12-2019 08:41:05 отредактировано jordan781)

Re: Примеры передачи сообщений CAN

Привет Денис помогите пожалуйсто нужно схема как при логическоя (0) на первой канал отправлят один пакет циклично с интервалом 500мс.  потом при появлении (1) отправить другие три пакета  опять с интервалом 500мс.между ними.Тоже нужно в ето схема добавить и второй канал примерно (3) кога на него появитса (1) отправить другой пакет в шине.