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

 
 
> 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
ALexx
сообщение Jul 31 2007, 06:53
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Цитата(defunct @ Jul 30 2007, 23:15) *
Ну не знаю как в PC (и надо ли оно вообще делать Modbus slave на PC).


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

Основной проблемой было отловить 3.5-кратный интервал тишины на линии...
Игра с таймером требуемого результата не принесла...
Внимательно изучив описание стандартного УАРТа заметил (smile.gif) очень "полезное" прерывание - по таймауту (4-х кратному интервалу передачи символа).
Ну а дальше - дело техники...
1) Настраиваем ФИФО например на 16 символов.
2) Если возникает прерывание заполнения ФИФО (не таймаут) - вычитываем 16 байт в буфер и продолжаем ожидать "доприема" пакета.
3) Если возникает прерывание по таймауту - вычитываем байты из ФИФО и считаем, что пакет принят, переходим к его анализу.

Естественно, это все не в основном цикле крутится - за все действия отвечают обработчики прерываний от СОМ-порта, выставляющие флаги, анализируемые основной программой.
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
|- - _Алекс   Цитата(defunct @ Jul 30 2007, 23:15) На М...   Jul 31 2007, 04:15
||- - defunct   Цитата(_Алекс @ Jul 31 2007, 07:15) или в...   Jul 31 2007, 10:15
- - 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 - 07:05
Рейтинг@Mail.ru


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