Arlleex 172 9 июля Опубликовано 9 июля · Жалоба В общем, хочу понять, есть ли что-либо готовое в природе, что позволяет унифицированно внедрить это в кучу разных железок, потом подключиться к шине и чтобы эти железки автоматически рапортовали, кто они, что умеют, чего от них ждать и что им слать? Я разработал алгоритм, основанный на деревьях поиска (вернее, это лишь похоже на древовидную динамическую структуру), который использует для своих нужд лишь определенный диапазон стандартных CAN ID. Девайсы, поддерживающие и не поддерживающие этот вспомогательный протокол, могут работать на одной шине, при условии, что всем разданы непересекающиеся идентификаторы. Ну как обычно. Что мне нужно? Самое ужасное, это когда типов девайсов уже три десятка, каждый девайс имеет определенную структуру (там может быть несколько разных плат, каждая со своим MCU/CPU, и внутри блока несколько CPU могут быть связаны другим интерфейсом, а только "главный" подключен к CAN), все они подключены к одной шине в единичном или множественных экземплярах, всем им заданы рабочие идентификаторы - и в этом вся проблема: в различных сервисных утилитах (программы-прошивальщики, диагносты и т.д.), или в штатном ПО "ведущего" устройства где-то "рядом" надо постоянно иметь бумажку/файлик со списком этих самых ID. Т.е. добавился девайс в шину - ему надо обновить ПО - лезем в утилиту прошивальщика и руками вбиваем, в какой ID стучаться, чтобы ему сбросить МК и ввести в режим прошивки, а потом прошивать. Очень не удобно, и, как смотрю вокруг - так во всех окружающих меня девайсах примерно и происходит. В моем понимании - воткнулись в сеть любым адаптером, нажали кнопочку "Поиск устройств" в программе-прошивальщике, она выдала все найденные подключенные девайсы - хоть текстом, хоть картинками-пиктограммами. Жмакаешь по нужному девайсу - он "раскрывается", показывая внутренние функциональные узлы. Жмакаешь нужный узел - например, плату с процессором, подключенным по UART к другому процу, который уже и подключен в CAN, и даешь ему команды на обновление прошивки и т.д. Удобно. Но я планирую внедрить поддержку этого вспомогательного протокола во все наши изделия, и хотелось бы удостовериться, что пока я строил велосипед, кто-то не собрал мотоцикл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 228 9 июля Опубликовано 9 июля · Жалоба 36 минут назад, Arlleex сказал: В моем понимании - воткнулись в сеть любым адаптером, нажали кнопочку "Поиск устройств" в программе-прошивальщике, она выдала все найденные подключенные девайсы - хоть текстом, хоть картинками-пиктограммами. Жмакаешь по нужному девайсу - он "раскрывается", показывая внутренние функциональные узлы. Жмакаешь нужный узел - например, плату с процессором, подключенным по UART к другому процу, который уже и подключен в CAN, и даешь ему команды на обновление прошивки и т.д. Удобно. Примерно подобное делал в проекте на предыдущей работе. На ПК запускалась утилита, которая подключалась к одному из устройств-членов CAN-сети (не сама напрямую в CAN, а к любому участнику сети как шлюзу). Она в реальном времени показывала подключенные устройства, видела подключение новых и отключение старых. И позволяла выполнять с любым из них любые операции: Конфигурирование, управление, обновление прошивки, чтение журналов работы, etc. Никакие CAN-ID пользователю никуда вводить не нужно - все CAN-ID всем участникам сети назначались автоматически (динамически, только на время работы, никуда не сохраняясь). Пользователь (в окошке утилиты) видел только серийные(заводские) номера устройств и их имена (заданные самим пользователем в конфиге устройств). Но протокол этот свой - доморощенный. Где-то даже его описывал на форуме неск. лет назад. Для работы он использует небольшой диапазон CAN-ID. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 9 июля Опубликовано 9 июля · Жалоба On 7/9/2024 at 10:20 PM, Arlleex said: В общем, хочу понять, есть ли что-либо готовое в природе CANopen Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 9 июля Опубликовано 9 июля · Жалоба 15 минут назад, jcxz сказал: Но протокол этот свой - доморощенный. Где-то даже его описывал на форуме неск. лет назад. Для работы он использует небольшой диапазон CAN-ID. Ну, просто есть мнение, что при передаче описания алгоритма на сторону, для поддержки сторонними производителями (нашими контрагентами), они взвоют и попросят прикрутить хотя бы что-то стандартное. Потому что на это стандартное уже есть написанные кем-то библиотеки)) 7 минут назад, dimka76 сказал: CANopen Слишком тяжелая артиллерия, к тому же не очень позволяющая делать то, что я хотел (вроде, насколько мне известен CANOpen). Или, все-таки, позволяющая? Ну то, что она действительно есть в готовых библиотеках (тем более в линуксе) - это несомненный плюс... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 9 июля Опубликовано 9 июля · Жалоба On 7/9/2024 at 11:07 PM, Arlleex said: Или, все-таки, позволяющая? Я не шибко вникал в ваши хотелки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 9 июля Опубликовано 9 июля · Жалоба 3 минуты назад, dimka76 сказал: Я не шибко вникал в ваши хотелки Беру адаптер CAN-USB, втыкаю в комп и в CAN-сеть, на которой кто-то уже висит. Жмакаю кнопку "Поиск девайсов", программка *думает* и выдает Я такой: "О, нифига себе! Тааак, че у нас тут в измерителе давлений?" Жмакаю на него. Программка раскрывает его потроха Я такой: "Ага. Тааак, надо бы уставку нуля АЦП на плате датчиков давления воздуха задать. На какой ему там ID сообщение слать? На EXT ID 0x5687!" И так с каждым блоком. Т.е. в каждое изделие на этапе разработки его ПО "вшивается" информационное дерево его представления, которое потом универсальной программой можно просмотреть и понять, чего там и как. Программа просмотра, как таковая, не нужна. Нужна возможность динамического определения всяких ID разных служб и "интерфейсов" у подключенных устройств. Например, у клавиатуры надо поменять ПО (перепрошить блок). Программа-прошиватор запускает идентификацию девайсов, получает всю необходимую инфу, и теперь знает, что у клавиатуры есть некий управляющий ID, на который можно слать конкретно клавиатуре команды на прошивку. В итоге пользователю даже этих самых ID знать или держать рядом на листочке не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 228 9 июля Опубликовано 9 июля · Жалоба 1 час назад, Arlleex сказал: Ну, просто есть мнение, что при передаче описания алгоритма на сторону, для поддержки сторонними производителями (нашими контрагентами), они взвоют и попросят прикрутить хотя бы что-то стандартное. Потому что на это стандартное уже есть написанные кем-то библиотеки)) Так напишите им эти библиотеки. И передайте в комплекте. Заботьтесь о "братьях наших меньших". PS: В последнее время при согласовании протокола часто так и делаю: Просто пишу например на Питоне утилиту, которая реализует мой протокол и отдаю на ту сторону. Так гораздо нагляднее - человек может все непонятные моменты сам посмотреть на практике - как оно работает. И перетащить что нужно себе. Так я и свой протокол этой утилитой отлаживаю, и уменьшаю себе затраты времени на объяснение и поиск чужих ошибок. Убиваю сразу 2-х зайцев так сказать. Ведь если у другой стороны что-то не работает с моим устройством, то та сторона обычно сразу думает, что проблемы не в её коде, а в моём. Ну а где-ж ещё?!! Тут запускается эта утилита и... она работает без ошибок. Значит у меня - алиби, а мяч переходит на чужую сторону поля. PPS: Вот как раз сейчас пишу такую утилитку на Питоне для реализации очередного протокола по CAN через USB-CAN адаптер от: https://www.peak-system.com/ Очень наглядно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 9 июля Опубликовано 9 июля · Жалоба 3 минуты назад, jcxz сказал: Так напишите им эти библиотеки. И передайте в комплекте. Заботьтесь о "братьях наших меньших". Ну, если не наскребу чего-то, то придется, да) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
girts 9 10 июля Опубликовано 10 июля · Жалоба 6 hours ago, jcxz said: Но протокол этот свой - доморощенный. Где-то даже его описывал на форуме неск. лет назад. Для работы он использует небольшой диапазон CAN-ID. Интересно глянуть бы.... Ссылки нет случаем под рукой? Интересно как оно там задумано с этими динамическими ID - типа кто первый проснулся, того и тапки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 10 июля Опубликовано 10 июля · Жалоба 6 hours ago, Arlleex said: Беру адаптер CAN-USB, втыкаю в комп и в CAN-сеть, на которой кто-то уже висит. Жмакаю кнопку "Поиск девайсов", программка *думает* и выдает Я такой: "О, нифига себе! Тааак, че у нас тут в измерителе давлений?" Жмакаю на него. Программка раскрывает его потроха Я такой: "Ага. Тааак, надо бы уставку нуля АЦП на плате датчиков давления воздуха задать. На какой ему там ID сообщение слать? На EXT ID 0x5687!" И так с каждым блоком. Т.е. в каждое изделие на этапе разработки его ПО "вшивается" информационное дерево его представления, которое потом универсальной программой можно просмотреть и понять, чего там и как. Программа просмотра, как таковая, не нужна. Нужна возможность динамического определения всяких ID разных служб и "интерфейсов" у подключенных устройств. Например, у клавиатуры надо поменять ПО (перепрошить блок). Программа-прошиватор запускает идентификацию девайсов, получает всю необходимую инфу, и теперь знает, что у клавиатуры есть некий управляющий ID, на который можно слать конкретно клавиатуре команды на прошивку. В итоге пользователю даже этих самых ID знать или держать рядом на листочке не надо. CanOpen LSS master, LSS slave Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 228 10 июля Опубликовано 10 июля · Жалоба 5 часов назад, girts сказал: Интересно глянуть бы.... Ссылки нет случаем под рукой? Интересно как оно там задумано с этими динамическими ID - типа кто первый проснулся, того и тапки? Нет. Мастер сканирует сеть и раздаёт динамически ID. Сканирование идёт с использование механизма арбитража CAN. Каждое устройство должно иметь уникальный серийный номер (64-битный). При сканировании каждому такому длинному номеру назначается короткий, который потом используется для обмена по CAN. Мастер - динамический. Им становится то устройство, к которому пользователь подключился клиентской программой. Остальные устройства CAN-сети - слэйвы. Поищите, года ~3 назад описывал здесь. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 69 10 июля Опубликовано 10 июля · Жалоба 13 часов назад, jcxz сказал: Никакие CAN-ID пользователю никуда вводить не нужно - все CAN-ID всем участникам сети назначались автоматически (динамически, только на время работы, никуда не сохраняясь). CAN-ID это ID сообщений, а не устройств. То что поверх системы сообщений выстраивается одноранговая сеть устройств, ну, нравится кому-то такое - бывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 228 10 июля Опубликовано 10 июля · Жалоба 3 минуты назад, artemkad сказал: CAN-ID это ID сообщений, а не устройств. И что? Я это знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 5 10 июля Опубликовано 10 июля · Жалоба 12 часов назад, Arlleex сказал: информационное дерево его представления чем то напоминает SNMP ( https://ru.wikipedia.org/wiki/SNMP ) не путать с SMTP и SNTP ;o) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 10 июля Опубликовано 10 июля · Жалоба On 7/10/2024 at 12:08 PM, artemkad said: CAN-ID это ID сообщений, а не устройств. То что поверх системы сообщений выстраивается одноранговая сеть устройств, ну, нравится кому-то такое - бывает. В CANOpen это и ID сообщений и ID устройств. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться