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

 
 
> Windows7: прием байтов через COM-порт без потерь, Кто-то имеет личный опыт? чем побороть потерю отдельных байтов?
Ruslan1
сообщение May 22 2017, 06:27
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!
Есть Windows7 Pro, 32-bit, компьютер- китайский одноплатник на Intel 1037U, 4GB RAM.
СОМ-порты- 4 штуки прямо на материнке.
И есть внешний передатчик, посылающий в COM-порт пакеты.
Скорость- 115200, стандартный формат 8N1.
Длина пакета- не более 255 байт, межпакетный интервал- не менее 4 байт, часто гораздо больше (десятки миллисекунд). Каждый пакет имеет контрольную сумму (crc16), по которой и принимается решение о валидности пакета. Общая загрузка канала где-то 5-8 килобайт в секунду, то есть до 80%. Загрузка CPU около 10-15%.

И есть самописная программа на С++Билдере (6), данный вариант делался по прерываниям, с несколькими потоками (базой был вот этот документ).
Есть поток, принимающий все байты по прерываниям и валящий в большой кольцевой буфер. И другой поток периодически выгребает байты из буфера и делит на пакеты для обработки, проверяет валидность.

Только прием, никаких переключений на передачу.
В результате приемник иногда пропускает байты. То есть все принятые байты всегда совпадают с переданными, но некоторые байты пропущены. Всегда пропущено не более одного байта за раз, в любом месте пакета. Часто бывает что пропущено по одному байту в двух следующих друг за другом пакетах.

Обычно фактов потери байта где-то 10-20 в сутки. Корреляция с действиями Виндоуса пока не найдена, очень уж все случайно.
Потери именно в компьютере- подключенный прямо к этому же разъему логический анализатор исправно ловит все байты, никакого криминала или отклонений во времянке не обнаружено (по уровню тоже все без проблем)


Вопросов два:
1. Кто-то в подобных условиях добивался абсолютно безошибочного приема потока через COM-порт в Виндоус (7) на 115200?
2. куда копать? Сильно надеюсь что моя программа виновата. На другом железе пробовал- эффект тот же, то есть это не электроника глючит.
С приоритетами игрался, никакого эффекта.

Заранее спасибо за любые советы (по существу).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
XVR
сообщение May 29 2017, 11:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Ваш снифер умеет показывать ошибки от COM порта? Если да, то включите их показ. Возможно байт не принялся по причине Framing Error.
Еще попробуйте осцилографом замерить точную частоту (время битового интервала). Потом включите порт на передачу и замерьте то же самое от РС (например через какой нибудь терминал). Если разница будет более 5% - то это оно sm.gif Если более 1% - то может быть оно.

Ну и уровни проверьте. Настоящий COM порт должен обеспечивать +/- 12В, но лично я таких давно не видел. Обычно все в районе 5-10В бегает.
У меня даже был один сервер с COM портом который отказался свои же собственные уровни воспринимать (выдавал на выход 5В, на входе хотел не менее 7-8В) sad.gif
Go to the top of the page
 
+Quote Post
V_G
сообщение May 29 2017, 11:31
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(XVR @ May 29 2017, 21:07) *
Ну и уровни проверьте. Настоящий COM порт должен обеспечивать +/- 12В, но лично я таких давно не видел. Обычно все в районе 5-10В бегает.

Стандарт RS-232 предполагает уровни ±3...30 В, с этим диапазоном должны уметь работать все правильные порты. Как правило, периферия, в которой используются преобразователи уровня с удвоением питания, выдает ±6...10В, и это никак не должно сказываться на надежности передачи данных.
Go to the top of the page
 
+Quote Post
XVR
сообщение May 29 2017, 11:58
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(V_G @ May 29 2017, 14:31) *
Стандарт RS-232 предполагает уровни ±3...30 В, с этим диапазоном должны уметь работать все правильные порты.
Ключевое слово 'правильные'. Кто знает, что именно поставили китайцы в RS232 на этом РС?

Go to the top of the page
 
