|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
Асинхронное чтение данных из COM порта18.10.2016, 11:21. Показов 9020. Ответов 60
Метки нет (Все метки)
Приветствую всех. Совсем недавно получил я нелестные высказывания по поводу моего способа чтения информации из COM порта. Решил исправляться, но знаний маловато. Поэтому прошу помощи.
Итак, посоветовали мне использовать асинхронное чтение (ну и запись, соответственно). Подскажите, как это выполнить по возможности пока без использования потоков при следующих условиях. Send - буфер данных, которые надо отправить в COM порт (запрос), Get - буфер, куда надо принять данные из COM порта (ответ). Отправить надо 4 байта. По протоколу обмена в ответ может быть получено 10 байт (если запрос корректен и правильно дошел до получателя), 5 байт (запрос содержит ошибку или неправильно дошел до получателя). Кроме этого связь может быть нарушена и в ответ не будет получено ни одного байта. Ждать ответ надо максимум 3 секунды после отправки запроса, но если ответ есть (10 или 5 байт), то он должен быть принят максимально быстро (без ожидания 3-х секунд).
0
|
|
| 18.10.2016, 11:21 | |
|
Ответы с готовыми решениями:
60
Асинхронное чтение из COM-порта Асинхронное чтение последовательного порта. MVVM Чтение данных с COM-порта |
|
|
||
| 20.10.2016, 12:39 | ||
|
Я вроде уже кидал ссылку на свой велосипед
https://github.com/Avazart/Bic... Serial.cpp https://www.cyberforum.ru/blog... g4416.html Если без велосипедов, проще как мне кажется использовать Qt там есть и QSerialPort и QSerialPortInfo, что главное реальная асинхронность (не overlapped/ таймауты а именно событийно). (Кстати в C# и Python тоже есть "родные" классы.)
0
|
||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
||
| 20.10.2016, 13:05 | ||
|
Добавлено через 16 минут .. пока удаляется ХЕ4 попробую описать, за какие моменты мне симпатичен BCPort. Дело в том, что я перепробовал в свое время несколько ком-портовых компонент. Во всех других были недочеты: то вдруг в программе сваливает на системную ошибку, то неудобен в обращении, то слишком много настроек, а с теми, что по умолчанию, работает криво. С этим же компонентом - все в меру. Немного настроек, надежная работа, прост в установке. В основном работа с портом сводится с обработке событий: допустим, пришло несколько байтов - наступает событие OnRxChar и там в параметрах счетчик принятых в буфер байтов. Возникла ошибка (скажем, при подключении) - OnError; и, кстати, ошибки расшифровываются. Если все данные ушли и передающий буфер опустошился - OnTxEmpty и т.д. Единственно, правда, помню была нечеткость с OnRx80Full ("приемный буфер заполнен на 80%"), но и с этим разобрался.
0
|
||
|
|
||
| 20.10.2016, 13:23 | ||
|
Кстати там тоже используется overlapped, плюс все в потоке, правда не понятно как осущ. синхронизация (как бы не оказалось что ее нет там)
0
|
||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
||
| 20.10.2016, 13:28 | ||
|
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 20.10.2016, 13:35 [ТС] | |
|
Avazart, я правильно понимаю, что использование OVERLAPPED не обязательно подразумевает применение отдельных потоков? Отправляем запрос, ждем сигнала, что все отправлено. Далее ждем сигнала, что приняты байты и выполняем их чтение. Верно?
0
|
|
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 20.10.2016, 13:50 | |
|
.. согласен. Это бы ускорило развязку (так как неясно еще, - удастся ли приручить тот pas к юникодной платформе...).
0
|
|
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 20.10.2016, 13:54 [ТС] | |
|
0
|
|
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
||
| 20.10.2016, 14:01 | ||
|
0
|
||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
||
| 20.10.2016, 14:25 | ||
|
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 20.10.2016, 14:36 [ТС] | ||
|
0
|
||
|
|
|||||||
| 20.10.2016, 14:37 | |||||||
|
Конфликтует с макросом.
Необходимо добавить перед включением
1
|
|||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 20.10.2016, 14:43 [ТС] | |
|
Avazart, что значит "выносите в него всю логику"? И о синхронизации чего стоит побеспокоиться?
0
|
|
|
|
||||||||||||
| 20.10.2016, 14:46 | ||||||||||||
|
О синхронизации данных, т.е потоко-безопасности. nick42, А как чтение производить? Допустим я прописал: header
0
|
||||||||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 20.10.2016, 14:48 [ТС] | |
|
У меня вся работа с COM портом будет в одном месте (в одном потоке). Кроме этого, этот поток всегда будет работать один. Еще одного потока для работы с этим же COM портом не будет.
0
|
|
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|||||||
| 20.10.2016, 15:05 | |||||||
Добавлено через 1 минуту Здесь bufer - это свой char-массив, не буфер порта.
0
|
|||||||
|
|
|||||||
| 20.10.2016, 15:06 | |||||||
Вопрос только как правильно использовать есть ли там синхронизация для такого способа чтения, и можно но ли читать до разделителя (например до перевода строки)
0
|
|||||||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
||
| 20.10.2016, 15:15 | ||
|
0
|
||
| 20.10.2016, 15:15 | |
|
Помогаю со студенческими работами здесь
40
Чтение данных с COM-порта Чтение данных с COM порта Чтение данных с COM порта Чтение данных из COM порта Чтение данных с COM-порта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|