0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 87
|
|
1 | |
Выбрать подходящий интерфейс и протокол14.10.2012, 19:40. Показов 35920. Ответов 59
Метки нет (Все метки)
Всем привет!
Делаю вот сейчас курсовой проект, в будущем планируется развить все это дело до диплома. И, уже чисто для себя, параллельно намереваюсь собирать в железе все то, что придумываю в курсаче. Чтобы было менее абстрактно, я делаю систему безопасности, состоящую из главного координирующего устройства и цепляющихся к нему устройств. Таких как, например, коммутаторы мощных нагрузок (сигнализации) и концентраторы, к которым, в свою очередь, цепляются охранные извещатели, умеющие только замыкать или размыкать свои контакты при срабатывании. Итак, проблема состоит в следующем: нужно организовать связь между всеми этими устройствами и главным устройством. Велосипед изобретать не только не хочется, но это еще и не рационально. Посмотрел в вики, есть куча подобных интерфейсов и реализованных поверх них протоколов (они, как я понял, входят в группу "промышленных интерфейсов"). Итак, каковы требования: 1. Все устройства вешаются на одну общую шину. А значит нужно организовать адресацию. 2. Главное устройство должно слать данные другим устройствам, другие устройства должны сами (то есть выступать ведущими) слать данные главному устройству. Слать данные друг другу им не нужно. 3. Физически интерфейс должен быть помехоустойчивый и максимальная длина кабеля должна быть где-то около 500 метров, а лучше километр (не знаю насколько это рационально для системы охраны, но препод настаивает на этом). 4. Ограничений к скорости передачи нет, ибо данных передавать ерунда: одна посылка вряд ли будет больше 2-6 байтов. 5. Было бы не очень хорошо тащить больше 3-5 проводов в кабеле. 6. Ах да, ну и не обязательно: думаю, было бы здорово, если бы интерфейс можно было бы несложно совместить с UART на борту контроллера. Итак: 1. Какой мне лучше выбрать физический интерфейс? 2. Какие есть стандарты подходящих протоколов передачи поверх этого интерфейса? Заранее спасибо за помощь!
0
|
14.10.2012, 19:40 | |
Ответы с готовыми решениями:
59
Выбрать подходящий RAID-контроллер Не могу выбрать подходящий парсер для файла 'can' Не могу выбрать подходящий парсер для файла 'FileTest' База данных, массив и другие варианты хранения информации. Как выбрать подходящий |
0 / 0 / 0
Регистрация: 16.02.2010
Сообщений: 511
|
|
16.10.2012, 00:09 | 41 |
Сообщение от tymburo
Отмирающая классика. В охранке уже давно отказались - максимум 3 адресных джампера для маленьких систем. В крупных системах все модули имеют уникальный серийник в явном или неявном виде. Например, системы paradox все свои модули адресуют по серийникам - первые 3 цифры (HEX) тип модуля дальше 5 его уникальный номер с завода. в хексе это, если не ошибаюсь около 1млн комбинаций. В системах DSC, вечном конкуренте парадокса, серийники идут не явно - для вписывания модуля в систему, надо активировать поиск с клавы и нажать кнопку на модуле - они друг друга услышат, модуль впишется в память под простым порядковым номером. Но если копнуть систему глубже, серийники проявляются, они используются на транспортном уровне, а номерами прикрыты видимо для удобства (весьма сомнительного). В пожарной охране, протокол xp95 например, датчики адресуются разными способами даже у одного производителя - мой любимый вариант, это 2 крутилки - десятки и единицы. Максимум 99 девайсов на линии. А вот модуля, которые вешаются на линию имеют адреса от 128 и выше и выставляются дип-выключателями (128+выключатели). При этом датчики той же системы от другого производителя, программируются со специального устройства - вкручиваешь туда датчик, забиваешь номер с клавы и он записывается. Есть девайсы, которые автоматически находятся по порядку на линии, а потом по этому временному адресу уже можно править и адреса и настройки. Как техник, я голосую за объединение вариантов - идеальным будет серийный номер вшитый с завода, но должна оставаться возможность смены номера через программатор или особый режим с основной платы - это очень удобно, когда надо заменить сдохший (от грозы/от времени) модуль - не надо лезть в программу и тревожить систему, просто вбил тот же серийник, переключил провода и подал питание - система думает, что модуль просто временно отключали. Даю подсказку: Если прибор идет в серию и забивать номера ручками уже слишком трудоёмко, можно впаять в плату 1-wire девайсы с уникальными номерами и работать с частью этого номера как со своим серийником.
0
|
0 / 0 / 0
Регистрация: 16.02.2010
Сообщений: 511
|
|
16.10.2012, 00:21 | 42 |
Сообщение от PRS
Монтажники умудряются путать. Я предпочитаю за монтажниками проходить и сам всё списываю - где по факту что стоит. У парадокса очень грамонтая в этом плане система - на модуле наклейка с серийным адресом и у наклейки отрывной лепесток-наклейка с копией (говно-фото прилагается) Когда все блоки смонтированы, я беру лесенку, план здания или проект и иду по всей системе - проверяю где именно находится модуль (при монтаже часто сдвигают из-за других коммуникаций), какой именно модуль, сколько на нем по факту зон, есть ли питание, подписи и тп. Отрываю лепесток и клею его на план возле иконки модуля. Когда весь объект пройден, я иду к компу и по имеющейся схеме программирую систему четко зная какой модуль где. Когда модуля ставят монтажники, они часто такое делают, что страшно - особенно если в одном ящике 3-4 модуля зонных стоит.
0
|
0 / 0 / 0
Регистрация: 16.02.2010
Сообщений: 511
|
|
16.10.2012, 00:39 | 43 |
Сообщение от ShodS
Впрочем, это всё тут оффтопик.
0
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
|
16.10.2012, 01:24 | 44 |
ZPS таких монтажников надо сильно, часто и вдумчиво анально карать наказывать.
0
|
0 / 0 / 0
Регистрация: 16.02.2010
Сообщений: 511
|
|
16.10.2012, 01:53 | 45 |
Сообщение от PRS
0
|
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 87
|
|
16.10.2012, 03:06 | 46 |
ShodS, спасибо за описание вашего интерфейса! Чем-то похоже на I2C, только по одной линии.
Сообщение от itysiy
0
|
1 / 1 / 0
Регистрация: 16.12.2016
|
|
16.10.2012, 03:49 | 47 |
Сообщение от soumt_imobti
Терминаторы скорее для короткого кабеля до 100 метров и высокой скорости, 115200, 900 000. Мне так терминаторы не нравятся тем что ослабляют не только отраженный, но и полезный сигнал, не идеальное, компромиссное решение. Идеальное решение, похоже, это Ethernet. Другое дело что гигабит полнодуплексный не нужен, если бы эзернет был не только 1000-100-10 мбит, но и 1 мбит, 0.1, 0.01 мбит и по двум проводам...
0
|
1 / 1 / 0
Регистрация: 16.12.2016
|
|
16.10.2012, 04:10 | 48 |
Сообщение от ZPS
Впрочем, это всё тут оффтопик. Очень странный протокол. Сбой что в Modbus, что в Ethernet определяется про контрольной сумме, есть протокол DCON где контрольная сумма просто арифметическая сумма всех символов в посылке, CRC чуть сложнее, но по сути тоже самое. Искать ошибки выделяя для этого отдельный проводник очень расточительно, и менее надежно, если вероятность в CRC32 пропустить сбойную посылку одна 4х миллиардная, то у вас неизвестно, помеха вполне может навести + на одну жилу, - на другую и сбойная инструкция пройдет в устройство, вроде маловероятно, но вероятность как-раз сложно прикинуть, зависит от длины линии, типа помех... сплошное шаманство ))) И другая сторона медали, у вас малейшее отклонение во времени прихода импульса дает сбой, в RS485, Ethernet физический уровень вытягивает любой сигнал, самый слабый, старательно отделяя 0 от 1 на фоне шума, а ошибки надежно вычисляются через CRC. Получается и устойчивей к помехам и защищенней и быстрее, и проводов меньше.
0
|
1 / 1 / 0
Регистрация: 16.12.2016
|
|
16.10.2012, 04:16 | 49 |
Сообщение от ZPS
0
|
1 / 1 / 0
Регистрация: 16.12.2016
|
|
16.10.2012, 04:45 | 50 |
Сообщение от ShodS
С другой стороны манчестер медленней UART, так как передает 2 импульса на бит, вместо 1. Цитата: Цитата:Ну и алгоритм обмена: Все посылки пакетные, пакету предшествует пауза размером в половину времени необходимого для передачи байта или более. После обнаружения паузы, все слэйвы ждут начала передачи, Первый байт в пакете - адрес слэйв устройства (1-254), и тот слэйв который идентифицировал свой адрес, продолжает прием, остальные отваливаются. Отваливаются также в случае если видят сброшенным в пакете бит ответа, т.е. этот пакет - ответ слэйва, потому остальным слэйвам он не нужен. После передачи мастера, опять пауза, потом пакет от слэйва (если он предусмотрен), потом пауза, ну и т.д. Структура пакета одинакова при передаче хоть от мастера, хоть от слэйва, разница только в маркере направления передачи, ну и соответственно это отражается на CRC. modbus rtu? :) CRC тоже разная бывает, у 1-wire 8 bit, modbus 16 bit, ethernet 32 bit, чем больше тем надежнее. 1 байт маловато иногда.
0
|
1 / 1 / 0
Регистрация: 16.12.2016
|
|
16.10.2012, 04:55 | 51 |
Сообщение от tymburo
С другой стороны проводную связь тоже рвут и грозы порты выжигают, тоже самое по сути.
0
|
0 / 0 / 0
Регистрация: 16.02.2010
Сообщений: 511
|
|
17.10.2012, 01:45 | 52 |
Сообщение от sym
Это я описал физический уровень. На него сверху наложена некоторая логика и там есть проверка - контрольная сумма по битам считается и передается отдельно для адреса и отдельно для данных. На тестовых платах есть светодиоды, которые светятся некоторое время после получения ошибки на физическом и на логическом уровне - по ним я могу мониторить примерно насколько стабилен такой вариант. Если не устроит, перейду на какую-нибудь проверенную годами классику. Впрочем, переход на однопроводную линию уже маячит - анализ рынка подсказывает, что таких вариантов линий будет много и под них всё равно что-то надо делать.
0
|
Скрипич
|
|
19.10.2012, 10:16 | 53 |
а что если на базе RS485 попробовать , для всей этой большой системы, туда прикрутить протокол DMX512?
было бы интересно использовать готовые модули и микросхемы DMX плюс перспективы на будущее печально ,но самодельный протокол заглохнет после первой работы.. \ |
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 87
|
|
29.10.2012, 20:35 | 54 |
Апаю тему.
Наконец дошли руки до того чтобы заняться организацией интерфейса и сразу встал такой вопрос: Как надежно организовать передачу данных? Напомню, что я решил использовать RS485, который на контроллере хочу подцепить к UART. Система будет с одним мастером, остальные слэйвы. Вот что я в общих чертах сообразил: Передача, по-видимому, будет пакетной. В пакете должен быть один байт адреса и, я думаю, изменяющееся число байт данных. Для простых команд от мастера к слейву хватит скорее всего и одного байта, но если, к примеру, слейв будет отправлять пакет мастеру с кучей информации и отчетом о том что вообще вокруг него происходит, то байт понадобится больше. А значит, нужно еще отправлять число байт в пакете или какой-то признак конца. Я уже придумал парочку вариантов и парочку придумал мой друг, однако все они мне кажутся набором костылей и велосипедов. Хотелось бы узнать, как грамотно и надежно (то есть с обработкой различных ошибок и сбоев) организовать передачу и как вообще обычно передачу организовывают.
0
|
1 / 1 / 0
Регистрация: 16.12.2016
|
|
29.10.2012, 20:43 | 55 |
Сообщение от tymburo
http://ru.wikipedia.org/wiki/Modbus
0
|
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 87
|
|
29.10.2012, 21:56 | 56 |
А какие еще есть варианты организации и где про них можно было бы подробно почитать?
0
|
0 / 0 / 0
Регистрация: 11.06.2010
Сообщений: 351
|
|
30.10.2012, 00:47 | 57 |
Я недавно думал над подобными велосипедами, протокол поверх полудуплексного rs485. У старых велосипедов колеса как ни посмотри оказываются круглее :)
В голову шли идеи о том, что можно даже адрес не передавать, а ориентироваться по задержке от пакета синхронизации. Ну и ещё какая-то срамота. У ТС требования другие, так что озвучивать выбор под мои требования смысла нет. По теме, мне нравиться ASCII протокол, если скорость не важна.
0
|
1 / 1 / 0
Регистрация: 16.12.2016
|
|
30.10.2012, 17:45 | 58 |
Сообщение от omooro
0
|
0 / 0 / 0
Регистрация: 11.06.2010
Сообщений: 351
|
|
30.10.2012, 18:26 | 59 |
Сообщение от sym
Так же и на примем, идет синхропакет-запрос, а затем ответы от разных устройств с разной (но заранее заданной) задержкой. Неторопливойть ведущего не должна помешать, на уровне передачи данных. Но мне все таки кажется это не надежным, особенно если надо делать передачу и примем сотню раз в секунду. Аппаратная проверка 9-го бита (для примера) как-то более грубо выглядит, меньше вероятность того, что все развалится из-за ошибки или неверной конфигурации. Хотя использовать задержки на прием мне все ещё кажется хорошей идеей, чтобы избежать посылки запросов каждому устройству.
0
|
1 / 1 / 0
Регистрация: 16.12.2016
|
|
30.10.2012, 21:11 | 60 |
Сообщение от omooro
0
|
30.10.2012, 21:11 | |
30.10.2012, 21:11 | |
Помогаю со студенческими работами здесь
60
Какой выбрать протокол Выбрать протокол взаимодействия с сервером Какой протокол лучше выбрать в моей ситуации? Какой протокол выбрать для связи датчиков и сервера на МК? Помогите выбрать физический протокол для линии данных сеть умного дома на stm32: какой протокол выбрать? Какой интерфейс связи выбрать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |