Перейти к содержанию
    

Перекличка блоков по CAN

1 hour ago, jcxz said:

PS: Вроде же совершенно примитивный способ. Неужто неясно? :unknw:

Можно еще проще сделать: выделить "служебный" идентификатор, скажем, 1 - его не занимать ничем, кроме "переклички". И периодически каждое звено шлет пакет с этим идентификатором. А в пакете  два байта данных — идентификатор устройства, которое шлет данный пакет.

И не нужно будет мучиться с 29-битными идентификаторами (тем более, никто их в реальной жизни не использует).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Eddy_Em сказал:

Можно еще проще сделать: выделить "служебный" идентификатор, скажем, 1 - его не занимать ничем, кроме "переклички". И периодически каждое звено шлет пакет с этим идентификатором. А в пакете  два байта данных — идентификатор устройства, которое шлет данный пакет.

...И получить кучу ошибок на шине из-за коллизий в поле данных.

 

Цитата

И не нужно будет мучиться с 29-битными идентификаторами (тем более, никто их в реальной жизни не использует).

Не надо говорить за всех.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие коллизии? Не бывает в CAN коллизий! Если шина занята, то просто отправляющий будет ждать, пока освободится. Другое дело, что если N устройств будет одновременно пытаться что-то в шину сказать, они одновременно и не "передумают". Я, например, ограничиваю количество попыток отправки сообщения. Как оно выходит, устанавливается соответствующая ошибка (например, отсутствие ACK, коллизия или еще что).

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему , считают что в CAN, все устройства должны постоянно стучать в шину . Можно назначить одно устройство мастером , и оно будет периодически отправлять сообщения например с ID 0x01 , и первый байт данных 01 затем 02 потом 03 итак далее в зависимости от количества узлов  . Остальные узлы настроены на приём IDx01 , и соответственно принимают все запросы мастера . После приёма сравнивают первый байт данных со своим уникальным номером , и если он совпадает ,один узел отправляет одно сообщение мастеру с другим ID например 02  и любых 8 байт данных о своём состояний  . Мастер принимает эти данные , и решает продолжать обмен с этим узлом или перейти к следующему .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, геннадий75 сказал:

Почему , считают что в CAN, все устройства должны постоянно стучать в шину . Можно назначить одно устройство мастером ,

Потому что нужно читать исходную постановку задачи:

26.10.2020 в 10:20, bezobraznic сказал:

Есть N-блоков соединенных CAN-шиной.  Главного master-блока на шине нет, все равнозначные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/27/2020 at 12:27 PM, jcxz said:

А теперь объясните - каким образом такое организовать поверх CAN? Вы знаете как он (CAN) работает?  :wink:

Вопрос был не о том какие есть красивые и мегастандартные протоколы, а о методе реализации поверх CAN.

Не совсем понимаю ваш вопрос, возможно у нас проблема с терминологией. В моем случае под CAN я понимаю общие физические принципы передачи данных по сети (типа RS485), под протоколами верхнего уровня SAE J1939 то, каким правилам подчиняются данные передаваемые по этой самой сети (типа MODBUS).

Т.е. ваша передача данных поверх CAN, если я все правильно понял, и есть то, что я понимаю под протоколами верхнего уровня, т.е. SAE J1939. И я не призываю использовать именно данный стандарт (кстати действительно мега-крутой, над ним не одна сотня голов поумнее наших с вами работала не один год). Вопрос был - как организовать сканирование устройств в сети, я и привел пример как это осуществляется в данном протоколе, который уже ни один год УСПЕШНО работает на сотнях тысяч грузовых машин ВСЕХ крупнейших производителей данной техники и помирать, что показательно, не собирается.

On 10/27/2020 at 12:27 PM, jcxz said:

Что за "сеть"? Речь идёт о CAN или о какой-то другой сети?

Если о CAN, то у ТС имхо не тот случай. Так как у него все узлы - одинаковые, с одинаковым ПО, различающиеся только уникальным ID (кстати - ТС так и не сказал какой разрядности у него ID?). И если этот ID имеет большую разрядность (>=29 бит), то таким образом, как Вы привели пример, по CAN обмен организовать не удастся. Без предварительного назначения более коротких адресов по какому-то алгоритму.

Чтобы было более понятно, подумайте что будет с "этими нафаршированными примочками" в вашем грузовом автомобиле, если в эту сеть добавить ещё один идентичный "контроллер двигателя"?... А если ещё 5 добавить? :biggrin:

 

PS: Вопрос к ТС - какова разрядность уникальных ID (серийных номеров) узлов у вас? А то может всё гораздо проще решается (если разрядность малая)...

Да, речь идет о CAN сети. Разрядность CAN ID - 29 бит. Протокол SAE J1939-81, который я привел в пример, в том числе и определяет каким образом блоки в сети договариваются о своих sourse address (младшие 8 бит CAN ID). 

