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

Есть ли какой-нибудь стандартный утилитарный протокол поверх CAN?

В общем, хочу понять, есть ли что-либо готовое в природе, что позволяет унифицированно внедрить это в кучу разных железок, потом подключиться к шине и чтобы эти железки автоматически рапортовали, кто они, что умеют, чего от них ждать и что им слать?

Я разработал алгоритм, основанный на деревьях поиска (вернее, это лишь похоже на древовидную динамическую структуру), который использует для своих нужд лишь определенный диапазон стандартных CAN ID. Девайсы, поддерживающие и не поддерживающие этот вспомогательный протокол, могут работать на одной шине, при условии, что всем разданы непересекающиеся идентификаторы. Ну как обычно.

Что мне нужно? Самое ужасное, это когда типов девайсов уже три десятка, каждый девайс имеет определенную структуру (там может быть несколько разных плат, каждая со своим MCU/CPU, и внутри блока несколько CPU могут быть связаны другим интерфейсом, а только "главный" подключен к CAN), все они подключены к одной шине в единичном или множественных экземплярах, всем им заданы рабочие идентификаторы - и в этом вся проблема: в различных сервисных утилитах (программы-прошивальщики, диагносты и т.д.), или в штатном ПО "ведущего" устройства где-то "рядом" надо постоянно иметь бумажку/файлик со списком этих самых ID. Т.е. добавился девайс в шину - ему надо обновить ПО - лезем в утилиту прошивальщика и руками вбиваем, в какой ID стучаться, чтобы ему сбросить МК и ввести в режим прошивки, а потом прошивать. Очень не удобно, и, как смотрю вокруг - так во всех окружающих меня девайсах примерно и происходит.

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

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

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


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

36 минут назад, Arlleex сказал:

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

Примерно подобное делал в проекте на предыдущей работе. На ПК запускалась утилита, которая подключалась к одному из устройств-членов CAN-сети (не сама напрямую в CAN, а к любому участнику сети как шлюзу). Она в реальном времени показывала подключенные устройства, видела подключение новых и отключение старых. И позволяла выполнять с любым из них любые операции: Конфигурирование, управление, обновление прошивки, чтение журналов работы, etc. Никакие CAN-ID пользователю никуда вводить не нужно - все CAN-ID всем участникам сети назначались автоматически (динамически, только на время работы, никуда не сохраняясь). Пользователь (в окошке утилиты) видел только серийные(заводские) номера устройств и их имена (заданные самим пользователем в конфиге устройств).

Но протокол этот свой - доморощенный. :wink:  Где-то даже его описывал на форуме неск. лет назад. Для работы он использует небольшой диапазон CAN-ID.

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


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

On 7/9/2024 at 10:20 PM, Arlleex said:

В общем, хочу понять, есть ли что-либо готовое в природе

CANopen

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


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

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

Но протокол этот свой - доморощенный. :wink:  Где-то даже его описывал на форуме неск. лет назад. Для работы он использует небольшой диапазон CAN-ID.

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

7 минут назад, dimka76 сказал:

CANopen

Слишком тяжелая артиллерия, к тому же не очень позволяющая делать то, что я хотел (вроде, насколько мне известен CANOpen). Или, все-таки, позволяющая? Ну то, что она действительно есть в готовых библиотеках (тем более в линуксе) - это несомненный плюс...

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


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

On 7/9/2024 at 11:07 PM, Arlleex said:

Или, все-таки, позволяющая?

Я не шибко вникал в ваши хотелки :blush:

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


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

3 минуты назад, dimka76 сказал:

Я не шибко вникал в ваши хотелки :blush:

Беру адаптер CAN-USB, втыкаю в комп и в CAN-сеть, на которой кто-то уже висит.

Жмакаю кнопку "Поиск девайсов", программка *думает* и выдает

image.thumb.png.4df25e7c5d6c77584a60c28c704ca630.png

Я такой: "О, нифига себе! Тааак, че у нас тут в измерителе давлений?"

Жмакаю на него. Программка раскрывает его потроха

image.thumb.png.a3392b0b01231d0c988cec6fbde0120e.png

Я такой: "Ага. Тааак, надо бы уставку нуля АЦП на плате датчиков давления воздуха задать. На какой ему там ID сообщение слать? На EXT ID 0x5687!"

И так с каждым блоком. Т.е. в каждое изделие на этапе разработки его ПО "вшивается" информационное дерево его представления, которое потом универсальной программой можно просмотреть и понять, чего там и как.

Программа просмотра, как таковая, не нужна. Нужна возможность динамического определения всяких ID разных служб и "интерфейсов" у подключенных устройств. Например, у клавиатуры надо поменять ПО (перепрошить блок). Программа-прошиватор запускает идентификацию девайсов, получает всю необходимую инфу, и теперь знает, что у клавиатуры есть некий управляющий ID, на который можно слать конкретно клавиатуре команды на прошивку. В итоге пользователю даже этих самых ID знать или держать рядом на листочке не надо.

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


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

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

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

