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

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

2 hours ago, AKK said:

Ну, как-то так.

Ну это по вашему. 
А в реальности будет так:
image.thumb.png.c04388d383708e2c1011ebfb2043d407.png

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

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


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

9 часов назад, bezobraznic сказал:

Блоки также объединены rs485 для внешнего мониторинга.

А зачем? Если уже есть CAN.

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


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

14 minutes ago, jcxz said:

А зачем? Если уже есть CAN.

Тоже думаю, что проще подключить внешний мониторинг через один из блоков. Его же и назначить "мастером". И пускай он периодически шлет себе запросы с идентификаторами от IDmin до IDmax, а все остальные слушают линию и отмечают существующие идентификаторы в своей внутренней таблице. Хотя, с другой стороны, коль в сети будет мастер, зачем остальным знать идентификаторы присутствующих устройств? Как в том же примере про бортовую CAN-шину автомобиля: там есть один мастер (ЭБУ) и куча слейвов (причем количество слейвов варьируется в зависимости от "фарша"). Не нашел мастер модуль ESP — ОК, значит, машина будет без ESP ездить, не нашел контроль стеклоподъемников — ОК, пользователь ручками окна открывать/закрывать будет…

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

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


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

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

каждый блок, регистрируюсь в сети при включении посылает "address claim" со своим адресом и NAME (не знаю как поточнее перевести, но в этом NAME целый пласт инфы от производителя до кода с кратким описанием функционала), если адрес свободен, то занимает его если адрес занят, то там целая процедура разруливания кто и с какого адреса работать будет. Но смысл в том, что если адрес занят, то блок занявший этот адрес отвечает на сообщение что адрес занят. А если послать запрос "addresss claim" на широковещательный адрес (0x255), то ответят ВСЕ блоки с указанием адресов по которым они общаются. После чего зная занятые адреса можно запросить у каждого из блоков его HARD ID, SOFT ID и т.д. Там еще много тонкостей взаимодействия расписано, прочитайте документ, не пожалеете. Тем более в нем всего 40 страниц текста.

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

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

Цитата

Данная сеть используется в грузовых автомобилях. Кто там важнее: контроллер двигателя, контроллер трансмиссии или контроллер АБС? Зачастую координатора просто нет, что позволяет гибко нафаршировывать автомобиль примочками: нет АБС, да х... на него всем остальным блокам, нашелся в сети контроллер круиз-контроля, добро пожаловать в общую сеть, дружище. А кто там вякает про то, что он координатор, ну попробуй, может что и получится... :-).

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

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

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

 

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

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


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

Да даже для 29-битных адресов можно придумать процедуру автоматической идентификации навроде аналогичной процедуры у Dallas в их мерзком 1-wire: мастер поочередно по одному биту перебирает и регистрирует ответы. Но и здесь без мастера не обойтись.

А вот меня все терзает любопытство: что ж за одноранговая сеть  такая, где все устройства абсолютно одинаковые? Чем она должна заниматься, если нет мастера, через который выполняется внешнее управление и мониторинг?

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


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

4 hours ago, jcxz said:

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

Разрядность 11 бит.

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


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

27 минут назад, bezobraznic сказал:

Разрядность 11 бит.

С этого надо было начинать!

Тогда вообще никакой проблемы нет, всё элементарно: Выделить одно фиксированное значение адреса (18-битное) и пусть каждый узел периодически отправляет на адрес состоящий из этих 18 старших бит + 11 бит собственного уникального ID (в младших 11-ти битах), какое-то сообщение "я здесь, такой-то". А все узлы подпишутся на приём этого адреса с маскированными младшими 11-ю битами.

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


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

22 minutes ago, jcxz said:

С этого надо было начинать!

Тогда вообще никакой проблемы нет, всё элементарно: Выделить одно фиксированное значение адреса (18-битное) и пусть каждый узел периодически отправляет на адрес состоящий из этих 18 старших бит + 11 бит собственного уникального ID (в младших 11-ти битах), какое-то сообщение "я здесь, такой-то". А все узлы подпишутся на приём этого адреса с маскированными младшими 11-ю битами.

А во времени их надо разделять?

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


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

Посылки от блоков.

Я может глупые вопросы задаю, но это мое первое применение CANа.

За идею спасибо чую, это то, что надо!

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

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


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

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

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


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

20 часов назад, bezobraznic сказал:

Посылки от блоков.

Задайте вопрос более вразумительно и развёрнуто.

16 часов назад, amaora сказал:

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

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

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


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

13 минут назад, jcxz сказал:

Задайте вопрос более вразумительно и развёрнуто.

Вы написали выделить 18 +11битный ID  для посылок от блоков. Эти посылки надо во времени разделять?

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


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

45 минут назад, bezobraznic сказал:

Эти посылки надо во времени разделять?

В смысле "разделять"? Какие "эти" и от кого их "разделять"???  :wacko2:

Вот у вас 1-й CAN-узел, у него уникальный_ID=XXX. И 2-й, у которого уникальный_ID=YYY. XXX и YYY - 11-битные.

И есть некая константа в ПО - KKK (18-битная), которая задаёт старшие 18 бит адреса для всех сообщений данного протокола.

Так вот - 1-й узел должен периодически посылать CAN-кадр с ID = KKK << 11 | XXX. А 2-й узел - с ID = KKK << 11 | YYY. Период отправки - любой удобный. Данные кадра - любые (например - какая-нить дополнительная инфа об узле)

И все узлы, которые желают принимать такие кадры, должны подписаться на приём сообщений с ID = KKK << 11 | MMM, где: MMM - маска, маскирующая ненужные биты адреса для фильтра входящих CAN-кадров.

 

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

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


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

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

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

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

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

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

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

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

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

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