Добавить еще один контроллер двигателя никто не мешает, если производителем контроллера это предусмотрено. По факту в подавляющем большинстве случаев контроллер двигателя относится к одноадресным неконфигурируемым устройствам (ни разу не видел автомобиль с двумя дизельными двигателями). Но! Если взять контроллер гидравлического распределителя (для грузоподъемной техники), управляемого по CAN, то там есть возможность задания адреса. Никто не станет делать отдельный уникальный девайс на каждую секцию гидрораспределителя, это попросту глупо. Что хорошо коррелирует с данным конкретным случаем. В качестве дополнительных примеров могу привести джойстики (устанавливается до 4 шт в систему) если поковыряться еще можно накопать устройств с одинаковым ПО.

Разрядность уникального идентификатора устройства составляет согласно спецификации 64 бита (т.е. все 8 байт информации), из них только 21 бит приходится на собственно идентификационный номер, остальные - код производителя, выполняемая функция и т.д.

Еще вопросы? (отвечаю медленно, т.к. часто в разъездах, работы много).

On 10/27/2020 at 11:52 AM, AlexandrY said:

Т.е. есть в сети J1939 координаторы и еще какие. И они обязательны. 

Назовите мне блок координатор в CAN сети, ну скажем грузовика производства КАМАЗ?? Ну или любого другого, на Ваш выбор. Просветите, кто там координатор, буду благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть там координатор, он же мастер сети - ЭБУ, без которого машина с места не сдвинется сама...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 minutes ago, Eddy_Em said:

Есть там координатор, он же мастер сети - ЭБУ, без которого машина с места не сдвинется сама...

ЭБУ - электронный блок управления, собирательное название. Конкретнее пожалуйста. Блок управления чем? Двигателем? Ясен пень, без него не двинется, ведь двигателем управлять нечему. Только причем тут координатор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, Eddy_Em said:

Есть там координатор, он же мастер сети - ЭБУ

А фары, стеклоподъёмники, стеклоочистители и кто там ещё сидит на шине, смогут работать? Авайрийку элементарную включить же можно будет)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, haker_fox said:

А фары, стеклоподъёмники, стеклоочистители и кто там ещё сидит на шине, смогут работать? Авайрийку элементарную включить же можно будет)

Конечно смогут, если все устройства, завязанные на кнопки и исполнительные элементы в наличии. Если не верите - поэкспериментируйте: выдерните контроллер двигателя, а потом попробуйте поуправлять чем-либо, не завязанным на двигатель.

Или под ЭБУ вы имели ввиду контроллер управления электрооборудованием. Ясен пень, в этом случае стеклоподъемники работать не будут, ведь управляющие сигналы на двигатели стеклоподъемников формирует именно контроллер электрооборудования.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, AKK said:

Или под ЭБУ вы имели ввиду контроллер управления электрооборудованием.

Нет, это Эдди что-то подразумевал)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

P.S. А у меня в "гешике" вообще CAN-шина есть только для подключения диагностики ☺

Все датчики и исполнительные устройства подключаются напрямую к ЭБУ.  Но у меня машинка старая - ей 10 лет уже. Возможно, в современных автомобилях заводят несколько CAN-шин. Но я сомневаюсь, что найдется горе-инженер, который на CAN-шину жизненно важных цепей (ESP, ABS и управление двигателем) повесит не особо важные вроде фар, стеклоподъемников и магнитол…

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, haker_fox сказал:

А фары, стеклоподъёмники, стеклоочистители и кто там ещё сидит на шине, смогут работать?

Да, да и чаще всего периферия не сидит на кане.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, AKK сказал:

По факту в подавляющем большинстве случаев контроллер двигателя относится к одноадресным неконфигурируемым устройствам

Вот! Вот в этом и причина почему это работает в той системе - адрес фиксированный и заранее известный всем остальным участникам обмена по шине. У ТС совсем другая ситуация, поэтому ваш пример с автомобилем не подходит к данной теме.

5 часов назад, AKK сказал:

Разрядность уникального идентификатора устройства составляет согласно спецификации 64 бита (т.е. все 8 байт информации), из них только 21 бит приходится на собственно идентификационный номер, остальные - код производителя, выполняемая функция и т.д.

Еще вопросы? (отвечаю медленно, т.к. часто в разъездах, работы много).

Мой вопрос касался конкретно процитированного фрагмента вашего поста:

27.10.2020 в 06:11, AKK сказал:

Если вкратце (исходя из SAE J1939): каждый блок, регистрируюсь в сети при включении посылает "address claim" со своим адресом и NAME

Если предположить, что уникальный ID устройства (его серийный номер, SN) не влазит внутрь 29-битного CAN-ID (например SN - 64-битный), то как это (процитированное) реализовать поверх CAN?

Только по существу, без отсылок во всякие умные стандарты.

 

PS: Как уже стало известно, у ТС ID == 11-битный. Поэтому его этот вопрос не касается - у него всё гораздо проще реализуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...