|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
Асинхронное чтение данных из COM порта18.10.2016, 11:21. Показов 9403. Ответов 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 | |
|
Чтение данных с COM-порта Чтение данных с COM порта Чтение данных с COM порта Чтение данных из COM порта Чтение данных с COM-порта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|