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

 
 
7 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Протокол 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
MrYuran
сообщение Oct 16 2008, 11:24
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Правильный протокол - на modbus.org
Если нужно менять мастера, то модбас не катит. Скорее ProfiBUS
Информацию в модбасе можно передавать через регистры, койлы и файлы.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Phuntik
сообщение Oct 16 2008, 11:27
Сообщение #3





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



Цитата(MrYuran @ Oct 16 2008, 14:24) *
Если нужно менять мастера, то модбас не катит. Скорее ProfiBUS

Т.е. совсем не катит? Нельзя так сделать?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 16 2008, 11:33
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Phuntik @ Oct 16 2008, 15:27) *
Т.е. совсем не катит? Нельзя так сделать?

Ну, всегда можно что-то сделать. Но это будет ваш собственный велосипед, не имеющий ничего общего с протоколом MODBUS (кроме формата пакетов). Стандартом передача "мастерства" не предусмотрена.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Oct 17 2008, 07:56
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Цитата(MrYuran @ Oct 16 2008, 14:24) *
Если нужно менять мастера, то модбас не катит. Скорее ProfiBUS

ProfiBUS (ProfiBUS/DP по кр.мере) не мультимастер.
ЗЫ: А Модбас это и есть формат пакетов. Можно сделать пакет "передача мастера" плюс, на случай потерь, захват "мАстерства" по таймауту в зависимости от собственного адреса (ИД). В свое время интересовался мультимастерными сетями, некоторые решения были очень простыми.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 17 2008, 08:27
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Andy Great @ Oct 17 2008, 11:56) *
ProfiBUS (ProfiBUS/DP по кр.мере) не мультимастер.

цитирую педию:
Цитата
PROFIBUS использует обмен данными между ведущим и ведомыми устройствами (протоколы DP и PA) или между несколькими ведущими устройствами (протоколы FDL и FMS). Требования пользователей к получению открытой, независимой от производителя системе связи, базируется на использовании стандартных протоколов PROFIBUS.

Цитата
Можно сделать пакет "передача мастера" плюс, на случай потерь, захват "мАстерства" по таймауту в зависимости от собственного адреса (ИД).

Можно, но тогда это будет "стандарты нестандартные, системы бессистемные"


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Bovolk
сообщение Nov 16 2008, 11:01
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 6-09-06
Из: Украина/Киев
Пользователь №: 20 145



Тоже поставили задачу прикрутить Modbus.
В описании протокола сказано, что в начале и конце сообщения должен быть интервал тишины, когда же подчиненный может начинать отвечать? Т.е. Мастер делает паузу 3.5, затем передает пакет и снова делает паузу 3.5. Подчиненному когда начинать делать стартовую паузу, сразу после окончания передачи CRC мастером или после его завершающей паузы 3,5?
Go to the top of the page
 
+Quote Post
ucMike
сообщение Dec 3 2008, 22:13
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 21-11-08
Пользователь №: 41 832



Наверное, главной проблемой станет борьба с коллизиями. В модбасе ведомые устройства молчат, как примерные ученики, пока не спросят.
Возможный вариант: гонять метку ведущего. Во всех устройствах выделить пару регистров. Первый - признак, что устройство хочет быть ведомым. Через некоторый интервал ведущий опрашивает все устройства. Если появились желающие, то пишет во второй регистр метку ведущего. Получил ответ - сам стал ведомым и тихо ждет своей очереди. Это уже было в TokenRing
Однако, может оказаться два ведущих или никого.

Другой вариант. Драйвер RS485 следит за линией и самостоятельно борется с ошибками. А Ethernet, особенно коаксильный вариант.

P.S. С PROFIBUS не знаком (не требовалось).
Go to the top of the page
 
+Quote Post
ucMike
сообщение Dec 4 2008, 11:10
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 21-11-08
Пользователь №: 41 832



Цитата(ucMike @ Dec 4 2008, 01:13) *
P.S. С PROFIBUS не знаком (не требовалось).


Упс. Profibus как раз.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 1 2009, 05:05
Сообщение #10


