|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
20.08.2022, 19:35 | #1 |
Пользователь
Регистрация: 30.07.2022
Сообщений: 12
|
И снова работа с COM портом
Всем доброго дня!
У меня проблема приема данных по СОМ порту. Данные выдаются пакетом из устройства в порт ПК каждые 100 мс размером 2500 байт. Но происходит потеря данных, вернее последовательность данных при чтении буфера порта нарушается, скажем так, последний принятый байт в пакете был с номером 2000, а при следующем чтении порта начинается не 2001, а ,например, 2020. Настройка порта следующая: 8 бит; Контроль четности - нет; Число стоп бит - 1; Скорость обмена -460480; Таймауты по умолчанию, кроме MAXWORD все нули. Размер буфера порта 4096, увеличивал до 15000. В программе использовал библиотеку VaCOM, пробовал делать свой поток с функциями ReadFile, тут результат еще хуже, чтение производится, то 14000 байт, то 45 байт, что приводит к потере. Чтение происходит по событию RXchar. Хотелось бы узнать, реально читать данные при такой скорости и настройке без потерь или в Windows это дело гиблое? И есть ли еще инструменты читать данные без потерь? |
21.08.2022, 09:18 | #2 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 951
|
arktik, вычитывание то как производится ? Нужно вычитывать в отдельном потоке в бесконечном цикле. Складывать в свой программный буфер. Тогда всё реально
ну, и не забывать про межпоточную синхронизацию доступа к буферу |
21.08.2022, 11:17 | #3 |
Пользователь
Регистрация: 30.07.2022
Сообщений: 12
|
Выкладываю код в потоке.
Код:
Последний раз редактировалось arktik; 21.08.2022 в 11:29. |
21.08.2022, 11:23 | #4 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 951
|
arktik, не нужно никаких событий и overlapped. Просто в цикле пытаешься вычитывать, скажем, по 4096 байтов постоянно. ReadFile вернёт, сколько реально прочиталось. Всё прочитанное докидывай в свой программный буфер
а в другом потоке из буфера извлекаешь и анализируешь уже неспеша |
21.08.2022, 11:38 | #5 |
Пользователь
Регистрация: 30.07.2022
Сообщений: 12
|
Я правильно понял, убрать в потоке все кроме:
Код:
|
21.08.2022, 12:11 | #6 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 951
|
ClearCommError - это вряд ли нужно постоянно вызывать. Только при возврате ошибки из ReadFile
4096 - имеется в виду число, равное или меньшее заданному для ком-порта буферу чтения |
21.08.2022, 12:15 | #7 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 951
|
------
ещё, наверное, будет полезно до чтения узнавать, сколько байтов имеется на чтение, чтобы указывать количество, меньшее или равное реальному входящему количеству. Таким образом не будет задержек из-за таймаута ожидания байта ком-порта, когда новых данных ещё нет, а запрошено много (но как это узнаЁтся - я уже не помню) или просто выставить этот таймаут в 0 |
21.08.2022, 12:23 | #8 |
Пользователь
Регистрация: 30.07.2022
Сообщений: 12
|
Спасибо, большое за советы, обязательно ими воспользуюсь.
|
18.10.2022, 00:13 | #9 |
Новичок
Джуниор
Регистрация: 17.10.2022
Сообщений: 9
|
работа с СОМ портом
Всем доброго времени суток.
Я новичок в программировании))) Пишу оконное приложение, которое работает с MEGA32. Посылаю железке запросы, она мне присылает ответы. Проблема вот в чём - у меня стоит Windows 7 и я могу связаться с устройством, а разработчик устройства (у него Windows 10) не может. Подскажите пожалуйста в какую сторону копать. И ещё одна проблемка - это СОМ порт выше 9. Я нашёл как отображать сом10 и выше,но они не подключаются. код если нужно приложу!!! |
18.10.2022, 00:21 | #10 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 951
|
вывести в лог GetLastError() и другие ошибки после вызовов АПИ функций
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с Com - портом | Dmitry_B | Visual C++ | 16 | 25.11.2016 18:14 |
Работа с PCI портом | Volodya199 | Общие вопросы C/C++ | 1 | 14.12.2010 20:17 |
Работа с СОМ портом | Ivanko | Общие вопросы Delphi | 2 | 16.02.2010 10:58 |
Работа с COM портом | hoba | Общие вопросы Delphi | 3 | 20.11.2008 03:39 |