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

 
 
> Использование протокола MODBUS
Denis K
сообщение Nov 8 2008, 12:21
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 8-12-07
Из: Санкт-Петербург
Пользователь №: 33 101



Всем доброго времени суток!

Если кто работал с Modbus RTU, и использовал его в своих разработках, подскажите..

В спецификации указано, что межкадровая пауза равна 3.5 символа, а пауза между байтами в кадре не более 1.5 символа. Как я понимаю символ - это число от 0 до 15 (4 бита).

Вопрос - а сколько это будет в битах?
Если считать только данные - т.е. 8 бит на два символа, то получается 14 и 6 бит соответственно.
Или считать за два символа всю посылку со стартовым и стоповыми битами тоже, т.е. - 10/11 бит?
Тогда уже получится дробное число бит 07.gif

Заранее благодарен.

Сообщение отредактировал Denis K - Nov 8 2008, 12:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Nov 8 2008, 14:21
Сообщение #2


Гуру
******

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



Цитата(Denis K @ Nov 8 2008, 17:21) *
Как я понимаю символ - это число от 0 до 15 (4 бита).
Символ это один информационный символ в асинхронном канале - 7 или 8 бит данных, обрамленные старт-битом, битом четности и стоп-битами.
Цитата(Denis K @ Nov 8 2008, 17:21) *
Вопрос - а сколько это будет в битах?
В зависимости от формата от 9 до 12 бит. Обязательны старт-бит, 7/8 бит данных и стоп-бит. Бит четности может быть, а может и не быть. Точно также как один или два стоп-бита.
Цитата(Denis K @ Nov 8 2008, 17:21) *
Тогда уже получится дробное число бит 07.gif
А что вас так волнуют эти биты? Вас ведь время паузы интересует, а не просто биты. Ну и считайте его в размерности времени - в миллисекундах там всяких laughing.gif
t(3.5)=3500*(START+DATA+PARITY+STOP)/BAUD, где START - старт-бит (одна штука), DATA - количество бит данных (7 или 8), PARITY - количество бит четности (0 или 1), STOP - количество стоп-битов (1 или 2), BAUD - скорость передачи. Результат (время паузы 3,5 символа) будет в миллисекундах.
Еще не следует забывать, что в спецификации ModBus over Serial line оговорена длительность символа - 11 бит (старт, 8 данных, четность, 1 стоп-бит) и минимальное время паузы тишины (3,5 символа) ограничено 1,75 мс и минимальной паузы между символами (1,5 символа) 0,75мс.
Go to the top of the page
 
+Quote Post
Denis K
сообщение Nov 9 2008, 09:57
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 8-12-07
Из: Санкт-Петербург
Пользователь №: 33 101



Цитата
А что вас так волнуют эти биты? Вас ведь время паузы интересует, а не просто биты. Ну и считайте его в размерности времени - в миллисекундах там всяких laughing.gif


Конечно паузу будем считать в микросекундах, просто в битах проще понять принцип, без относительно скорости передачи.

Цитата
Символ это один информационный символ в асинхронном канале - 7 или 8 бит данных, обрамленные старт-битом, битом четности и стоп-битами.


Как я понял из спецификации ModBus over Serial line (стр.12, п2.5.1),
символ - это 4-х битное шестнадцетеричное число от 0 до 15 (0..F).
А в 8 битах данных, т.е. одном байте содержится два символа.

Цитата
t(3.5)=3500*(START+DATA+PARITY+STOP)/BAUD, где START - старт-бит (одна штука), DATA - количество бит данных (7 или 8), PARITY - количество бит четности (0 или 1), STOP - количество стоп-битов (1 или 2), BAUD - скорость передачи. Результат (время паузы 3,5 символа) будет в миллисекундах.


Т.е. получается что размер одного символа (в битах) - 0.5*(START+DATA+PARITY+STOP)
а не - 0.5*(DATA).
Как все-таки правильно?

Нашел на сайте НИЛ АП http://rlda.ru/ описание Modbus.
Они утверждают, что 3.5 символа это 14 бит, ну и 1.5 - 6 бит соответственно.

help.gif

Цитата
Еще не следует забывать, что в спецификации ModBus over Serial line оговорена длительность символа - 11 бит (старт, 8 данных, четность, 1 стоп-бит) и минимальное время паузы тишины (3,5 символа) ограничено 1,75 мс и минимальной паузы между символами (1,5 символа) 0,75мс.