+Quote Post
Ruslan1
сообщение May 29 2017, 12:24
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(XVR @ May 29 2017, 13:58) *
Ключевое слово 'правильные'. Кто знает, что именно поставили китайцы в RS232 на этом РС?

Ребята, ну нельзя же так уж совсем. Уже сколько раз вижу ситуации про чукчу, который ни разу ни читатель.
Я уже говорил, что пробовал на разных компьютерах. Правда, всегда под Win7.
Если бы мне еще кто-нибудь сказал как детектировать вероятное падение амплитуды на пару байт в течении ну хоть часа без долгозаписывающего осциллографа- скажу спасибо.
понятно, что я в первую очередь про уровни подумал, еще месяц назад. Проверил в онлайне, но детальную долговременную запись аналогового сигнала и синхронизацию с цифрой не делал.
Первое что пришло в голову- виртуальный скоп на саундбластере, но он мои 55 килогерц не возьмет, а если вдруг и возьмет, то ни о какой достоверности измеряемого уровня на разных байтах говорить не приходится.
Пока что провожу симптоматичное лечение и тесты для локализации проблемы. Надеюсь что это глюки в подключенном к сериальному порту девайсе (конвертере RS485/232), с кратковременных падением уровня. Но опять же, пробовал и другие адаптеры, правда из той же серии (используется Мокса с опторазвязкой). попробую что-то еще.
Очень может быть что проблема многоуровневая. Буквально на прошлой неделе такое решал- проблема одновременно была и Матлабовском скрипте, и в формате файла данных, и в методике расчета в устройстве которое считало данные для этого файла, прямо цепочку раскручивал, хотя вначале думал что ошибка просто в скрипте. Но это не в данном устройстве sm.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 30 2017, 08:50
Сообщение #6


Гуру
******

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



Цитата(Ruslan1 @ May 29 2017, 14:24) *
Если бы мне еще кто-нибудь сказал как детектировать вероятное падение амплитуды на пару байт в течении ну хоть часа без долгозаписывающего осциллографа- скажу спасибо.

