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

|
Всем доброго дня. Есть сеть устройств, работающих по протоколу модбас через RS485. Необходимо написать перехватчик сообщений для ком порта, способный ловить паузы между сообщениями. Вот как поймать паузы, пока не соображу. Драйвер возвращает пачки по несколько байт, но поймать получается только длинные паузы (между запросами), а вот разделить запрос-ответ пока не могу. Есть программы снифферы, которые как-то реализуют такую возможность. Надо написать свою, в которой данные преобразовать в удобоваримый вид, удобный для отладки работы сети устройств. В винде это наверное тяжело будет сделать, но может есть способ, о котором я пока не знаю.
|
|
|
|
|
 |
Ответов
|
Sep 7 2016, 18:22
|
Гуру
     
Группа: Свой
Сообщений: 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, а не занимайтесь ерундой.
|
|
|
|
|
Sep 8 2016, 03:53
|
Гуру
     
Группа: Свой
Сообщений: 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().
|
|
|
|
Сообщений в этой теме
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 страниц
1 2 >
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|