|
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
|
||||||
Не работает Com порт в асинхронном режиме12.10.2016, 11:07. Показов 2898. Ответов 20
Метки нет (Все метки)
Крайне необходимо небольшое приложение для Com порта работающее в асинхронном режиме. Принял некоторое переменное количество байт и сразу передал некоторое конечное количество байт.
Для реализации решил воспользоваться предложенным вариантом http://piclist.ru/S-COM-THREAD... D-RUS.html Составил небольшой проект в C++ Builder 6 на WinAPI
Подскажите пожалуйста что в коде не так. Может кто сталкивался буду признателен за код рабочих функций приема и передачи по Com в асинхронном режиме.
0
|
||||||
| 12.10.2016, 11:07 | |
|
Ответы с готовыми решениями:
20
COM-порт в асинхронном режиме Работа с COM-портом в асинхронном режиме Не работает 32к кварц в асинхронном режиме таймера |
|
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
|
||||||
| 14.10.2016, 17:28 [ТС] | ||||||
|
Прием заработал. Подскажите пожалуйста как правильно сделать передачу в нужное время.
Поскольку принимаются данные побайтно
А передать данные обратно нужно только после приема непрерывного пакета данных. Данных в пакете каждый раз может быть разное количество. Подскажите пожалуйста как обнаружить окончание приема пакета?
0
|
||||||
|
|
||
| 15.10.2016, 16:32 | ||
|
Не по теме: На заметку, если интересно мой велосипед, только у меня чтение/запись по таймаутам:
0
|
||
|
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
|
|
| 16.10.2016, 20:07 [ТС] | |
|
При чем тут устройство? Каждую секунду на порт приходит различное количество байт (непрерывный пакет). В асинхронном режиме порт принимает данные побайтно (хотя аппаратно почему-то по 8 байт). Да, если в пакете имеются синхросимволы или фреймы с синхросимволами то можно просто ловить их и определять примерно время заполнение буфера данными. Но вопрос в том, как программно не имея в принимаемом пакете синхросимволов или фреймов с синхросимволами определить окончание приема непрерывного пакета данных (непрерывной последовательности байт)?
0
|
|
|
|
|||
| 16.10.2016, 20:25 | |||
|
Обмен данными и логика работы может сильно отличатся. Все это зависит от протокола обмена. P.S.: И вообще логика страдала сильно... если поток непрерывный, то о каком окончании может быть речь?
0
|
|||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||||||
| 16.10.2016, 20:25 | ||||||
|
VlGuvin, буквально сегодня реализовал у себя то, что надо тебе. Вот код приема:
0
|
||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 16.10.2016, 20:34 | |
|
OVERLAPPED это когда COM порт работает в асинхронном режиме? Уточните, в чем кривизна моего решения?
0
|
|
|
|
|||
| 16.10.2016, 20:39 | |||
|
Т.е использование объекта синхронизация "событие" ф-ций ожидания WaitForXXX() для ожидания данных. Используя OVERLAPPED можно достигнуть чтения с отработкой по таймаутам.
0
|
|||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 16.10.2016, 20:47 | |
|
Avazart, тогда покажите пример на конкретную задачу, ради которой я написал кривой, по Вашему, код. Задача такая. Устройству через COM порт отправляется запрос. Длина ответа от устройства, согласно протоколу обмена, может быть от 5 до 255 байт. То есть, заранее определить сколько устройство пришлет байт в ответ, невозможно. Причем связь может быть прервана и устройство вообще ничего не пришлет. Ждем Вашего решения.
0
|
|
|
|
|||
| 16.10.2016, 20:59 | |||
|
Вообще я думаю он ни на что не годится. Ибо по нормальному должно использоваться что-то из:
0
|
|||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 16.10.2016, 21:01 | ||
|
Я привел решение по поставленному вопросу. Пусть оно кривое, на Ваш взгляд, но оно справляется с поставленной задачей. От Вас будет решение, кроме увольнения разработчика?
0
|
||
|
|
|||
| 16.10.2016, 21:03 | |||
|
Но полагаю проблема более очевидная- вы не читали описание протокола. И его быдлокодность абсолютно не имеет никакого отношения к обсуждаемому вопросу.
0
|
|||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 16.10.2016, 21:16 | ||
|
0
|
||
|
|
||
| 16.10.2016, 21:46 | ||
|
Мучались и копали? Но в данному случае кривизна лопаты видимо совпала с руками растущими ....
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|||
| 16.10.2016, 22:05 | |||
|
0
|
|||
|
|
||||
| 16.10.2016, 22:13 | ||||
0
|
||||
|
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
|
||
| 16.10.2016, 22:31 [ТС] | ||
0
|
||
|
|
|||||
| 16.10.2016, 22:42 | |||||
|
Добавлено через 1 минуту
0
|
|||||
|
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
|
|
| 17.10.2016, 16:55 [ТС] | |
|
Нет. Прием затем ответ. Интерфейс rs485 предполагает обязательный адаптер или преобразователь в rs232. Полудуплекс это значит прием и передача обязательно разделены во времени. Полный дуплекс когда передачу ответа можно вести одновременно с приемом. Это rs232 или rs422.
Вобщем один раз в секунду сначала прием 800...4800 (скорость 115200) байт затем сразу после получения всех содержащихся в одном непрерывном пакете байт - ответ 128 байт.
0
|
|
| 17.10.2016, 16:55 | |
|
Помогаю со студенческими работами здесь
20
ADO в асинхронном режиме. Проблема работы COM- в асинхронном режиме Таймер Т2 в асинхронном режиме, Атмега8 Записать данные в файл в асинхронном режиме Выполнение запроса к БД MSSQL в асинхронном режиме Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|