|
Использование протокола MODBUS |
|
|
|
Nov 8 2008, 12:21
|
Участник

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

|
Всем доброго времени суток! Если кто работал с Modbus RTU, и использовал его в своих разработках, подскажите.. В спецификации указано, что межкадровая пауза равна 3.5 символа, а пауза между байтами в кадре не более 1.5 символа. Как я понимаю символ - это число от 0 до 15 (4 бита). Вопрос - а сколько это будет в битах? Если считать только данные - т.е. 8 бит на два символа, то получается 14 и 6 бит соответственно. Или считать за два символа всю посылку со стартовым и стоповыми битами тоже, т.е. - 10/11 бит? Тогда уже получится дробное число бит Заранее благодарен.
Сообщение отредактировал Denis K - Nov 8 2008, 12:25
|
|
|
|
|
 |
Ответов
|
Nov 8 2008, 14:21
|
Гуру
     
Группа: Свой
Сообщений: 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)  Тогда уже получится дробное число бит  А что вас так волнуют эти биты? Вас ведь время паузы интересует, а не просто биты. Ну и считайте его в размерности времени - в миллисекундах там всяких  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мс.
|
|
|
|
|
Nov 9 2008, 09:57
|
Участник

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

|
Цитата А что вас так волнуют эти биты? Вас ведь время паузы интересует, а не просто биты. Ну и считайте его в размерности времени - в миллисекундах там всяких  Конечно паузу будем считать в микросекундах, просто в битах проще понять принцип, без относительно скорости передачи. Цитата Символ это один информационный символ в асинхронном канале - 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 бит соответственно. Цитата Еще не следует забывать, что в спецификации 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
|
|
|
|
|
Nov 12 2008, 17:00
|
Гуру
     
Группа: Свой
Сообщений: 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 бит соответственно. Фтопку подобные переводы!  Есть стандарт 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).
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 12 2008, 18:13
|
Участник

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

|
Спасибо! Вообщем все понятно. Что касается других протоколов, то чем уж так сильно лучше WAKE чем Модбас? Да и че в нем дурацкого? Кроме того что-то я не встречал пока промышленных устройств с WAKE. Может конечно не там искал А кроме WAKE какие еще есть конкуренты у Модбаса?
|
|
|
|
Сообщений в этой теме
Denis K Использование протокола MODBUS Nov 8 2008, 12:21    Bovolk Цитата(Denis K @ Nov 12 2008, 20:13) Что ... Nov 14 2008, 15:52     rezident Цитата(Bovolk @ Nov 14 2008, 20:52) Главн... Nov 14 2008, 16:08      Bovolk Цитата(rezident @ Nov 14 2008, 18:08) Для... Nov 14 2008, 17:23       rezident Цитата(Bovolk @ Nov 14 2008, 22:23) Не зн... Nov 14 2008, 17:54 Denis K Всем привет!
Есть необходимость реализовать M... Nov 9 2008, 10:29 IVANS Цитата(Denis K @ Nov 9 2008, 13:29) ...
Е... Nov 12 2008, 10:16 MrYuran FreeModbus
Под пик не уверен, а под авр и другие... Nov 9 2008, 10:53 Denis K С Модбасом все понятно. Старая, надежная, широко р... Nov 15 2008, 19:05
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|