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

 
 
> сниффер ком порта
Alex_2015
сообщение Sep 6 2016, 13:56
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 8-08-15
Пользователь №: 87 893



Всем доброго дня. Есть сеть устройств, работающих по протоколу модбас через RS485. Необходимо написать перехватчик сообщений для ком порта, способный ловить паузы между сообщениями.
Вот как поймать паузы, пока не соображу. Драйвер возвращает пачки по несколько байт, но поймать получается только длинные паузы (между запросами), а вот разделить запрос-ответ пока не могу.
Есть программы снифферы, которые как-то реализуют такую возможность. Надо написать свою, в которой данные преобразовать в удобоваримый вид, удобный для отладки работы сети устройств.
В винде это наверное тяжело будет сделать, но может есть способ, о котором я пока не знаю.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DASM
сообщение Sep 6 2016, 15:56
Сообщение #2


Гуру
******

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



честно говоря я бы такую задачу решал иначе. А именно - сниффер пишется на МК, и отдает пакеты в комп приплюсовывая к ним time stamp
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 7 2016, 18:22
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(DASM @ Sep 6 2016, 21:56) *
честно говоря я бы такую задачу решал иначе. А именно - сниффер пишется на МК, и отдает пакеты в комп приплюсовывая к ним time stamp

Я бы тоже решал по-другому. А именно: с открытия MSDN и прочтения всего, что касается работы с COM-портом. Чего автор как видно не сделал.
Иначе он знал бы о функции SetCommTimeouts() WinAPI и многих других полезных. А не строил пустые предположения.
Далее: установил-бы ReadIntervalTimeout and ReadTotalTimeoutMultiplier to MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than zero and less than MAXDWORD
как советует MSDN, повысил приоритет принимающего потока, а также прочитал в MSDN про семейство функций QueryPerformanceFrequency()/QueryPerformanceCounter() и понял бы, что даже 95мкс - не есть проблема.
Другое дело что всё это лучше делать на железном RS-232 компа, а не USB-COM переходнике, времянки которого сомнительны.

Даже и с железным COM-портом и приоритетом потока ==REALTIME возможно будут проблемы из-за работы других драйверов винды (винта, видео и т.п.). Так что возможно лучше вынести такую работу на уровень драйверов.

Цитата(Alex_2015 @ Sep 7 2016, 18:42) *
Есть в структуре DCB символ XOFCHAR, который позволяет определить конец посылки.

Это вообще из другой оперы. Это для software flowcontrol.

Цитата(Alex_2015 @ Sep 7 2016, 18:42) *
Была мысль алгоритмически ловить конец посылки через подсчёт CRC, но вариант не самый красивый. Хотя должен привести к результату.

Лучше откройте наконец-то MSDN, а не занимайтесь ерундой.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 7 2016, 21:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Sep 7 2016, 21:22) *
QueryPerformanceFrequency()/QueryPerformanceCounter() и понял бы, что даже 95мкс - не есть проблема.

К чему опрос счетчиков хоть с тактовой процессора, если их НЕЛЬЗЯ со сколь-нибудь детерминированной точностью привязать к событиям UART.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 8 2016, 03:53
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Sep 8 2016, 03:06) *
К чему опрос счетчиков хоть с тактовой процессора, если их НЕЛЬЗЯ со сколь-нибудь детерминированной точностью привязать к событиям UART.

ТСу нужно не опрашивать счётчики, а вести лог обмена по каналу UART. Причём с таймштампами точностью до десятков мкс. Ну или хотя-бы видеть, что между двумя соседними байтами X1 и X2 была хоть какая-то пауза, обнаруженная драйвером канала или её не было. Аппаратура UART 16550 позволяет определять наличие паузы, значит и драйвер это должен видеть. А функция SetCommTimeouts(), как следует из её описания, должна позволить получить эту инфу юзеру.

Цитата(Alex_2015 @ Sep 8 2016, 07:23) *
Читал я MSDN в своё время, когда осваивал программирование ком порта. Но это ни чего не даёт. Когда драйвер захочет вернуть данные пользовательской программе, тогда и вернёт. И совсем не в режиме реального времени.

Т.е. - Вы утверждаете что MSDN врёт, говоря, что:
Код
If an application sets ReadIntervalTimeout and ReadTotalTimeoutMultiplier to MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than zero and less than MAXDWORD, one of the following occurs when the ReadFile function is called:
If there are any bytes in the input buffer, ReadFile returns immediately with the bytes in the buffer.
If there are no bytes in the input buffer, ReadFile waits until a byte arrives and then returns immediately.