кекс
******

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



Цитата(Bovolk @ Nov 16 2008, 13:01) *
Подчиненному когда начинать делать стартовую паузу, сразу после окончания передачи CRC мастером или после его завершающей паузы 3,5?

По завершающей паузе некоторые слейвы определяют границу пакета. (не все ж считают CRC на лету). Пауза между пакетами должна быть не менее 3.5. По приему CRC слейв может сразу же приступить к формированию ответа, но слать ответ в линию он должен не ранее чем через 3.5 сивольного интервала.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Jan 1 2009, 08:40
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



modbus plus - multimaster :
http://prodcs.ru/files/ModPlusDesignManual.pdf

можно сделать временнОе мультиплексирование, например мастер делает опрос узлов с периодом 5 сек, слейв может давать запросы между запросами мастера, со смещением 2.5 сек после запроса мастера.
Go to the top of the page
 
+Quote Post
koyodza
сообщение Oct 17 2009, 19:30
Сообщение #12


Местный
***

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



Цитата(defunct @ Jan 1 2009, 08:05) *
По завершающей паузе некоторые слейвы определяют границу пакета. (не все ж считают CRC на лету). Пауза между пакетами должна быть не менее 3.5. По приему CRC слейв может сразу же приступить к формированию ответа, но слать ответ в линию он должен не ранее чем через 3.5 сивольного интервала.

Довольно распространенное заблуждение насчет определения конца пакета путем подсчета CRC.
Стандарт однозначно определяет конец пакетов по таймауту (не менее 3,5 байтовых интервалов для скоростей ниже 19200 и 1,75 мсек для скоростей выше 19200).
Совсем не обязательно считать CRC на лету. Более того, обычно это даже вредно.
Ответ в линию начинается после приема запроса, таймаута (3,5), обработки пакета (подсчета CRC + обработки), и (в случае полудуплексной линии) дополнительного времени на переключение направления, обычно делается порядка нескольких мсек
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Oct 17 2009, 21:29
Сообщение #13





Guests






Цитата
Вопросы:
1. Можно ли сделать так, чтобы любое устройство могло взять на себя роль главного?
2. Каким образом вообще передавать информацию главному? Через регистры, что ли?
3. С чего вообще начинать?

3. Начинать нужно с детализации постановки задачи и выстраивания вашей системы на различных уровнях иерархии управления.
2. Начните с физического уровня. Определите, какое максимальное количество устройств может быть на линии. Какие объемы информации нужно передавать и с какой периодичностью. Тогда станет понятна необходимая скорость обмена и возможная частота опроса устройств.
1. Если за основу выбран протокол MODBUS, то я бы не советовал Вам делать систему со многими ведущими. На много проще, когда ведущий один. Желательно, что бы им было устройство с наибольшими собственными ресурсами -персональный компьютер (ПК), например.
0. На каждом уровне иерархии, ведущими могут быть различные устройства системы. Совсем не обязательно, чтобы ведущий был один и тот же на всех уровнях. Такое прямое, "лобовое" решение - не всегда самое лучшее. Например, на протокольном уровне ведущим может быть ПК, а на более высоком уровне - им может быть, к примеру, какой-нибудь выносной пульт управления. Хотя он будет подчиненным устройством с точки зрения MODBUS, но фактическое управление системой будет осуществляться с него. ПК будет периодически читать его по MODBUS, получая, таким способом, указания, что необходимо делать в данный момент. Далее, эти "указания" обрабатываются в ПК и преобразуются в последовательность протокольных команд для других подчиненных устройств... Подобным же образом можно реализовать и передачу функций ведущего устройства (высокоуровневого) другим устройствам или получить систему с многими ведущими. При этом, формально, протокол не будет нарушен, и коллизии между устройствами не будут возникать (по крайней мере на физическом уровне).
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 17 2009, 21:36
Сообщение #14


Гуру
******

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



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





Guests






Sorry, не посмотрел на дату. smile.gif Просто тема показалась интересной...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 9th July 2025 - 15:40
Рейтинг@Mail.ru


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