|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
Асинхронное чтение данных из COM порта18.10.2016, 11:21. Показов 9582. Ответов 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, 15:20 | |||||||
0
|
|||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 20.10.2016, 15:46 [ТС] | |
|
Avazart, nick42, как я понимаю, у вас получилось использовать компонент без установки. Покажите как...
0
|
|
|
|
||
| 20.10.2016, 15:47 | ||
|
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 20.10.2016, 15:50 [ТС] | |
|
А где взять файл BCPort.hpp? Или это переименованный файл BCPort.pas?
0
|
|
|
|
|
| 20.10.2016, 15:55 | |
|
d7d1cd, Среда с генирирует при первой компиляции, главное BCPort.pas добавить в проект.
nick42, В общем попробовал на моем "ИК-пульте на ардуине" и бегло просмотрел код - работает и код нормальный. Синхронизация не нужна ибо читается непосредственно в указанный буфер из текущего потока. События организованы через фиктивное окно и сист. очередь. Но мне все же по душе работать не через "события" а через "таймауты", и самому выносить в поток, так в большинстве случаем более оптимально ибо можно в том же вторичном потоке сделать обработку принятых данных (не нагружая ей GUI)
0
|
|
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
||
| 20.10.2016, 16:00 | ||
|
Вообще, общий принцип такой: добавляете к проекту pas-файл; если он не проблемный, то после его компиляции создаются файлы .hpp и .obj (можно переименовать в .lib). Вот этот .hpp нужно включить в свой C++ проект, и тогда все функции компонента станут доступны. Правда, самого визуального компонента вы не увидите на палитре, и доступ к свойствам будет без привычного комфорта. Но, как говорится, на безрыбьи и это бонус! Добавлено через 4 минуты Avazart, спасибо за помощь. Насчет макроса я бы не догадался; смотрел совсем в другую сторону... .
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 20.10.2016, 16:00 [ТС] | ||
|
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 20.10.2016, 16:05 [ТС] | |
|
0
|
|
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 20.10.2016, 16:38 [ТС] | ||
![]() Добавлено через 7 минут Если не трудно и не жалко, то выложите сюда, пожалуйста, файл BCPort.hpp.
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|||||||
| 21.10.2016, 08:20 [ТС] | |||||||
unit BCPort; и сообщает об ощибке [DCC Fatal Error] BCPort.pas(14): F1027 Unit not found: 'System' or binary equivalents (.dcu).В архиве, который предоставил nick42, есть файл BCPort.hpp. Я добавил его в проект, добавил Ваш (Avazart) макрос и попробовал создать объект типа TBComPort. Естественно, при линковке я получил ошибку Unresolved external...? ведь в том BCPort.hpp есть только описание функций, но нет реализации. Компиляция файла BCPort.pas создаст какой-то другой hpp файл?
0
|
|||||||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
||
| 21.10.2016, 09:45 | ||
|
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 21.10.2016, 10:03 [ТС] | ||
|
0
|
||
|
|
|||||
| 21.10.2016, 11:43 | |||||
|
0
|
|||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|||
| 21.10.2016, 11:52 [ТС] | |||
|
0
|
|||
|
|
||
| 21.10.2016, 12:08 | ||
|
Что доставить Delphi такая проблема? На ошибку я указал что возможно нужно поправить users.
0
|
||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 21.10.2016, 13:21 | |
|
d7d1cd, в архиве "пакет" с этим компонентом для ХЕ8. Там еще я добавил небольшой тестовый проект для проверки приема-передачи по ком-порту; его я тоже перетащил с BCB5 на ХЕ8. Если установить пару виртуальных портов, то можно передавать с одного, а принимать на другой порт.
Компонент можно установить так: Components - Add component и указать на файл Package2.bpl (Package2.lib тоже разместить в штатной папке, ну или добавить к своему проекту в крайнем случае). После установки во вкладке Samples должен появиться значок компонента BComPort. Спрашивайте, если что непонятно.
2
|
|
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 21.10.2016, 13:36 | |
|
P.S. Этот ХЕ8 устанавливался целых 4 часа!!.... Благо, у меня на работе есть ресурс для подобных экспериментов.
Я устанавливал весь пакет "по умолчанию", то-есть и Delphi, и С++, со всеми плюшками. Ваших ошибок у меня не возникло, а появились те, о которых я писал ранее (т.е. uses Forms и Application.Excep...). Может быть компонент в этой студии и работает в урезанном варианте, но уже то, что с его помощью удалось скомпилировать примитив по работе блоками с ком-портами, свидетельствует о его работоспособности.
1
|
|
| 21.10.2016, 13:36 | |
|
Чтение данных с COM-порта Чтение данных с COM порта Чтение данных с COM порта Чтение данных из COM порта Чтение данных с COM-порта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|