Jump to content

    

Определение мастера в многомастерной сети

спасибо за идею, была такая мысль. но в данном случае появляются заморочки при прошивке устройства. придется каким-то образом при прошивке контроллера помимо самой firmware в память записывать дополнительные данные (серийный номер или, может быть, время прошивки, или еще что-то уникальное) причем так, чтобы не лазить в коде, и чтобы процесс был автоматизирован (чтобы данные уникальности для каждого устройства автоматически изменялись после каждого процесса прошивки).

слабо поставить на каждую плату какой-нибудь даллас, типа DS1990, только в подходящем корпусе? :rolleyes:

Share this post


Link to post
Share on other sites
Если для Вас заложить и поддерживать джампер сложнее, чем писать-отлаживать-имплементировать в устройство механизм разборки коллизий и всего что с этим связано- снимаю шляпу.

Жизненная ситуация №1: пользователь по ошибке вклчил в сеть с существующим мастером ещё одного мастера (забыл снять джампер).

Жизненная ситуация №2: в сети мастер отвалился (завис, сгорел и т.д.). Устройства как стадо баранов стоят и ждут "рассчитанное значение фазы", т.е. ничего не делают и при этом пользователь даже не догадывается о проблеме.

 

Даже с аппаратным определение мастера обязательно должна быть реализована детекция коллизий на шине.

 

По поводу автоматизации генерации уникального номера при прошивке - поищите в сети. Для AVR, например, существует тулза AVRDude, которая может самостоятельно инкриментировать серийный номер в ПЗУ при каждой перепрошивке. Для других МК, думаю, найдутся программы с подобным функционалом.

Share this post


Link to post
Share on other sites
Жизненная ситуация №1: пользователь по ошибке вклчил в сеть с существующим мастером ещё одного мастера (забыл снять джампер).

Жизненная ситуация №2: в сети мастер отвалился (завис, сгорел и т.д.). Устройства как стадо баранов стоят и ждут "рассчитанное значение фазы", т.е. ничего не делают и при этом пользователь даже не догадывается о проблеме.

 

Даже с аппаратным определение мастера обязательно должна быть реализована детекция коллизий на шине.

 

По поводу автоматизации генерации уникального номера при прошивке - поищите в сети. Для AVR, например, существует тулза AVRDude, которая может самостоятельно инкриментировать серийный номер в ПЗУ при каждой перепрошивке. Для других МК, думаю, найдутся программы с подобным функционалом.

 

про "жизненные ситуации" это Вы прямо в точку! за наводку по софту спасибо, буду искать.

Share this post


Link to post
Share on other sites

ТС, а что за МК (или ПЛИС) вы используете? Дело в том, что некоторые МК имеют свой уникальный идентификатор, который вшит в них уже при производстве. Из известных мне, ID имеют XMEGA, STM8 и STM32.

Share this post


Link to post
Share on other sites

система разрабатывается на TMS320F28069 от Texas Instruments, по даташиту внутреннего идентификатора не встречал

Share this post


Link to post
Share on other sites

Есть такой древний стандарт - Profibus (часть 2) - там вся эта многомастерность подробно и аккуратно расписана.

Share this post


Link to post
Share on other sites
шумы ацп не получится использовать. в устройстве используется несколько каналов для измерений, а неиспользуемые выводы ацп посажены на аналоговую землю, для повышения точности измерений

Получится использовать. Все каналы АЦП всё равно шумят, и в том числе подключённые к земле. А значения измеряемых величин тем более можно рассматривать как случайные. Хотя объём случайности может быть и не велик - например по 1 биту с канала АЦП.

Взять значения всех каналов АЦП, составить вместе (то есть записать в последовательно расположенные элементы массива), по ним вычислить CRC или MD5 или что-то подобное чтобы смешать все каналы АЦП вместе. То что получится - случайное число. По этому числу определить время задержки до начала передачи. Начать передачу. Если коллизия - то может быть у другого блока такие же значения с АЦП - тогда ещё раз заново взять значения всех каналов АЦП и т.д.

 

Edited by maksimp

Share this post


Link to post
Share on other sites
Если для Вас заложить и поддерживать джампер сложнее,

Прошу прощения, я не автор темы. Я вообще ничего закладывать и поддерживать не собираюсь :rolleyes:

В своей сети на базе RS-485 я предподчитаю мастер задавать "дедовским способом", т.е. вручную.

Почему я предложил вариант со случайным временем? Да потому, что автор попросил что угодно. Вот я и предложил что угодно) Вариант с джампером уже был.

 

Я еще и прошивку идентификатора предложил выше, 6 байт, аналогия с MAC-адресом. Вроде на весь мир хватает)))

Share this post


Link to post
Share on other sites
Прошу прощения, я не автор темы. Я вообще ничего закладывать и поддерживать не собираюсь :rolleyes:

В своей сети на базе RS-485 я предподчитаю мастер задавать "дедовским способом", т.е. вручную.

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

 

По мне я бы собрал систему на CAN, которая позволяет расставить приоритеты, и считал бы сообщением от мастера (фаза или что там) сообщение с максимальным приоритетом за время, равное интервалу сеанса связи. Тогда вообще париться не нужно, все предсказуемо и дубово, не нужно передавать никакие полномочия вообще.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this