|
Протокол modbus. Вопросы по интерфейсу |
|
|
|
Oct 16 2008, 10:46
|
Группа: Новичок
Сообщений: 2
Регистрация: 16-10-08
Пользователь №: 40 997

|
Здравствуйте. На работе дали задание разработать интерфейс сообщений между устройствами на основе протокола Modbus. Суть такова. Есть некоторое количество измерительных приборов, соединённых по RS-485. Нужно сделать так, чтобы с одного прибора можно было управлять другим - устанавливать режимы, принимать архивы измерений и т.д. За основу предложено взять протокол modbus. Уже месяц сижу и туплю. Вопросы: 1. Можно ли сделать так, чтобы любое устройство могло взять на себя роль главного? 2. Каким образом вообще передавать информацию главному? Через регистры, что ли? 3. С чего вообще начинать? Подскажите, пожалуйста, ткните носом во что-нибудь готовое, описание какое-нибудь. Протокол зачитал, но там, такое ощущение, всё привязано к конкретным контроллерам.
|
|
|
|
|
 |
Ответов
|
Oct 18 2009, 17:51
|

Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744

|
Цитата(rezident @ Oct 18 2009, 00:36)  koyodza, @Ark, зачем нужно старую тему поднимать? Думаете, что топикстартер, создавший ее год назад и тогда же последний раз в ней отметившись, прочитает? Я ответил скорее не топикпастеру, а на фразу defunct по поводу того что "По приему CRC слейв может сразу же приступить к формированию ответа". Поскольку это грубое, но очень сильно распространенное нарушение стандарта, решил указать на это. Сообщения ведь попадают в "Копилку Вечности", вдруг кто-то из начинающих когда-то забредёт сюда (даже в правилах написано - новую тему создавать после того, как ничего не нашел поиском), и подумает что так и нужно делать...
|
|
|
|
|
Nov 8 2009, 00:09
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(koyodza @ Oct 18 2009, 19:51)  Я ответил скорее не топикпастеру, а на фразу defunct по поводу того что "По приему CRC слейв может сразу же приступить к формированию ответа". Поскольку это грубое, но очень сильно распространенное нарушение стандарта, решил указать на это. Стандарты порой устаревают. А сильно распространненные нарушения часто становятся частью страндарта. Грубых нарушений стандарта в упор не вижу, если CRC сошлась ложно, то пакет отбракуется по длине и прием продолжится. С другой стороны, на кой в холостую ждать 3.5 символьных интервала (это ж вагон и еще маленькая тележка времени особенно на 9600 и ниже), когда их можно потратить с пользой, например на вычитку архива из медленного eeprom'а по текущему запросу мастера. Цитата Сообщения ведь попадают в "Копилку Вечности", вдруг кто-то из начинающих когда-то забредёт сюда (даже в правилах написано - новую тему создавать после того, как ничего не нашел поиском), и подумает что так и нужно делать... Может для "Копилки Вечности" у вас найдется способ отмерить таймаут в 1.75ms под Windows?
|
|
|
|
|
Nov 9 2009, 17:17
|

Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744