Читаем первую строку с "if" и вторую, видим там слово "immediately", думаем.
Я почти уверен, что если приоритет вызывающего потока будет ==THREAD_PRIORITY_TIME_CRITICAL, а приоритет процесса ==REALTIME_PRIORITY_CLASS, то как только аппаратура UART зафиксирует, что в FIFO есть символы и с момента приёма последнего из них прошло более 3.5 символьных интервала, так сразу и вернёт управление вызывающему потоку.
Возможно даже хватит меньших приоритетов у процесса/потока, главное - превысить приоритеты всех других работающих в системе потоков.
И всё конечно зависит ещё от драйвера. Стандартный виндовый драйвер для UART 16550 на сис. шине должен соответствовать требованиям MSDN. Про сторонние драйвера UART, тем более для USB-UART речи нет - они могут только примерно соответствовать MSDN. Но думаю, если устройство, реализующее CDC-класс USB, при отправке данных, выделяет разные кадры ModBus в отдельные пакеты по USB, то и драйвер CDC-класса под виндой также сможет выполнить требования SetCommTimeouts().
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alex_2015   сниффер ком порта   Sep 6 2016, 13:56
- - bolden   Добрый день, если вы ловите запрос+ответ и если не...   Sep 6 2016, 14:07
- - dm37   Можно принимать байты по одному с таймаутом, т.е. ...   Sep 6 2016, 14:24
- - Alex_2015   Такой вариант я рассматривал, но здесь ключевая фр...   Sep 6 2016, 14:39
|- - _3m   Цитата(Alex_2015 @ Sep 6 2016, 17:39) Осн...   Sep 6 2016, 18:08
- - dm37   т.е. вы подключаетесь к какой либо паре устройств ...   Sep 6 2016, 15:06
||- - zltigo   QUOTE (jcxz @ Sep 8 2016, 06:53) ТСу нужн...   Sep 8 2016, 06:28
||- - jcxz   Цитата(zltigo @ Sep 8 2016, 12:28) Повтор...   Sep 8 2016, 09:10
||- - zltigo   QUOTE (jcxz @ Sep 8 2016, 12:10) Именно н...   Sep 8 2016, 10:42
||- - jcxz   Цитата(zltigo @ Sep 8 2016, 16:42) Разуме...   Sep 8 2016, 18:02
||- - zltigo   QUOTE (jcxz @ Sep 8 2016, 21:02) Т.е. - у...   Sep 9 2016, 07:23
||- - Ruslan1   Мне кажется, изначально вопрос некорректно поставл...   Sep 11 2016, 18:59
||- - jcxz   Цитата(zltigo @ Sep 9 2016, 13:23) Может,...   Sep 13 2016, 05:32
||- - zltigo   QUOTE (jcxz @ Sep 13 2016, 08:32) Вы пута...   Sep 13 2016, 07:28
|- - DASM   Цитата(jcxz @ Sep 7 2016, 21:22) Я бы тож...   Sep 8 2016, 08:14
- - Lagman   Очень давно, чем то подобным занимался (отлавливал...   Sep 6 2016, 20:35
- - k155la3   Если пишете сами, попробуйте использовать таймауты...   Sep 7 2016, 06:47
- - megajohn   Цитата(Alex_2015 @ Sep 6 2016, 17:56) Все...   Sep 7 2016, 08:36
- - Alex_2015   На тему конвертора мысли были. Но только на самый ...   Sep 7 2016, 12:42
- - Alex_2015   Читал я MSDN в своё время, когда осваивал программ...   Sep 8 2016, 01:23
- - k155la3   Если не требуется переносимость-универсальгность, ...   Sep 8 2016, 06:00
- - Alex_2015   Я не утверждаю, что MSDN врёт. Просто констатирую ...   Sep 8 2016, 06:11
- - Alex_2015   Я всё-таки внесу некоторые дополнения. Использую п...   Sep 9 2016, 01:11
- - juvf   2ТС Тут только аппаратный снифер поможет. Можно сд...   Sep 21 2016, 18:29
|- - Lagman   Цитата(juvf @ Sep 21 2016, 21:29) Сможет ...   Sep 22 2016, 10:16
|- - juvf   Цитата(Lagman @ Sep 22 2016, 15:16) it is...   Sep 22 2016, 10:20
|- - zltigo   QUOTE (Lagman @ Sep 22 2016, 13:16) и есл...   Sep 22 2016, 10:40
|- - Lagman   Цитата(zltigo @ Sep 22 2016, 13:40) В час...   Sep 22 2016, 11:18
|- - demiurg_spb   Добрый день коллеги! Захотелось обсудить вопро...   Sep 22 2016, 12:26
|- - megajohn   Цитата(demiurg_spb @ Sep 22 2016, 15:26) ...   Sep 22 2016, 12:35
||- - demiurg_spb   Нет. Интересует именно RS485! Наверное мне сто...   Sep 22 2016, 12:41
|- - zltigo   QUOTE (demiurg_spb @ Sep 22 2016, 15:26) ...   Sep 22 2016, 13:50
|- - demiurg_spb   Цитата(zltigo @ Sep 22 2016, 16:50) Увы, ...   Sep 23 2016, 10:45
|- - juvf   Цитата(demiurg_spb @ Sep 23 2016, 15:45) ...   Sep 23 2016, 11:16
|- - demiurg_spb   Цитата(juvf @ Sep 23 2016, 14:16) не един...   Sep 23 2016, 11:39
|- - zltigo   QUOTE (juvf @ Sep 23 2016, 14:16) не един...   Sep 23 2016, 11:55
- - juvf   ЦитатаМастер хочет передать и не знает был ли шум ...   Sep 22 2016, 12:47
|- - demiurg_spb   Цитата(juvf @ Sep 22 2016, 15:47) Мне бы ...   Sep 22 2016, 12:51
||- - juvf   Цитата(demiurg_spb @ Sep 22 2016, 17:51) ...   Sep 22 2016, 13:08
||- - demiurg_spb   Понятно что шумов быть не должно, но они как-бы ес...   Sep 22 2016, 13:13
||- - juvf   Цитата(demiurg_spb @ Sep 22 2016, 18:13) ...   Sep 22 2016, 13:19
||- - demiurg_spb   Понятно, что изолированный - это гальванически не ...   Sep 22 2016, 13:56
|- - zltigo   QUOTE (juvf @ Sep 22 2016, 15:47) Не нужн...   Sep 22 2016, 14:07
|- - Ruslan1   Цитата(juvf @ Sep 22 2016, 15:47) когда н...   Sep 23 2016, 12:44
|- - demiurg_spb   2juvf: Я стараюсь на комп не заводить MODBUS-RTU -...   Sep 23 2016, 13:04
- - juvf   ps Цитатапомехи могут дать ложный старт-бит.не вс...   Sep 22 2016, 12:56
|- - demiurg_spb   Цитата(juvf @ Sep 22 2016, 15:56) Про то,...   Sep 22 2016, 13:01
- - juvf   Цитатадля любителей растяжек НИКОГДА не работавших...   Sep 23 2016, 03:14
|- - zltigo   QUOTE (juvf @ Sep 23 2016, 06:14) zltigo,...   Sep 23 2016, 09:08
|- - juvf   Цитата(zltigo @ Sep 23 2016, 14:08) Все э...   Sep 23 2016, 10:34
|- - zltigo   QUOTE (juvf @ Sep 23 2016, 13:34) не ради...   Sep 23 2016, 11:38
- - juvf   ЦитатаМне безразлично кто и что НЕ делает и по как...   Sep 23 2016, 12:09
|- - zltigo   QUOTE (juvf @ Sep 23 2016, 15:09) К слова...   Sep 23 2016, 12:41
- - juvf   ЦитатаПод голый ПК, ака DOS - без проблем.Поделите...   Sep 25 2016, 09:02
|- - zltigo   QUOTE (juvf @ Sep 25 2016, 12:02) Поделит...   Sep 25 2016, 14:28
|- - Ruslan1   juvf , Вы хотели что-то спросить, или просто еще р...   Sep 25 2016, 17:33
- - net   поддержу особенно про стаффинг есть же протокол ...   Sep 25 2016, 17:38
- - dm37   немного в поддержу juvf Если вы работаете по прото...   Sep 25 2016, 18:23
|- - AHTOXA   Добавлю сюда пару ссылок на предыдущие обсуждения ...   Sep 25 2016, 19:10
|- - net   QUOTE (dm37 @ Sep 25 2016, 21:23) немного...   Sep 26 2016, 08:37
|- - zltigo   QUOTE (dm37 @ Sep 25 2016, 21:23) немного...   Sep 26 2016, 09:51
|- - net   QUOTE (zltigo @ Sep 26 2016, 12:51) нет...   Sep 26 2016, 10:19
||- - zltigo   QUOTE (net @ Sep 26 2016, 13:19) попробуй...   Sep 26 2016, 11:47
||- - net   QUOTE (zltigo @ Sep 26 2016, 14:47) ктож...   Sep 26 2016, 11:56
||- - juvf   Цитата(zltigo @ Sep 26 2016, 16:47) у нег...   Sep 26 2016, 12:00
|- - juvf   Цитата(zltigo @ Sep 26 2016, 14:51) Поним...   Sep 26 2016, 10:20
- - dm37   Цитата"Стандарт" на MODBUS в котором про...   Sep 26 2016, 12:21
|- - zltigo   QUOTE (dm37 @ Sep 26 2016, 15:21) Надеюсь...   Sep 26 2016, 16:49
- - dm37   to zltigo для информации во вложении со страницы ...   Sep 26 2016, 17:00
|- - AHTOXA   Цитата(dm37 @ Sep 26 2016, 22:00) во влож...   Sep 26 2016, 19:35
|- - juvf   Цитата(AHTOXA @ Sep 27 2016, 00:35) Там к...   Sep 28 2016, 08:59
|- - AHTOXA   Цитата(juvf @ Sep 28 2016, 13:59) ну тут ...   Sep 28 2016, 10:07
|- - net   QUOTE (AHTOXA @ Sep 28 2016, 13:07) Но ес...   Sep 28 2016, 10:17
|- - _Pasha   Цитата(net @ Sep 28 2016, 13:17) а если б...   Sep 28 2016, 10:25
||- - net   QUOTE (_Pasha @ Sep 28 2016, 13:25) как В...   Sep 28 2016, 10:36
|- - demiurg_spb   Цитата(net @ Sep 28 2016, 13:17) а если б...   Sep 28 2016, 10:55
|- - net   QUOTE (demiurg_spb @ Sep 28 2016, 13:55) ...   Sep 28 2016, 11:12
|- - _Pasha   Цитата(demiurg_spb @ Sep 28 2016, 13:55) ...   Sep 28 2016, 11:24
- - juvf   срезюмирую.... Цитата(zltigo @ Sep 3 2015, 1...   Sep 27 2016, 06:49
|- - net   QUOTE (juvf @ Sep 27 2016, 09:49) QUOTE (...   Sep 27 2016, 11:18
|- - demiurg_spb   Цитата(juvf @ Sep 27 2016, 09:49) 2demiur...   Sep 27 2016, 14:45
|- - net   QUOTE (demiurg_spb @ Sep 27 2016, 17:45) ...   Sep 27 2016, 15:14
|- - _Pasha   Цитата(demiurg_spb @ Sep 27 2016, 17:45) ...   Sep 27 2016, 15:22
|- - zltigo   QUOTE (_Pasha @ Sep 27 2016, 18:22) Кста,...   Sep 27 2016, 20:46
|- - _Pasha   Цитата(zltigo @ Sep 27 2016, 23:46) 1) Аб...   Sep 28 2016, 06:55
||- - zltigo   QUOTE (_Pasha @ Sep 28 2016, 09:55) 1. Не...   Sep 28 2016, 11:52
||- - net   QUOTE (zltigo @ Sep 28 2016, 14:52) Не ре...   Sep 28 2016, 11:56
||- - AHTOXA   Цитата(zltigo @ Sep 28 2016, 16:52) Не ре...   Sep 28 2016, 12:15
||- - zltigo   QUOTE (AHTOXA @ Sep 28 2016, 15:15) Старт...   Sep 28 2016, 12:33
||- - net   QUOTE (zltigo @ Sep 28 2016, 15:33) Меня ...   Sep 28 2016, 12:47
||- - AHTOXA   Цитата(zltigo @ Sep 28 2016, 17:33) Если ...   Sep 28 2016, 12:55
||- - zltigo   QUOTE (AHTOXA @ Sep 28 2016, 15:55) Нет, ...   Sep 28 2016, 13:13
|- - net   QUOTE (zltigo @ Sep 27 2016, 23:46) 2) На...   Sep 28 2016, 07:16
- - dm37   to АНТОХА ЦитатаТам как раз сказано, что растяжки ...   Sep 27 2016, 13:22
- - _Pasha   да модбас RTU, что там оговаривать   Sep 28 2016, 07:42
- - net   QUOTE (_Pasha @ Sep 28 2016, 10:42) да мо...   Sep 28 2016, 08:19
2 страниц V   1 2 >


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

 


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


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