![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 30.07.2022
Сообщений: 12
|
![]()
Всем доброго дня!
У меня проблема приема данных по СОМ порту. Данные выдаются пакетом из устройства в порт ПК каждые 100 мс размером 2500 байт. Но происходит потеря данных, вернее последовательность данных при чтении буфера порта нарушается, скажем так, последний принятый байт в пакете был с номером 2000, а при следующем чтении порта начинается не 2001, а ,например, 2020. Настройка порта следующая: 8 бит; Контроль четности - нет; Число стоп бит - 1; Скорость обмена -460480; Таймауты по умолчанию, кроме MAXWORD все нули. Размер буфера порта 4096, увеличивал до 15000. В программе использовал библиотеку VaCOM, пробовал делать свой поток с функциями ReadFile, тут результат еще хуже, чтение производится, то 14000 байт, то 45 байт, что приводит к потере. Чтение происходит по событию RXchar. Хотелось бы узнать, реально читать данные при такой скорости и настройке без потерь или в Windows это дело гиблое? И есть ли еще инструменты читать данные без потерь? |
![]() |
![]() |
![]() |
#2 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,044
|
![]()
arktik, вычитывание то как производится ? Нужно вычитывать в отдельном потоке в бесконечном цикле. Складывать в свой программный буфер. Тогда всё реально
ну, и не забывать про межпоточную синхронизацию доступа к буферу |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 30.07.2022
Сообщений: 12
|
![]()
Выкладываю код в потоке.
Код:
Последний раз редактировалось arktik; 21.08.2022 в 11:29. |
![]() |
![]() |
![]() |
#4 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,044
|
![]()
arktik, не нужно никаких событий и overlapped. Просто в цикле пытаешься вычитывать, скажем, по 4096 байтов постоянно. ReadFile вернёт, сколько реально прочиталось. Всё прочитанное докидывай в свой программный буфер
а в другом потоке из буфера извлекаешь и анализируешь уже неспеша |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 30.07.2022
Сообщений: 12
|
![]()
Я правильно понял, убрать в потоке все кроме:
Код:
|
![]() |
![]() |
![]() |
#6 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,044
|
![]()
ClearCommError - это вряд ли нужно постоянно вызывать. Только при возврате ошибки из ReadFile
4096 - имеется в виду число, равное или меньшее заданному для ком-порта буферу чтения |
![]() |
![]() |
![]() |
#7 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,044
|
![]()
------
ещё, наверное, будет полезно до чтения узнавать, сколько байтов имеется на чтение, чтобы указывать количество, меньшее или равное реальному входящему количеству. Таким образом не будет задержек из-за таймаута ожидания байта ком-порта, когда новых данных ещё нет, а запрошено много (но как это узнаЁтся - я уже не помню) или просто выставить этот таймаут в 0 |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 30.07.2022
Сообщений: 12
|
![]()
Спасибо, большое за советы, обязательно ими воспользуюсь.
|
![]() |
![]() |
![]() |
#9 |
Новичок
Джуниор
Регистрация: 17.10.2022
Сообщений: 9
|
![]()
Всем доброго времени суток.
Я новичок в программировании))) Пишу оконное приложение, которое работает с MEGA32. Посылаю железке запросы, она мне присылает ответы. Проблема вот в чём - у меня стоит Windows 7 и я могу связаться с устройством, а разработчик устройства (у него Windows 10) не может. Подскажите пожалуйста в какую сторону копать. И ещё одна проблемка - это СОМ порт выше 9. Я нашёл как отображать сом10 и выше,но они не подключаются. код если нужно приложу!!! |
![]() |
![]() |
![]() |
#10 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,044
|
![]()
вывести в лог 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 |