|
Протокол 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, 03:21
|

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

|
Цитата(koyodza @ Nov 9 2009, 19:17)  Или Вы предлагаете после получения совпадения CRC продолжать принимать пакет, параллельно пересчитывая CRC и убеждаясь (по другим признакам) что пакет битый, после чего ждать нового совпадения CRC? Да, я предлагаю делать так. До тех пор пока не прошел требуемый таймаут есть вероятность того, что произойдет ошибка (напр символ через 1.5 символьных интервала), поэтому переходить к приему сл. пакета нельзя, а раз нельзя то продолжаем принимать текущий. Цитата Данное нарушение пока не стало частью стандарта. И пока это является именно грубым нарушением. Нет никакого нарушения стандарта, тем более грубого: Код 1. При совпадении CRC текущего пакета background task создает копию принимаемого пакета, и записывает перекресную ссылку (друг на друга) в текщий пакет и его копию, а также взводит callback c таймаутом на отправку копии пакета. 2. background task приступает к формированию ответа на запрос незамедлительно, ответ на запрос формируется в этой же копии пакета. 3. Взависимости от того что наступит раньше - вызов callback'а по таймауту или прием символа по уарту:
a. вызов callback'а наступает раньше. - удаляется перекресная ссылка из пакета и копии пакета (т.е. копия отвязывается от приемника) - приемник (оригинал пакета) обнуляется - переход к приему нового пакета - проверяется полностью ли сформирован ответ на запрос: если ответ сформирован, тогда он нативно отправляется ровно через указанный в стандарте минимальный межпакетный интервал (в 99% случаев имеет место именно этот случай). - если ответ еще не сформирован - повторно взводится callback с таймаутом в одно-символьный интервал. b. eсли раньше примется символ, прошло не более 1.5 символьного интервала от последнего принятого символа, копия помечается как бракованая (при вызове callback'a удалится автоматически), а символ добаляется к текущему пакету и подсчет CRC продолжается. с. если раньше примется символ, но 1.5 символьный таймаут уже пройден - копия пакета помечается как бракованая и оригинальный пакет обнуляется. Собсно вот так у меня реализовано, алгоритм ниоткуда не слизанный, просто устройств в сети много, и опрашиваются непрерывно. Эти 1-2% КПД канала это +1..2 устройства в сети без ухудшения характеристик всей системы. Цитата Вычитка" архива (да пусть хоть даже и запись) никакого отношения к процедуре обмена не имеет. Даже если вычитываются запрошенные данные, лучше не начинать "вычитку" не приняв до конца запрос. Расскажите это мастеру который хочет прочитать данные со слейва которые лежат в i2c eeprom'е. Если быть точнее - расскажете мастеру почему ответ на его запрос появляется не через 3.5 символьных интервала, а через 7 (4-5ms - среднее время i2c транзакции). Цитата Минимальное время реакции на прерывания по разным причинам приходится обеспечивать в большинстве достаточно крупных проектов. А вот понятия modbus и "максимально возможный КПД использования канала" - не вполне совместимы. Обычно modbus применяется там, где загрузка канала не очень высока. Иначе - нужно выбирать другой протокол, а (возможно) и другую "физику" (т.е. не 485) Я считаю, гоняться за наносекундами в обработчиках прерываний - нет смысла. Что 32 регистра в стек будет сохраняться что 1, какая разница? это вопрос микросекунды. А если что-то совсем совсем критичное ко времени реакции - проще поставить плиску или какой-нибудь мелкий МК в помощь, чем лишать себя свободы в обработчиках прерываний. Тобиш минимальное время реакции это удел мелких проектов. В крупных проектах бывает удобно уменьшать число прерываний как таковых за счет пакетной обработки нескольких прерываний от нескольких периферийных модулей за один заход. Реакция возрастает, но накладные расходы на вход-выход в обработчик снижаются пропорционально количеству обработанных за один заход прерываний. А вот там где счет идет на миллисекунды, предпочитаю их не терять. Максимальный КПД канала он к любому протоколу применим, в т.ч. и к Модбас, т.к. в нем минимальное время между пакетами оговоренно стандартом, вот к нему надо стремиться. Да и на 485-м можно иметь вполне причную скорость ~2Mbps.
|
|
|
|
Сообщений в этой теме
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, 05:00     Verifi Цитата(defunct @ Nov 10 2009, 08:00) Заче... Nov 10 2009, 07:06     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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|