Хорошо что написали об этом.
Как я понял, данные значения желательны и рекомендованны, но не обязательны к применению. И если контроллер на скоростях выше 19200 может отсчитать четко паузу в 3.5 символа, то пусть так и делает.
Или опять таки, для высоких скоростей надо использовать указанные выше значения для пауз?
Если так, то преимущество по скорости 57600 в сравнении к 19200 сходит на нет.
Так как пауза в 1.75 мс - это больше 9 переданных байт на 57600 и получается,
что если средняя длина сообщения или ответа будет 8 байт, то с паузой уже 17 байт.
Т.е. за секунду можно провести по максимуму около 150 актов обмена,
а на скорости в 19200, с паузами в 3.5 символа - около 90.
Как то не шустро получается, а хотелось бы использовать по максимуму.

Сообщение отредактировал Denis K - Nov 9 2008, 09:58
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 12 2008, 17:00
Сообщение #4


Гуру
******

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



Цитата(Denis K @ Nov 9 2008, 14:57) *
Конечно паузу будем считать в микросекундах, просто в битах проще понять принцип, без относительно скорости передачи.
Сами себе противоречите. Пауза имеет размерность времени, зачем биты-то?
Цитата(Denis K @ Nov 9 2008, 14:57) *
Как я понял из спецификации ModBus over Serial line (стр.12, п2.5.1),
символ - это 4-х битное шестнадцетеричное число от 0 до 15 (0..F).
А в 8 битах данных, т.е. одном байте содержится два символа.
Т.е. получается что размер одного символа (в битах) - 0.5*(START+DATA+PARITY+STOP)
а не - 0.5*(DATA).
Как все-таки правильно?
Правильно так, как я в предыдущем сообщении описал. Если вас смутил абзац
Цитата
When devices communicate on a MODBUS serial line using the RTU (Remote Terminal Unit) mode, each 8–bit byte in a message
contains two 4–bit hexadecimal characters. The main advantage of this mode is that its greater character density allows better data
throughput than ASCII mode for the same baud rate. Each message must be transmitted in a continuous stream of characters.
то там про отличия режимов RTU и ASCII сообщение идет речь. В RTU в каждом символе передается один байт информации, а в ASCII в каждом символе только одна тетрада (полубайт).
Цитата(Denis K @ Nov 9 2008, 14:57) *
Нашел на сайте НИЛ АП http://rlda.ru/ описание Modbus.
Они утверждают, что 3.5 символа это 14 бит, ну и 1.5 - 6 бит соответственно.
Фтопку подобные переводы! sad.gif Есть стандарт ModBus - им и руководствуйтесь.
Цитата(Denis K @ Nov 9 2008, 14:57) *
Хорошо что написали об этом.
Как я понял, данные значения желательны и рекомендованны, но не обязательны к применению. И если контроллер на скоростях выше 19200 может отсчитать четко паузу в 3.5 символа, то пусть так и делает.
Или опять таки, для высоких скоростей надо использовать указанные выше значения для пауз?
Если вы хотите, чтобы ваше устройство нормально работало с устройствами других производителей, то делайте так, как указано в рекомендации.
Цитата(Denis K @ Nov 9 2008, 14:57) *
Если так, то преимущество по скорости 57600 в сравнении к 19200 сходит на нет.
Так как пауза в 1.75 мс - это больше 9 переданных байт на 57600 и получается,
что если средняя длина сообщения или ответа будет 8 байт, то с паузой уже 17 байт.
Т.е. за секунду можно провести по максимуму около 150 актов обмена,
а на скорости в 19200, с паузами в 3.5 символа - около 90.
Как то не шустро получается, а хотелось бы использовать по максимуму.
ModBus весьма старый и дурацкий протокол. непонятно зачем вообще вы его возжелали использовать? Если у вас есть такое требование в ТЗ, то понятно. Если же только потому что других протоколов не знаете, то советую посмотреть описание протоколов типа SLIP, Wake и сравнить их эффективность и удобству реализации по сравнению с ModBus.

P.S. на скриншоте из спецификации пояснение к определению символа (char, character).
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Denis K
сообщение Nov 12 2008, 18:13
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 8-12-07
Из: Санкт-Петербург
Пользователь №: 33 101



Спасибо! Вообщем все понятно.
beer.gif

Что касается других протоколов, то чем уж так сильно лучше WAKE чем Модбас? Да и че в нем дурацкого? Кроме того что-то я не встречал пока промышленных устройств с WAKE.
Может конечно не там искал smile.gif

А кроме WAKE какие еще есть конкуренты у Модбаса?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 22:35
Рейтинг@Mail.ru


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