|
Цитата(defunct @ Nov 8 2009, 02:09)  Стандарты порой устаревают. А сильно распространненные нарушения часто становятся частью страндарта. Грубых нарушений стандарта в упор не вижу, если CRC сошлась ложно, то пакет отбракуется по длине и прием продолжится. Данное нарушение пока не стало частью стандарта. И пока это является именно грубым нарушением. Вы никогда не получали совпадение CRC внутри пакета? Значит Вы не использовали ModBus в реальных проектах. Или Вам просто пока крупно везло. Или Вы предлагаете после получения совпадения CRC продолжать принимать пакет, параллельно пересчитывая CRC и убеждаясь (по другим признакам) что пакет битый, после чего ждать нового совпадения CRC? Цитата(defunct @ Nov 8 2009, 02:09)  С другой стороны, на кой в холостую ждать 3.5 символьных интервала (это ж вагон и еще маленькая тележка времени особенно на 9600 и ниже), когда их можно потратить с пользой, например на вычитку архива из медленного eeprom'а по текущему запросу мастера. "Вычитка" архива (да пусть хоть даже и запись) никакого отношения к процедуре обмена не имеет. Даже если вычитываются запрошенные данные, лучше не начинать "вычитку" не приняв до конца запрос. Полностью поддерживаю идеи, изложенные коллегой rezident: не нужно смешивать разные уровни обмена в одну кучу. Прерывание по приему/передаче байта должно быть максимально коротким (взять или положить в буфер и всё). Как в принципе и любое другое прерывание. Цитата(defunct @ Nov 8 2009, 02:09)  Может для "Копилки Вечности" у вас найдется способ отмерить таймаут в 1.75ms под Windows? Windows вообще никакого отношения к ModBus не имеет. Ну а если в качестве мастера у Вас выступает РС - никто не запрещает сделать интервал больше, чем 1,75 мсек. Приемлемые таймауты в единицы мсек отрабатываются нормально. Цитата(defunct) Есть две разные задачи. 1. обеспечить Real-time - см. real-time protocol который с помощью меток времени и блочной передачи, вне зависимости от задержек канала и межпакетного джиттера, гарантирует real-time воспроизведение медиа потока. 2. обеспечить максимально возможный КПД использования канала.
То о чем говорите Вы решает 1), то о чем говорит @Ark решает 2). Минимальное время реакции на прерывания по разным причинам приходится обеспечивать в большинстве достаточно крупных проектов. А вот понятия modbus и "максимально возможный КПД использования канала" - не вполне совместимы. Обычно modbus применяется там, где загрузка канала не очень высока. Иначе - нужно выбирать другой протокол, а (возможно) и другую "физику" (т.е. не 485)
|
|
|
|
|
Nov 10 2009, 05:00
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(koyodza @ Nov 9 2009, 19:17)  Полностью поддерживаю идеи, изложенные коллегой rezident: не нужно смешивать разные уровни обмена в одну кучу. Прерывание по приему/передаче байта должно быть максимально коротким (взять или положить в буфер и всё). Как в принципе и любое другое прерывание. Разные уровни обмена не нужно смешивать разумеется. Только вот идеи на которые Вы ссылаетесь примерно такого плана: а давайте чтобы сократить время реакции прерывания разобъем канальный уровень на два подуровня, первый подуровень канального уровня будем обслуживать в прерывании, а второй - постобработкой. Ничего что для этого придется обзавестись большим буфером памяти, зато реакция на прерывание будет быстрой. И ради чего? Разница ведь в нано-, микро- секундах исчисляется. Снижаем реакцию на прерывание просто ради получения минимальной реакции?! Дык с тем же успехом можете просто разрешить другие прерывания в обработчике текущего, реакция будет еще быстрее. Ethernet MAC - пример канального уровня, выдает пакеты, а не байты которые надо собирать в пакеты. И выдает прерывания "пакет" принят а не байт принят. Так вот объясните мне доходчиво если можно, почему модель программиста канального уровня Ethernet должна отличаться от модели канального уровня PPP или того же Modbus? И зачем делать двойную работу? Зачем накапливать в памяти что-то непотребное, - escaped chars, пакеты нам не адресованые, метки времени на каждый принятый символ для определения таймаутов, и прочее г. которое можно отсеяться сразу в прерывании.
|
|
|
|
|
Nov 15 2009, 01:53
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
На досуге я тут кое-что обдумывал и вернулся вот к этой части сообщения Цитата(defunct @ Nov 10 2009, 10:00)  Разные уровни обмена не нужно смешивать разумеется. Только вот идеи на которые Вы ссылаетесь примерно такого плана: а давайте чтобы сократить время реакции прерывания разобъем канальный уровень на два подуровня, первый подуровень канального уровня будем обслуживать в прерывании, а второй - постобработкой. Ничего что для этого придется обзавестись большим буфером памяти, зато реакция на прерывание будет быстрой. И ради чего? Разница ведь в нано-, микро- секундах исчисляется. Снижаем реакцию на прерывание просто ради получения минимальной реакции?! Дык с тем же успехом можете просто разрешить другие прерывания в обработчике текущего, реакция будет еще быстрее. defunct, поясните, пожалуйста, как вы обеспечиваете реентерабельность вашей функции канального уровня, описанной в посте #44? То бишь в каком там месте можно поставить оператор, разрешающий вложенные прерывания? Моя ИМХА почему-то упорно мне доказывает, что это прерывание (от UART) делать вложенным нельзя, если только заранее неизвестно, что сумма всех возможных вложенных прерываний не превысит величины символьного интервала для максимальной скорости передачи (т.е., например, скорость передачи достаточно низкая).
|
|
|
|
Сообщений в этой теме
Phuntik Протокол modbus. Вопросы по интерфейсу Oct 16 2008, 10:46 MrYuran Правильный протокол - на modbus.org
Если нужно мен... Oct 16 2008, 11:24 Phuntik Цитата(MrYuran @ Oct 16 2008, 14:24) Если... Oct 16 2008, 11:27  MrYuran Цитата(Phuntik @ Oct 16 2008, 15:27) Т.е.... Oct 16 2008, 11:33 Andy Great Цитата(MrYuran @ Oct 16 2008, 14:24) Если... Oct 17 2008, 07:56  MrYuran Цитата(Andy Great @ Oct 17 2008, 11:56) P... Oct 17 2008, 08:27 Bovolk Тоже поставили задачу прикрутить Modbus.
В о... Nov 16 2008, 11:01 defunct Цитата(Bovolk @ Nov 16 2008, 13:01) Подчи... Jan 1 2009, 05:05  koyodza Цитата(defunct @ Jan 1 2009, 08:05) По за... Oct 17 2009, 19:30 ucMike Наверное, главной проблемой станет борьба с коллиз... Dec 3 2008, 22:13 ucMike Цитата(ucMike @ Dec 4 2008, 01:13) P.S. С... Dec 4 2008, 11:10 ukpyr modbus plus - multimaster :
http://prodcs.ru/files... Jan 1 2009, 08:40 @Ark ЦитатаВопросы:
1. Можно ли сделать так, чтобы любо... Oct 17 2009, 21:29    defunct Цитата(koyodza @ Nov 9 2009, 19:17) Или В... Nov 10 2009, 03:21     Verifi Цитата(defunct @ Nov 10 2009, 08:00) Заче... Nov 10 2009, 07:06     rezident Цитата(defunct @ Nov 10 2009, 10:00) Ниче... Nov 10 2009, 11:41      defunct Цитата(rezident @ Nov 15 2009, 03:53) def... Nov 15 2009, 02:49   demiurg_spb Цитата(defunct @ Nov 8 2009, 03:09) у вас... Nov 28 2009, 20:54    defunct Цитата(demiurg_spb @ Nov 28 2009, 22:54) ... Dec 8 2009, 20:45     demiurg_spb Цитата(defunct @ Dec 8 2009, 23:45) В AMD... Dec 9 2009, 15:43 @Ark Sorry, не посмотрел на дату. Просто тема показал... Oct 17 2009, 21:40 D&M Здравствуйте.У меня такой вопрос: Есть теплосчетчи... Oct 24 2009, 06:12 HARMHARM Цитата(D&M @ Oct 24 2009, 09:12) Можн... Oct 24 2009, 07:18 D&M устройство с виртуальным USB CDC- это как я понял ... Oct 24 2009, 08:13 D&M или как ? жду разных предложений.. Кстати- USB CDC... Oct 24 2009, 20:41 rezident Цитата(D&M @ Oct 25 2009, 01:41) или ... Oct 25 2009, 02:15 D&M Тогда может посоветуете OPC-сервер,который может д... Oct 25 2009, 07:36 D&M Посмотрел,продумал разные варианты и пришел к выво... Oct 26 2009, 15:46 Ronin Цитата(D&M @ Oct 26 2009, 18:46) Посм... Nov 3 2009, 19:15  zltigo Цитата(Ronin @ Nov 3 2009, 22:15) GPRS эт... Nov 4 2009, 19:17   MrYuran Цитата(zltigo @ Nov 4 2009, 22:17) Ну а в... Nov 5 2009, 06:17    zltigo Цитата(MrYuran @ Nov 5 2009, 09:17) По ГП... Nov 5 2009, 15:50   Ronin Цитата(zltigo @ Nov 4 2009, 22:17) Ну а в... Nov 6 2009, 11:21 rezident D&M, я вам в личку написал. Не смотрели? Oct 26 2009, 17:59 D&M ответил Oct 26 2009, 18:23 D&M 1,3 варианты продумал,говорил про модем teleofis-r... Nov 4 2009, 18:49 D&M Нету Modbus-TCP, есть Modbus-RTU в моем рассказе. Nov 5 2009, 15:04 D&M У счетчика Modbus-RTU, а в модеме только CSD.. Nov 6 2009, 12:41 Ronin Цитата(D&M @ Nov 6 2009, 15:41) У сче... Nov 6 2009, 13:10 @Ark Цитата... Я ответил скорее не топикпастеру, а на ф... Nov 8 2009, 01:37 aaarrr Цитата(@Ark @ Nov 8 2009, 04:37) А вот, н... Nov 8 2009, 01:43 @Ark ЦитатаИз всего перечисленного какой-то практически... Nov 8 2009, 01:56 aaarrr Ну, сколько удалось наносекунд сэкономить, а? Серь... Nov 8 2009, 02:01 @Ark Цитата... значит что-то не так с выбором протоколо... Nov 8 2009, 02:21 aaarrr Ну, как и следовало ожидать, конкретные цифры озву... Nov 8 2009, 02:55 rezident Ради справедливости хотелось бы заметить, что не в... Nov 8 2009, 02:32 defunct Цитата(rezident @ Nov 8 2009, 04:32) Но в... Nov 8 2009, 03:27 @Ark ЦитатаНу, как и следовало ожидать, конкретные цифр... Nov 8 2009, 06:30 aaarrr Пример из пальца высосан: вдруг, по команде извне,... Nov 8 2009, 15:11 @Ark Цитата... вдруг, по команде извне, начинаем АЦПиро... Nov 8 2009, 15:30 aaarrr Цитата(@Ark @ Nov 8 2009, 18:30) ... Толь... Nov 8 2009, 15:46 rezident 2 defunct, еще раз обращаю внимание, что я писал п... Nov 8 2009, 16:02 defunct Цитата(rezident @ Nov 8 2009, 18:02) И не... Nov 8 2009, 17:48  rezident Цитата(defunct @ Nov 8 2009, 22:48) Выше ... Nov 8 2009, 18:39   defunct Цитата(rezident @ Nov 8 2009, 20:39) Вот ... Nov 8 2009, 19:51    rezident Цитата(defunct @ Nov 9 2009, 00:51) Не со... Nov 8 2009, 20:08     defunct Цитата(rezident @ Nov 8 2009, 22:08) Вы к... Nov 8 2009, 23:12      rezident Цитата(defunct @ Nov 9 2009, 04:12) Можно... Nov 9 2009, 16:31 @Ark Цитата... скорее вряд ли кому нужно "мгновенн... Nov 8 2009, 16:06 aaarrr Цитата(@Ark @ Nov 8 2009, 19:06) Вашими м... Nov 8 2009, 16:24 @Ark Ну, хорошо, давайте продолжим...
ЦитатаА что будет... Nov 8 2009, 17:15 aaarrr Цитата(@Ark @ Nov 8 2009, 20:15) Ничего с... Nov 8 2009, 17:27 @Ark ЦитатаВыпадет просто, да? А таймаут ответа "с... Nov 8 2009, 17:43 aaarrr Цитата(@Ark @ Nov 8 2009, 20:43) С чего в... Nov 8 2009, 18:25 @Ark ЦитатаКак вы считаете, сколько времени будет сэкон... Nov 8 2009, 19:24 aaarrr Цитата(@Ark @ Nov 8 2009, 22:24) То есть,... Nov 8 2009, 19:42 @Ark ЦитатаЯ предлагаю снабдить слейв минимальным интел... Nov 8 2009, 20:07 aaarrr Цитата(@Ark @ Nov 8 2009, 23:07) Ну, а ка... Nov 8 2009, 20:20 @Ark ЦитатаА реальное время будет спокойно жить в слейв... Nov 8 2009, 20:38 aaarrr Цитата(@Ark @ Nov 8 2009, 23:38) Я опять ... Nov 8 2009, 21:04 @Ark Цитата... что данные будут получены с некоторой ап... Nov 8 2009, 21:24 aaarrr Цитата(@Ark @ Nov 9 2009, 00:24) С какой?... Nov 8 2009, 21:36 @Ark ЦитатаПреимущество блочной передачи вполне очевидн... Nov 8 2009, 21:51 aaarrr Цитата(@Ark @ Nov 9 2009, 00:51) Здесь мы... Nov 8 2009, 22:17 @Ark ЦитатаЦитата(aaarrr @ Nov 9 2009, 00:17)
Да, я вс... Nov 9 2009, 11:09 forever failure Прально, зачем ждать на светофоре зелёного, если н... Nov 10 2009, 07:34 rezident Ну вот и консенсус наметился Считайте, что у меня... Nov 15 2009, 03:19 defunct Цитата(rezident @ Nov 15 2009, 05:19) Счи... Nov 15 2009, 03:22  rezident Цитата(defunct @ Nov 15 2009, 08:22) Толь... Nov 15 2009, 03:27   defunct Цитата(rezident @ Nov 15 2009, 05:27) Не ... Nov 15 2009, 03:33    rezident Цитата(defunct @ Nov 15 2009, 08:33) След... Nov 15 2009, 03:59     defunct Цитата(rezident @ Nov 15 2009, 05:59) Это... Nov 15 2009, 04:10      rezident Цитата(defunct @ Nov 15 2009, 09:10) Да н... Nov 15 2009, 18:15       defunct Цитата(rezident @ Nov 15 2009, 20:15) Нет... Nov 15 2009, 22:27        rezident Цитата(defunct @ Nov 16 2009, 03:27) Но в... Nov 15 2009, 22:50         defunct Цитата(rezident @ Nov 16 2009, 00:50) Нет... Nov 15 2009, 23:08          rezident Цитата(defunct @ Nov 16 2009, 04:08) Функ... Nov 16 2009, 00:20           defunct Цитата(rezident @ Nov 16 2009, 02:20) Нич... Nov 16 2009, 00:33
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|