В моём домашнем осцилле есть функция такая: можно задать допустимые границы осциллограммы на экране (её формы), и он зафиксирует момент выхода осциллограммы за пределы паттерна. Дальше - просто включить передачу постоянного пакета байт. И настроить эту функцию на осциллограмму этого пакета. Этот паттерн задаётся графически на экране.
ATTEN 1152
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ruslan1   Windows7: прием байтов через COM-порт без потерь   May 22 2017, 06:27
- - AlexRayne   Цитата(Ruslan1 @ May 22 2017, 10:27) Есть...   May 22 2017, 08:15
|- - Ruslan1   AlexRayne, большое спасибо за конструктивный ответ...   May 22 2017, 12:23
||- - AlexRayne   Цитата(Ruslan1 @ May 22 2017, 16:23) Alex...   May 23 2017, 09:20
||- - Ruslan1   Цитата(AlexRayne @ May 23 2017, 12:20) Во...   May 23 2017, 11:17
||- - AlexRayne   Цитата(Ruslan1 @ May 23 2017, 15:17) Хм. ...   May 23 2017, 15:09
||- - Ruslan1   Большое спасибо всем за кучу отличных идей и совет...   May 23 2017, 17:13
||- - AlexRayne   Цитата(Ruslan1 @ May 23 2017, 20:13) дада...   May 23 2017, 20:00
||- - AHTOXA   Добавлю в копилку способов передачи данных от пото...   May 24 2017, 07:07
|- - Lagman   Цитата(AlexRayne @ May 22 2017, 11:15) Чт...   May 22 2017, 12:59
- - neiver   Начинать надо с того, что COM порт вообще и его ре...   May 22 2017, 08:25
|- - AlexRayne   Цитата(neiver @ May 22 2017, 12:25) Начин...   May 22 2017, 08:37
|- - sonycman   Цитата(neiver @ May 22 2017, 12:25) Начин...   May 22 2017, 13:48
||- - jcxz   Цитата(sonycman @ May 22 2017, 15:48) Тож...   May 25 2017, 22:14
||- - AHTOXA   Цитата(jcxz @ May 26 2017, 03:14) Хмм... ...   May 26 2017, 07:05
||- - jcxz   Цитата(AHTOXA @ May 26 2017, 09:05) Да, г...   May 26 2017, 10:14
||- - AHTOXA   Цитата(jcxz @ May 26 2017, 15:14) Читать ...   May 26 2017, 11:23
||- - jcxz   Цитата(AHTOXA @ May 26 2017, 13:23) Если ...   May 26 2017, 12:38
||- - V_G   Цитата(jcxz @ May 26 2017, 22:38) Мне его...   May 26 2017, 13:42
|||- - jcxz   Цитата(V_G @ May 26 2017, 15:42) А вот фу...   May 26 2017, 16:13
|||- - XVR   Цитата(jcxz @ May 26 2017, 19:13) Я вот н...   May 26 2017, 19:11
||||- - AlexRayne   ЦитатаЯ вот не пойму - а в чём плюс-то такого разд...   May 26 2017, 20:19
|||- - V_G   Цитата(jcxz @ May 27 2017, 02:13) Вот зде...   May 26 2017, 22:47
|||- - jcxz   Цитата(V_G @ May 27 2017, 00:47) Речь вед...   May 29 2017, 08:12
||- - XVR   Цитата(jcxz @ May 26 2017, 15:38) Затем, ...   May 26 2017, 14:15
||- - AHTOXA   Цитата(jcxz @ May 26 2017, 17:38) А если ...   May 27 2017, 00:28
|- - XVR   Цитата(neiver @ May 22 2017, 11:25) У ста...   May 23 2017, 11:20
|- - Ruslan1   Цитата(XVR @ May 23 2017, 13:20) Чтение э...   May 23 2017, 12:42
|- - V_G   Цитата(Ruslan1 @ May 23 2017, 22:42) Я то...   May 23 2017, 13:33
- - rx3apf   1. Дурацкий вопрос - а порты вообще с FIFO ? И оно...   May 22 2017, 15:55
- - Raven   Если Wind'а иногда не успевает выгребать данны...   May 22 2017, 16:10
- - DS   В 7 похоже, есть баг в COM драйвере. Многие програ...   May 22 2017, 19:49
- - ViKo   Я пересылал в комп пакеты данных на скорости 11520...   May 23 2017, 05:09
|- - V_G   Цитата(ViKo @ May 23 2017, 15:09) Я перес...   May 23 2017, 05:39
|- - Ruslan1   Цитата(ViKo @ May 23 2017, 08:09) Я перес...   May 23 2017, 10:48
- - ViKo   Возможно, фантазирую, детально не вникал, полагаю,...   May 23 2017, 07:09
|- - @Ark   Вероятная причина, все-таки, несовпадение тактовых...   May 23 2017, 11:04
|- - krux   Цитата(@Ark @ May 23 2017, 14:04) Вероятн...   May 23 2017, 12:51
|- - @Ark   Цитата(krux @ May 23 2017, 15:51) считаю,...   May 23 2017, 13:15
- - V_G   Кстати, о больших трафиках. Так ли они необходимы?...   May 23 2017, 09:30
- - ViKo   Я не сутками пересылал, а кадрами. По ним - обрабо...   May 23 2017, 10:52
- - ViKo   Посмотрел, сколько стопов использую, оказалось, 1....   May 23 2017, 11:31
|- - Ruslan1   Цитата(ViKo @ May 23 2017, 13:31) Посмотр...   May 23 2017, 12:51
- - XVR   Вызов Synchronize(RxDataProcessing); из нити чтени...   May 23 2017, 14:06
- - XVR   Через Synchronize можно, но в нем должно выполнять...   May 23 2017, 17:58
- - AlexandrY   Цитата(Ruslan1 @ May 22 2017, 09:27) Здра...   May 24 2017, 07:35
|- - Ruslan1   Цитата(AlexandrY @ May 24 2017, 09:35) На...   May 24 2017, 12:53
|- - AlexRayne   Цитата(Ruslan1 @ May 24 2017, 16:53) Спаи...   May 24 2017, 12:55
- - AlexRayne   Напишите хоть в чем выявился источник потерь   May 24 2017, 12:52
|- - Ruslan1   Цитата(AlexRayne @ May 24 2017, 14:52) На...   May 24 2017, 12:55
|- - Timmy   В коде меня удивляет использование overlapped Wait...   May 25 2017, 10:49
- - XVR   WaitForSingleObject вызывать можно. Если WaitCommE...   May 25 2017, 11:14
|- - V_G   Цитата(XVR @ May 25 2017, 21:14) WaitForS...   May 25 2017, 22:37
- - rudy_b   Тут есть стандартная проблема - после приема прише...   May 26 2017, 10:19
|- - jcxz   Цитата(rudy_b @ May 26 2017, 12:19) Вероя...   May 26 2017, 10:33
||- - XVR   Цитата(jcxz @ May 26 2017, 13:33) Принима...   May 26 2017, 11:33
|- - V_G   Цитата(rudy_b @ May 26 2017, 20:19) Тут е...   May 26 2017, 11:59
- - Ruslan1   Поздравляю всех с началом новой рабочей недели...   May 29 2017, 10:57
|- - @Ark   Цитата(Ruslan1 @ May 29 2017, 15:24) Ребя...   May 29 2017, 12:39
||- - Ruslan1   Цитата(@Ark @ May 29 2017, 14:39) Вы ниче...   May 29 2017, 12:53
||- - @Ark   Цитата(Ruslan1 @ May 29 2017, 15:53) Там ...   May 29 2017, 13:02
||- - AlexRayne   Цитата(Ruslan1 @ May 29 2017, 16:53) поте...   May 29 2017, 14:32
||- - Ruslan1   Цитата(AlexRayne @ May 29 2017, 16:32) Вы...   May 29 2017, 16:20
||- - @Ark   Цитата(Ruslan1 @ May 29 2017, 19:20) Мы ...   May 29 2017, 17:15
|||- - Ruslan1   Цитата(@Ark @ May 29 2017, 19:15) Мы дожд...   May 29 2017, 19:00
|||- - @Ark   Цитата(Ruslan1 @ May 29 2017, 22:00) тип ...   May 29 2017, 20:06
|||- - Ruslan1   Цитата(@Ark @ May 29 2017, 22:06) Я так п...   May 29 2017, 20:34
||- - AlexRayne   Цитата(Ruslan1 @ May 29 2017, 20:20) Это ...   May 29 2017, 17:59
|- - XVR   Цитата(Ruslan1 @ May 29 2017, 15:24) Наде...   May 30 2017, 10:15
|- - @Ark   Цитата(XVR @ May 30 2017, 13:15) О! У...   May 30 2017, 10:23
|- - krux   Цитата(@Ark @ May 30 2017, 13:23) ТС гово...   May 30 2017, 17:28
|- - Ruslan1   Цитата(krux @ May 30 2017, 19:28) Давайте...   May 30 2017, 20:18
|- - @Ark   Цитата(Ruslan1 @ May 30 2017, 23:18) Upd:...   May 30 2017, 21:05
|- - XVR   Цитата(Ruslan1 @ May 30 2017, 23:18) Проб...   May 31 2017, 07:06
|- - Ruslan1   Цитата(XVR @ May 31 2017, 09:06) Вы в это...   May 31 2017, 07:28
|- - XVR   Цитата(Ruslan1 @ May 31 2017, 10:28) Слыш...   May 31 2017, 11:38
- - ViKo   Может, на большей скорости попробовать?   May 29 2017, 19:16
- - rx3apf   Я бы в такой ситуации попробовал такой вариант (ну...   May 31 2017, 08:43
- - rx3apf   Ну при чем тут скорость и уровни ? Скорость не сов...   Jun 1 2017, 10:00
|- - XVR   Цитата(rx3apf @ Jun 1 2017, 13:00) Ну при...   Jun 1 2017, 11:25
- - rx3apf   Ошибка кадра должна все ж обрабатываться и как-то ...   Jun 1 2017, 12:28


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

 


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


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