|
Windows7: прием байтов через COM-порт без потерь, Кто-то имеет личный опыт? чем побороть потерю отдельных байтов? |
|
|
|
May 22 2017, 06:27
|
Гуру
     
Группа: Свой
Сообщений: 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. куда копать? Сильно надеюсь что моя программа виновата. На другом железе пробовал- эффект тот же, то есть это не электроника глючит. С приоритетами игрался, никакого эффекта. Заранее спасибо за любые советы (по существу).
|
|
|
|
|
 |
Ответов
|
May 29 2017, 10:57
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Поздравляю всех с началом новой рабочей недели! (хотя кто-то уже, наверное, и пиво пьет в тенечке...)
В-общем, проблема вроде бы не в методах межпоточного взаимодействия. На данный момент ситуация такова: Сниффер (Free device monitoring Studio от HHD) показывает те же самые проблемы как и моя программа - то есть он уже не видит те же байты, которые я не вижу. Подключенный ко входу логический анализатор показывает что все байты корректно долетают до разъема DB9 на компьютере. Сейчас тестирую на моем Dell D620- у него ком порт есть прямо внутри. И, кстати, ошибки ловит чаще чем 1037U, на котором штатно должно крутиться.
Подключил переходник Serial-USB (FTDI) и пустил через него. Разница есть. Пока что один раз что-то словил, но это может быть и реальный шум. Прямой ком-порт уже бы раз 10 поймал за это время.
Пойду еще раз покурю что у меня там за уровни в COM-порт подаются, может все-таки там какие-то просадки кратковременные. Ведь ежели сниффер тоже не ловит, а на входе сигнал есть, и переход на USB помогает- то какие выводы из этого следуют?
потери выглядят вот так. Сместил байты принятые сниффером, где пусто- это сниффер ничего не принимал. (смещение в корректном пакете, время анализатора, корректный байт из логического анализатора, байт из сниффера) это один пакет, 2 байта плюс 1 байт не приняты.
98 44.301759 0x3F 3f 99 44.301846 0x4D 4d 100 44.301933 0x0B 0b 101 44.30202 0xC1 c1 102 44.302107 0x40 40 103 44.302194 0x86 104 44.302281 0x36 105 44.302367 0xC1 c1 106 44.302454 0x40 40 107 44.302541 0x9B 9b ... 120 44.303671 0x52 52 121 44.303757 0xC1 c1 122 44.303844 0x3B 123 44.303931 0x28 28 124 44.304018 0xAC ac
|
|
|
|
Сообщений в этой теме
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 XVR Ваш снифер умеет показывать ошибки от COM порта? Е... May 29 2017, 11:07 V_G Цитата(XVR @ May 29 2017, 21:07) Ну и уро... May 29 2017, 11:31  XVR Цитата(V_G @ May 29 2017, 14:31) Стандарт... May 29 2017, 11:58   Ruslan1 Цитата(XVR @ May 29 2017, 13:58) Ключевое... May 29 2017, 12:24    @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    jcxz Цитата(Ruslan1 @ May 29 2017, 14:24) Если... May 30 2017, 08:50    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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|