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

 
 
> Modbus RTU подобный протокол, проблема реализации, Может есть готовый с описанием.
Alex ma
сообщение Jul 29 2007, 17:34
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445



Вся фишка в проблеме определения стартовой последовательности, в Modbus – это пауза 3,5 кадра вроде, другой вариант уникальная стартовая последовательность, проблема исключения стартовой последовательности в данных, для МК мне кажется проще всего отслеживать паузу чем обрабатывать массив с поиском и заменой стартовой последовательности, чтоб она не встретилась в данных. Да, но на PC таймер под Windows только 1 мс дискретность.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Jul 30 2007, 20:15
Сообщение #2


кекс
******

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



Цитата(Alex ma @ Jul 29 2007, 20:34) *
Вся фишка в проблеме определения стартовой последовательности, в Modbus – это пауза 3,5 кадра вроде....
Да, но на PC таймер под Windows только 1 мс дискретность.

Ну не знаю как в PC (и надо ли оно вообще делать Modbus slave на PC).
На МК я поступаю так:
Приняв любой байт по УАРТу взвожу таймер, на интервал равный 4-м кадрам. И продолжаю прием.
По прерыванию таймера - взвожу флажек "Таймаут". В этом же обработчике таймера, отцепляю буфер текущего пакета, и подставляю вместо него новый.


Цитата(bodja74 @ Jul 30 2007, 14:35) *
Делать задержки на таймере не самое лучшее решение,используйте API функцию SLEEP из KERNEL32.
Типа так обьявляем

RTU-Мастер не обязан выдерживать точные паузы. Если скорость обмена некритична, то и таймером можно пользоваться, и Sleep'ом, чем угодно ;>

Самое плохое это то, что винда может втавлять непредсказуемые паузы внутри пакетов, что слейвом воспринимается однозначно - как куча битых пакетов.
Go to the top of the page
 
+Quote Post
_Алекс
сообщение Jul 31 2007, 04:15
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377



Цитата(defunct @ Jul 30 2007, 23:15) *
На МК я поступаю так:
Приняв любой байт по УАРТу взвожу таймер, на интервал равный 4-м кадрам. И продолжаю прием.
По прерыванию таймера - взвожу флажек "Таймаут". В этом же обработчике таймера, отцепляю буфер текущего пакета, и подставляю вместо него новый.


А как вы сделали, «Приняв любой байт по УАРТу взвожу таймер», в это время по юарту идут байты, таймер тикает, и переполняется, устанавливается флаг переполнения, или вы по приему байта с юарта сбрасываете счетчик таймера?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 31 2007, 10:15
Сообщение #4


кекс
******

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



Цитата(_Алекс @ Jul 31 2007, 07:15) *
или вы по приему байта с юарта сбрасываете счетчик таймера?

Именно так. Только не сбрасываю, а запускаю заново (если таймер был запущен, то он будет перезапущен).

Этот код у меня в конце обработчика прерывания RX:

Код
// initialize timeout timer
TCCR2 = 0; // stop mb timeout timer
TCNT2 = 0; // reset timeout timer
TIMSK |= (1 << OCIE2);
OCR2 = QuadCharInterval;  // <-- вычисляется при инициализации UART'a
TCCR2 = (1 << WGM21)|(1 << CS22)|(1 << CS20); // set prescaler to 1024 and run timer


Цитата(oran-be @ Jul 31 2007, 07:55) *
Я прпробовал на двум мамках - на одной оказался 91 байт, на другой - 173. Если длина пакета менее длины ФИФО, паузы не будет.

Вот оно оказывается что...
Спасибо за информацию!

Цитата(ALexx @ Jul 31 2007, 09:53) *
Порой приходится делать...
Делал девайс, который работал под управлением процессорной платы ICOP (одноплатный 386-й)
Так вот задачей было сгородить на нем Слейв Модбаса для связи со СКАДой.
Плата работает под ДОС-ом, поэтому сказанное ниже некоторый оффтоп, но может кому пригодится идея...

