|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
Асинхронное чтение данных из COM порта18.10.2016, 11:21. Показов 9287. Ответов 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-порта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|