Так напишите им эти библиотеки. И передайте в комплекте. Заботьтесь о "братьях наших меньших".  :biggrin:

 

PS: В последнее время при согласовании протокола часто так и делаю: Просто пишу например на Питоне утилиту, которая реализует мой протокол и отдаю на ту сторону. Так гораздо нагляднее - человек может все непонятные моменты сам посмотреть на практике - как оно работает. И перетащить что нужно себе. Так я и свой протокол этой утилитой отлаживаю, и уменьшаю себе затраты времени на объяснение и поиск чужих ошибок. Убиваю сразу 2-х зайцев так сказать.

Ведь если у другой стороны что-то не работает с моим устройством, то та сторона обычно сразу думает, что проблемы не в её коде, а в моём. Ну а где-ж ещё?!! :biggrin: Тут запускается эта утилита и... она работает без ошибок. Значит у меня - алиби, а мяч переходит на чужую сторону поля.  :dance4:

 

PPS: Вот как раз сейчас пишу такую утилитку на Питоне для реализации очередного протокола по CAN через USB-CAN адаптер от: https://www.peak-system.com/

Очень наглядно.  :good:

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


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

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

Так напишите им эти библиотеки. И передайте в комплекте. Заботьтесь о "братьях наших меньших".  :biggrin:

Ну, если не наскребу чего-то, то придется, да)

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


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

6 hours ago, jcxz said:

Но протокол этот свой - доморощенный. :wink:  Где-то даже его описывал на форуме неск. лет назад. Для работы он использует небольшой диапазон CAN-ID.

Интересно глянуть бы....
Ссылки нет случаем под рукой?
Интересно как оно там задумано с этими динамическими ID - типа кто первый проснулся, того и тапки?

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


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

6 hours ago, Arlleex said:

Беру адаптер CAN-USB, втыкаю в комп и в CAN-сеть, на которой кто-то уже висит.

Жмакаю кнопку "Поиск девайсов", программка *думает* и выдает

image.thumb.png.4df25e7c5d6c77584a60c28c704ca630.png

Я такой: "О, нифига себе! Тааак, че у нас тут в измерителе давлений?"

Жмакаю на него. Программка раскрывает его потроха

image.thumb.png.a3392b0b01231d0c988cec6fbde0120e.png

Я такой: "Ага. Тааак, надо бы уставку нуля АЦП на плате датчиков давления воздуха задать. На какой ему там ID сообщение слать? На EXT ID 0x5687!"

И так с каждым блоком. Т.е. в каждое изделие на этапе разработки его ПО "вшивается" информационное дерево его представления, которое потом универсальной программой можно просмотреть и понять, чего там и как.

Программа просмотра, как таковая, не нужна. Нужна возможность динамического определения всяких ID разных служб и "интерфейсов" у подключенных устройств. Например, у клавиатуры надо поменять ПО (перепрошить блок). Программа-прошиватор запускает идентификацию девайсов, получает всю необходимую инфу, и теперь знает, что у клавиатуры есть некий управляющий ID, на который можно слать конкретно клавиатуре команды на прошивку. В итоге пользователю даже этих самых ID знать или держать рядом на листочке не надо.

CanOpen
LSS master, LSS slave

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


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

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

Интересно глянуть бы....
Ссылки нет случаем под рукой?
Интересно как оно там задумано с этими динамическими ID - типа кто первый проснулся, того и тапки?

Нет. Мастер сканирует сеть и раздаёт динамически ID. Сканирование идёт с использование механизма арбитража CAN. Каждое устройство должно иметь уникальный серийный номер (64-битный). При сканировании каждому такому длинному номеру назначается короткий, который потом используется для обмена по CAN. Мастер - динамический. Им становится то устройство, к которому пользователь подключился клиентской программой. Остальные устройства CAN-сети - слэйвы.

Поищите, года ~3 назад описывал здесь.

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


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

13 часов назад, jcxz сказал:

Никакие CAN-ID пользователю никуда вводить не нужно - все CAN-ID всем участникам сети назначались автоматически (динамически, только на время работы, никуда не сохраняясь).

CAN-ID это ID сообщений, а не устройств. То что поверх системы сообщений выстраивается одноранговая сеть устройств, ну, нравится кому-то такое - бывает. 

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


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

3 минуты назад, artemkad сказал:

CAN-ID это ID сообщений, а не устройств.

И что? Я это знаю.

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


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

12 часов назад, Arlleex сказал:

информационное дерево его представления

чем то напоминает SNMP ( https://ru.wikipedia.org/wiki/SNMP )

не путать с SMTP и SNTP ;o)

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


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

On 7/10/2024 at 12:08 PM, artemkad said:

CAN-ID это ID сообщений, а не устройств. То что поверх системы сообщений выстраивается одноранговая сеть устройств, ну, нравится кому-то такое - бывает. 

В CANOpen это и ID сообщений и ID устройств.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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