76

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-триггер, и после чтения сообщения оно остается запомненным и после первой отправки надо как то ее прервать до поступления следующего сообщения

77

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

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

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

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

78

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

jordan781 пишет:

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

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

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

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

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

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

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

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

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

80

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

jordan781 пишет:

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

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

81

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 плюса

82

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 кб, скачивался 302 раз, последний раз 2020-06-05 

83

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. Не могу понять как один байт отправить

84

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

Deman42 пишет:

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

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

85

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 кб, скачивался 137 раз, последний раз 2020-09-30 

86

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-фалов, а не картинок.

87

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

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

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

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

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

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

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

88

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

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

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

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

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

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

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

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

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

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

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

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

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

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

90 (15-04-2023 18:07:15 отредактировано Dmitry30Rus)

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

Константин, добрый день!

Подскажите, пожалуйста, чем обусловлено в примере отправки сообщений CAN №4 https://forum.canny.ru/files/example_se … 4_prev.png
последовательность срабатывания блоков для отправки сообщений:
а именно сначала "рег.старт передачи CAN" переводится в активное положение, а в следующем цикле когда он становится неактивным происходит заполнение буфера отправки сообщений данными.

Это правильная логика отправки сообщений или лучше все таки сначала заполнить буфер отправки сообщений данных CAN IDL, IRL и прочее и лишь потом поставить "рег.старт передачи CAN" в положение "1"? Удобнее всего это сделать в следующем цикле с помощью блока "буфер" судя по всему.

Скриншоты из симулятора прилагаю:

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

Иконка вложения итерация 1.JPG 303.38 кб, скачивался 46 раз, последний раз 2023-04-15 

Иконка вложения итерация 2.JPG 301.83 кб, скачивался 47 раз, последний раз 2023-04-15 

91

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

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

Происходит заполнение регистров данными следующего сообщения.

Это правильная логика отправки сообщений или лучше все таки сначала заполнить буфер отправки сообщений данных CAN IDL, IRL и прочее и лишь потом поставить "рег.старт передачи CAN" в положение "1"? Удобнее всего это сделать в следующем цикле с помощью блока "буфер" судя по всему.

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

92

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

Константин, спасибо! Стало понятно.