|
Протокол 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 10 2009, 07:06
|
Местный
  
Группа: Участник
Сообщений: 315
Регистрация: 5-05-08
Из: Kursk
Пользователь №: 37 282

|
Цитата(defunct @ Nov 10 2009, 08:00)  Зачем накапливать в памяти что-то непотребное, - escaped chars, пакеты нам не адресованые, метки времени на каждый принятый символ для определения таймаутов, и прочее г. которое можно отсеяться сразу в прерывании. Совершенно согласен по началу принятия пакета проверяете адрес ежли это не ваше ,то просто проверяете CRC в буфере приёма,и только если CRC не правильная или ставите флаг и обрабатываете в обработчике ошибки, либо сразу выходите из прерывания с подменой стека со смещением стека на обработчик соответствующий ошибке и соответственно надолго в прерывании не задерживаетесь. Данным образом реализовал мастер модбус на 51 ядре с буфером приёма-передачи в 128байт интервалы пакетов контролируются в прерываниях по таймеру и по 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     rezident Цитата(defunct @ Nov 10 2009, 10:00) Ниче... Nov 10 2009, 11:41     rezident На досуге я тут кое-что обдумывал и вернулся вот к... Nov 15 2009, 01:53      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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|