реклама на сайте
подробности

 
 
> Протокол modbus. Вопросы по интерфейсу
Phuntik
сообщение Oct 16 2008, 10:46
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 16-10-08
Пользователь №: 40 997



Здравствуйте.
На работе дали задание разработать интерфейс сообщений между устройствами на основе протокола Modbus.
Суть такова. Есть некоторое количество измерительных приборов, соединённых по RS-485. Нужно сделать так, чтобы с одного прибора можно было управлять другим - устанавливать режимы, принимать архивы измерений и т.д. За основу предложено взять протокол modbus.
Уже месяц сижу и туплю.
Вопросы:
1. Можно ли сделать так, чтобы любое устройство могло взять на себя роль главного?
2. Каким образом вообще передавать информацию главному? Через регистры, что ли?
3. С чего вообще начинать?
Подскажите, пожалуйста, ткните носом во что-нибудь готовое, описание какое-нибудь.
Протокол зачитал, но там, такое ощущение, всё привязано к конкретным контроллерам.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Oct 17 2009, 21:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



koyodza, @Ark, зачем нужно старую тему поднимать? Думаете, что топикстартер, создавший ее год назад и тогда же последний раз в ней отметившись, прочитает?
Go to the top of the page
 
+Quote Post
koyodza
сообщение Oct 18 2009, 17:51
Сообщение #3


Местный
***

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



Цитата(rezident @ Oct 18 2009, 00:36) *
koyodza, @Ark, зачем нужно старую тему поднимать? Думаете, что топикстартер, создавший ее год назад и тогда же последний раз в ней отметившись, прочитает?

Я ответил скорее не топикпастеру, а на фразу defunct по поводу того что "По приему CRC слейв может сразу же приступить к формированию ответа". Поскольку это грубое, но очень сильно распространенное нарушение стандарта, решил указать на это. Сообщения ведь попадают в "Копилку Вечности", вдруг кто-то из начинающих когда-то забредёт сюда (даже в правилах написано - новую тему создавать после того, как ничего не нашел поиском), и подумает что так и нужно делать...
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 8 2009, 00:09
Сообщение #4


кекс
******

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



Цитата(koyodza @ Oct 18 2009, 19:51) *
Я ответил скорее не топикпастеру, а на фразу defunct по поводу того что "По приему CRC слейв может сразу же приступить к формированию ответа". Поскольку это грубое, но очень сильно распространенное нарушение стандарта, решил указать на это.

Стандарты порой устаревают. А сильно распространненные нарушения часто становятся частью страндарта.
Грубых нарушений стандарта в упор не вижу, если CRC сошлась ложно, то пакет отбракуется по длине и прием продолжится.
С другой стороны, на кой в холостую ждать 3.5 символьных интервала (это ж вагон и еще маленькая тележка времени особенно на 9600 и ниже), когда их можно потратить с пользой, например на вычитку архива из медленного eeprom'а по текущему запросу мастера.

Цитата
Сообщения ведь попадают в "Копилку Вечности", вдруг кто-то из начинающих когда-то забредёт сюда (даже в правилах написано - новую тему создавать после того, как ничего не нашел поиском), и подумает что так и нужно делать...

Может для "Копилки Вечности" у вас найдется способ отмерить таймаут в 1.75ms под Windows?
Go to the top of the page
 
+Quote Post
koyodza
сообщение Nov 9 2009, 17:17
Сообщение #5


Местный
***

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



Цитата(defunct @ Nov 8 2009, 02:09) *
Стандарты порой устаревают. А сильно распространненные нарушения часто становятся частью страндарта.
Грубых нарушений стандарта в упор не вижу, если CRC сошлась ложно, то пакет отбракуется по длине и прием продолжится.

Данное нарушение пока не стало частью стандарта. И пока это является именно грубым нарушением.
Вы никогда не получали совпадение CRC внутри пакета? Значит Вы не использовали ModBus в реальных проектах. Или Вам просто пока крупно везло.
Или Вы предлагаете после получения совпадения CRC продолжать принимать пакет, параллельно пересчитывая CRC и убеждаясь (по другим признакам) что пакет битый, после чего ждать нового совпадения CRC? cranky.gif

Цитата(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)
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 10 2009, 03:21
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 21:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01529 секунд с 7
ELECTRONIX ©2004-2016