76 (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 сообщения, не меняя интервалов.
И маленький оффтоп: как нибудь можно мониторить формируемые сообщения кан шины в симуляторе?

77

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

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

78

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

Alyans пишет:

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

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

Alyans пишет:

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

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

79 (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'ом и уже смотреть в нём что получается на выходе.

80

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

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

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

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

81

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

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

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

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

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

83

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

Такой вопрос:
Требуется ждать по CAN шине сообщения:
1F4011F3     03 19 02 01 00 00 00 00
И отвечать на него ОДНИМ сообщением:
1F40F311   01 00 00 00 00 00 00 00

Одновременно с этим ждать другого сообщения:
1F4011F3     05 22 F1 91 F1 81 00 00
И отвечать 7ю сообщениями подряд с периодом 20мс
1F40F311   22 01 00 00 00 00 00 00
1F40F311   22 02 00 00 00 00 00 00
1F40F311   22 03 00 00 00 00 00 00
1F40F311   22 04 00 00 00 00 00 00
1F40F311   22 05 00 00 00 00 00 00
1F40F311   22 06 00 00 00 00 00 00
1F40F311   22 07 00 00 00 00 00 00

Проблема возникла со чтением. В найденом на форуме примере используется D-триггер, и после чтения сообщения оно остается запомненным и после первой отправки надо как то ее прервать до поступления следующего сообщения

84

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

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

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

Иконка вложения c7_2events.cfd 6.71 кб, скачивался 213 раз, последний раз 2019-12-09 

85

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

jordan781 пишет:

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

Задача решается с использованием коммутаторов. Пример диаграммы во вложении.

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

Иконка вложения c7_io_events.cfd 4.98 кб, скачивался 178 раз, последний раз 2019-12-09 

86 (10-12-2019 06:56:23 отредактировано jordan781)

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

Спасибо опять класноя подержка!!!Возникла такоя ситуация когда начал загрузить диаграму на контролера появилос окно на котором написано что версии контролера и ето что хочу записать несовместимое нужно обновление контролера,как ето могу сделать?

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

Иконка вложения Без име.png 263.7 кб, скачивался 32 раз, последний раз 2019-12-10 

87

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

jordan781 пишет:

Спасибо опять класноя подержка!!!Возникла такоя ситуация когда начал загрузить диаграму на контролера появилос окно на котором написано что версии контролера и ето что хочу записать несовместимое нужно обновление контролера,как ето могу сделать?

Это предупреждение о несоответствии используемой версии CannyLab и системного программного обеспечения. Мы рекомендуем всегда использовать самые последние версии среды разработки и системного ПО.
Процесс записи/обновления системного ПО в контроллере описан в wiki.
Файлы актуального системного ПО контроллеров расположены в папке соответствующей версии среды разработки CannyLab в подпапке ccx (..\cannylab_vX_XX\ccx\).

88

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

Здравствуйте. Подскажите как отправить по адресу 0x664: 0xXX 0xXX 0xXX 0x40 0xXX 0xXX 0xXX 0xXX при появлении импульсного сигнала плюса одном из входов и 0x664: 0xXX 0xXX 0xXX 0x00 0xXX 0xXX 0xXX 0xXX при подаче следующего импульса на этом же входе
И при этом выдать на любой выход при появлении по адресу 0x664: 0xXX 0x00 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX плюса

89

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

Deman42 пишет:

...Подскажите как отправить по адресу 0x664: 0xXX 0xXX 0xXX 0x40 0xXX 0xXX 0xXX 0xXX при появлении импульсного сигнала плюса одном из входов и 0x664: 0xXX 0xXX 0xXX 0x00 0xXX 0xXX 0xXX 0xXX при подаче следующего импульса на этом же входе...

Многое зависит от режима использования контроллера (стандартный, шлюз,...) и, соответственно, его типа (CANNY 7, CANNY 7.2 duo,...).
В стандартном варианте решение базируется на примере №3 данной темы форума. Немного меняется условие формирования и отправки сообщения, для возможности управления импульсными сигналами с одного канала контроллера (например, см.вложение: при появлении положительного потенциала выполняется однократная отправка сообщения).
Обратите внимание, что в примерах выполняется отправка всего сообщения, т.е. значения остальных байт, помеченных 0xXX, должны быть заданы пользователем (в виде констант или как-либо еще).

Deman42 пишет:

...при этом выдать на любой выход при появлении по адресу 0x664: 0xXX 0x00 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX плюса...

В общем виде прием сообщений из CAN рассмотрен в соответствующих разделах нашего online-справочника.

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

example_can_send.png, 21.08 кб, 781 x 301
example_can_send.png 21.08 кб, скачивался 105 раз, последний раз 2020-06-05 

90

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

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

...Подскажите как отправить по адресу 0x664: 0xXX 0xXX 0xXX 0x40 0xXX 0xXX 0xXX 0xXX при появлении импульсного сигнала плюса одном из входов и 0x664: 0xXX 0xXX 0xXX 0x00 0xXX 0xXX 0xXX 0xXX при подаче следующего импульса на этом же входе...

Многое зависит от режима использования контроллера (стандартный, шлюз,...) и, соответственно, его типа (CANNY 7, CANNY 7.2 duo,...).
В стандартном варианте решение базируется на примере №3 данной темы форума. Немного меняется условие формирования и отправки сообщения, для возможности управления импульсными сигналами с одного канала контроллера (например, см.вложение: при появлении положительного потенциала выполняется однократная отправка сообщения).
Обратите внимание, что в примерах выполняется отправка всего сообщения, т.е. значения остальных байт, помеченных 0xXX, должны быть заданы пользователем (в виде констант или как-либо еще).

Deman42 пишет:

...при этом выдать на любой выход при появлении по адресу 0x664: 0xXX 0x00 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX плюса...

В общем виде прием сообщений из CAN рассмотрен в соответствующих разделах нашего online-справочника.

Отправить нужно только D3 0x40 остальные менять не нужно. Оборудование canny 7. Не могу понять как один байт отправить

91

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

Deman42 пишет:

...Отправить нужно только D3 0x40 остальные менять не нужно. Оборудование canny 7. Не могу понять как один байт отправить...

Отправлять в CAN по 1 байту не получится. Отправка выполняется целыми сообщениями.
Вариант решения: принимать и сохранять (с помощью Триггеров) сообщения с данным ID; по сигналу от кнопки отправлять сообщение, состоящее из данных последнего принятого сообщения с этим ID, но с заменой нужного байта.
Также следует учитывать периодичность следования этого сообщения в шине, а также то, что сообщения с этим ID уже шлет какой-то узел сети и однократной посылкой исправленного сообщения можно не добиться нужного результата.
Возможно, в данном случае следует использовать CANNY 7.2 duo в режиме CAN-шлюза.

92

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

Добрый день всем! Прошу помочь с реализацией решения. Ситуация следующая: требуется отправлять в CAN около 8 сообщений (для примера показал только 4) с различной периодичностью: 10, 50, 100, 1000 ms. Скорость 500k. Диаграмму я сделал, и сообщения отправляются в CAN с периодичностью, близкой к указанной. НО! С увеличением загрузки шины внешним трафиком начинают серьезно скакать тайминги сообщений, передаваемых CANNY (вплоть до увеличения периода в 5 раз).  Как видно из схемы, условием старта генератора ШИМ и, как следствие, инициирования передачи, является условие отсутствие в шине внешнего трафика. Это в принципе не правильно, потому что каждый раз, когда в can появляется трафик, генератор останавливается, а когда шина освобождается, запускается снова. Отсюда и закономерность: чем выше загрузка шины, тем больше разброс интервалов передачи. Логично было бы, чтобы генератор работал непрерывно, а для установки логической «1» в «регистр старт передачи CAN0» было условие отсутствие данных в CAN. Но в таком случае, как показал эксперимент, в шине возникает куча сообщений с ошибками передачи.
Отсюда собственно, и вопрос: как корректно реализовать передачу сообщений с CANNY, чтобы не возникло конфликтов и соблюдались тайминги при любой загрузке шины.
И второе: каков такт работы регистра «Рег. есть данные CAN0»: 1ms, как и у всей диаграммы, или меньше (т.е. с какой частотой он проверяет шину на наличие данных)?
Для справки: CAN J1939, генерим сообщения в CAN и смотрим трафик с помощью Vector CANalyzer.

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

Иконка вложения Отпр.png 475.47 кб, скачивался 33 раз, последний раз 2020-09-30 

93

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

Попробуйте применить подход из диаграммы, приложенной к сообщению на этой же странице выше:
https://forum.canny.ru/viewtopic.php?pid=8054#p8054

Данные всех без исключения входных регистров фиксируются каждый проход диаграммы: https://wiki.canny.ru/index.php?title=C … 0.B8.D1.8F
Время исполнения каждого прохода диаграммы зависит от ее размера и общей нагрузки на контроллер, может варьироваться в процессе работы и может быть получено из соответствующего регистра: https://wiki.canny.ru/index.php?title=C … 0.BC.D1.8B

И может быть с высокой точностью учтено в диаграмме: https://wiki.canny.ru/index.php?title=T … 1%81%D1%8B


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

в шине возникает куча сообщений с ошибками передачи.

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

Диаграммы лучше прикладывать в виде исходников - CFD-фалов, а не картинок.

94

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

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

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

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

Хорошо, как сделаю, отпишусь о результатах.

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

Иконка вложения Снимок.PNG 82.94 кб, скачивался 28 раз, последний раз 2020-09-30 

95

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

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

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

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

Иконка вложения Trace1.png 36.87 кб, скачивался 33 раз, последний раз 2020-10-01 

Иконка вложения Trace2.png 60.72 кб, скачивался 27 раз, последний раз 2020-10-01 

Иконка вложения Пример отправки.cfd 15.24 кб, скачивался 85 раз, последний раз 2020-10-01 

96 (27-01-2021 14:06:21 отредактировано Declarius)

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

Добрый день.

Задача такая:

При появлении на канале 0 минуса отправлять в шину сообщение на скорости 250 kb по адресу
0x0c010306  FF FF FF E0 F3 FF FF FC c периодичностью 1раз в 50 мс.
При появлении минуса на канале 1 подменять D3 D2 в сообщении на FF FC
При появлении минуса на канале 2 подменять D3 D2 в сообщении на FF 7D
При появлении минуса на канале 3 подменять D3 D2 в сообщении на FF DF

Прошу проверить логику схемы, вдруг я что-то упустил.
Пускаю прибор в сеть результат 0
Сниффер видимо придется собирать, посмотреть что canny в сеть выдает.

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

Иконка вложения can4.png 79.01 кб, скачивался 6 раз, последний раз 2021-01-27 

Иконка вложения АКПП без диодов.cfd 3.13 кб, скачивался 24 раз, последний раз 2021-01-27 

97

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

Declarius пишет:

Добрый день.

Задача такая:

При появлении на канале 0 минуса отправлять в шину сообщение на скорости 250 kb по адресу
0x0c010306  FF FF FF E0 F3 FF FF FC c периодичностью 1раз в 50 мс.
При появлении минуса на канале 1 подменять D3 D2 в сообщении на FF FC
При появлении минуса на канале 2 подменять D3 D2 в сообщении на FF 7D
При появлении минуса на канале 3 подменять D3 D2 в сообщении на FF DF

Сам спросил и сам ответил.
Собрал сниффер и увидел, что диаграмма работает.
Может кому-то пригодится.

98

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

Declarius пишет:

Может кому-то пригодится.

Спрасибо!

99 (18-02-2021 17:57:38 отредактировано yurka_)

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

Может кому пригодится... А то без поллитра тут не разберешься!
Проект для стенда без применения к живому автомобилю...

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

Для хранения полученных данных используются регистры энергонезависимой памяти.

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

Иконка вложения Макет маркетинг_Canny7.cfd 42.97 кб, скачивался 21 раз, последний раз 2021-02-18