Знаю эти платы, на M6117. Неплохой вариант для быстрых решений если под рукой нет более подходящего железа.. Пока девайс на M6117 проходит стадию показухи, есть время чтобы сделать более подходящий девайс. Ну а по поводу программирования MB слейва под DOS, дык сложностей никаких не вижу, однозадачка как никак, настроил таймер на частоту кратную символам UART'a и все под контролем.

В серийке M6117 чрезмерно дорого получается, особенно если брать готовые платы. Девайс на базе AVR'ки (напр m128) по возможностям (производительности) будет то же самое, по надежности и потреблению - лучше, плюс быстрее стартует (перестартует), и дешевле в разы.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alex ma   Modbus RTU подобный протокол, проблема реализации   Jul 29 2007, 17:34
- - SasaVitebsk   Цитата(Alex ma @ Jul 29 2007, 20:34) Вся ...   Jul 29 2007, 18:18
- - oran-be   А разве в спецификации MODBUS RTU есть определение...   Jul 29 2007, 19:23
|- - Alex ma   У ведущего МК два USART один мастер второй слейв, ...   Jul 29 2007, 19:55
- - rezident   При реализации RTU-ных протоколов в контроллере на...   Jul 29 2007, 20:10
- - upc2   Это все условно.Никто на практике паузу в 3,5 сим...   Jul 30 2007, 06:46
|- - SasaVitebsk   Цитата(upc2 @ Jul 30 2007, 09:46) Это все...   Jul 30 2007, 10:58
|- - upc2   Цитата(SasaVitebsk @ Jul 30 2007, 13:58) ...   Jul 30 2007, 13:06
- - ALexx   Один из вариантов - в приложении. Представляет соб...   Jul 30 2007, 07:38
- - bodja74   Делать задержки на таймере не самое лучшее решение...   Jul 30 2007, 11:35
|- - singlskv   Цитата(bodja74 @ Jul 30 2007, 15:35) Дела...   Jul 30 2007, 13:26
|- - bodja74   Цитата(singlskv @ Jul 30 2007, 16:26) Sle...   Jul 30 2007, 16:16
|- - singlskv   Цитата(bodja74 @ Jul 30 2007, 20:16) ГЫ ,...   Jul 30 2007, 16:27
|- - bodja74   Цитата(singlskv @ Jul 30 2007, 19:27) Ну ...   Jul 30 2007, 20:44
|- - singlskv   Цитата(bodja74 @ Jul 31 2007, 00:44) Ей б...   Jul 30 2007, 21:04
- - Maddy   Ну Sleep как-то не кошерно для _таких_ задержек по...   Jul 30 2007, 17:41
|- - singlskv   Цитата(Maddy @ Jul 30 2007, 21:41) Ну Sle...   Jul 30 2007, 18:01
|- - SasaVitebsk   Цитата(singlskv @ Jul 30 2007, 21:01) Mil...   Jul 30 2007, 18:44
|- - upc2   Цитата(SasaVitebsk @ Jul 30 2007, 21:44) ...   Jul 31 2007, 04:49
|- - singlskv   Цитата(defunct @ Jul 31 2007, 00:15) Ну н...   Jul 30 2007, 22:45
|- - ALexx   Цитата(defunct @ Jul 30 2007, 23:15) Ну н...   Jul 31 2007, 06:53
- - oran-be   Тема получения точных задержек в виндозе очень бла...   Jul 30 2007, 20:23
- - rezident   oran-be, когда вы цитируете кого-то, то указывайте...   Jul 30 2007, 20:47
- - oran-be   Цитата(rezident)когда вы цитируете кого-то, то ука...   Jul 31 2007, 04:55
- - _Алекс   МК Slave: Скажем есть функция обработки принятого...   Jul 31 2007, 05:46
- - upc2   To _Алекс Прикрепил документ, где хорощо распиcа...   Jul 31 2007, 09:53


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

 


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


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