|
0 / 0 / 0
Регистрация: 21.09.2021
Сообщений: 23
|
||||||
Работа с COM-портом22.09.2021, 08:37. Показов 3594. Ответов 63
Метки нет (Все метки)
Добрый день. Имеется такая задача: получать данные с com порта и строить графики от полученных данных. Это удалось реализовать, но происходит запаздывание, т.к. таймер не даёт делать опрос чаще, чем нужно. Как увеличить быстродействие опроса?
Как сейчас у меня это реализовано:
0
|
||||||
| 22.09.2021, 08:37 | |
|
Ответы с готовыми решениями:
63
Работа с COM-портом
|
|
0 / 0 / 0
Регистрация: 21.09.2021
Сообщений: 23
|
||
| 27.09.2021, 11:28 [ТС] | ||
|
0
|
||
|
Модератор
4156 / 2365 / 814
Регистрация: 15.11.2015
Сообщений: 9,502
|
|
| 27.09.2021, 11:30 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 21.09.2021
Сообщений: 23
|
|
| 27.09.2021, 11:32 [ТС] | |
|
0
|
|
|
Модератор
4156 / 2365 / 814
Регистрация: 15.11.2015
Сообщений: 9,502
|
||
| 27.09.2021, 11:34 | ||
|
Получается, надо в потоке взять память под буфер для 10-100 значений, когда буфер заполнится, то можно отправить основному окну сообщение с адресом этого буфера (PostMessage), и тут же браться за приём нового буфера данных. А основной поток программы получит сообщение, построит график сразу на весь буфер и освободит память буфера.
Добавлено через 1 минуту
0
|
||
|
0 / 0 / 0
Регистрация: 21.09.2021
Сообщений: 23
|
||
| 27.09.2021, 11:54 [ТС] | ||
|
А вообще частоты 1 кГц для опроса должно хватать под цели. Добавлено через 17 минут Проблема была с синхронизацией. Поборол, теперь пока дальше сам разберусь.
0
|
||
|
0 / 0 / 0
Регистрация: 21.09.2021
Сообщений: 23
|
|||||||||||||||||||||
| 28.09.2021, 07:35 [ТС] | |||||||||||||||||||||
|
Сейчас не могу побороть другую проблему. Почему то именно в треде не работает как должно. У меня приходит строка вида:
0
|
|||||||||||||||||||||
|
Нарушитель
10908 / 5836 / 1289
Регистрация: 12.03.2015
Сообщений: 26,934
|
||
| 28.09.2021, 08:21 | ||
|
Похоже, у тебя неизлечимый случай. Кликните здесь для просмотра всего текста
0
|
||
|
0 / 0 / 0
Регистрация: 21.09.2021
Сообщений: 23
|
|
| 28.09.2021, 08:57 [ТС] | |
|
0
|
|
|
Нарушитель
10908 / 5836 / 1289
Регистрация: 12.03.2015
Сообщений: 26,934
|
|
| 28.09.2021, 09:02 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 21.09.2021
Сообщений: 23
|
||||||
| 28.09.2021, 09:14 [ТС] | ||||||
|
Так это же переменная, переменная 'a' - это данные с компорта. Ладно, допустим, очистка переменной, я ещё могу понять, что обнуляю её в потоке - это плохо, но как я обращаюсь к визуализации? И как тогда реализовать?
0
|
||||||
|
Нарушитель
10908 / 5836 / 1289
Регистрация: 12.03.2015
Сообщений: 26,934
|
||
| 28.09.2021, 09:24 | ||
|
Тред должен быть ПОЛНОСТЬЮ ОТВЯЗАН от ВСЕГО ОСТАЛЬНОГО, что происходит в программе, он ВАЩЕ не должен знать, что вокруг него что-то есть, и только выполнять СВОЮ задачу - приём данных и пихание этих данных в очередь (синхронно или внутри критической секции). Выниманием данных из этой очереди и их анализом должен заниматься ДРУГОЙ тред, например ГЛАВНЫЙ, но это необязательно. Убери с формы компонент TComportDriver и создавай его динамически как дочернее поле треда. Обработчик события этого компонента OnReceiveData должен быть методом ТРЕДА, а не формы. Вот с этого надо начинать.
0
|
||
|
Модератор
4156 / 2365 / 814
Регистрация: 15.11.2015
Сообщений: 9,502
|
||
| 28.09.2021, 09:33 | ||
|
Нужно при заполнении массива давать знак потоку, который обработает данные. А до тех пор поток не должен читать неполные данные.
0
|
||
|
0 / 0 / 0
Регистрация: 21.09.2021
Сообщений: 23
|
|
| 04.11.2021, 09:33 [ТС] | |
|
Всем спасибо, решил проблему с задержкой, осталась ещё одна беда. Когда я выдёргиваю USB, программа не даёт больше не подключиться и не отключиться от COM порта, подскажите, как решить это можно?
0
|
|
|
Нарушитель
10908 / 5836 / 1289
Регистрация: 12.03.2015
Сообщений: 26,934
|
||
| 04.11.2021, 15:42 | ||
![]() ---- А если суръёзно, то надо проводить финализацию (аварийное отключение и закрытие всех открытых хэндлов) внутри обработчика сообщения WM_DEVICECHANGE. Вот с этого начни:
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
| 04.11.2021, 17:26 | |
|
Возможно, я что-то упустил, но разве данные с ком-порта не по событию приходят? Зачем таймер?
0
|
|
|
Нарушитель
10908 / 5836 / 1289
Регистрация: 12.03.2015
Сообщений: 26,934
|
|
| 04.11.2021, 17:42 | |
|
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 05.11.2021, 00:45 | ||
|
Данные накапливать, а выводить уже с необходимой частотой.
0
|
||
|
Нарушитель
10908 / 5836 / 1289
Регистрация: 12.03.2015
Сообщений: 26,934
|
||
| 05.11.2021, 00:56 | ||
0
|
||
|
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,616
|
||
| 05.11.2021, 00:58 | ||
![]() И вот что особенно важно. Вот такие проблемы с выдергиванием преобразователя из USB случаются с теми, кто читает порт в доппотоке! У тех кто работает с СОМ-портом в главном потоке используя асинхронный метод работы таких проблем нет. Я как-то лет надцать назад наглядно продемонстрировал своим коллегам. Программа нашего программиста работающая с СОМ-портом в синхронном режиме вешалась наглухо при выдергивании кабеля из USB-порта. Моя тестовая программа при таком действии выдавала сообщение типа "Воткни разъём в зад зараза!" ![]() А после втыкания продолжала нормально работать.
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 05.11.2021, 01:54 | ||
|
Опрашивать устройство по таймеру считалось неэффективным способом (на моей памяти) еще в период DOS с его прерываниями (а скорее всего - и раньше). Для этого в портах и существуют различные Strob'ы и пр.
0
|
||
| 05.11.2021, 01:54 | |
|
Работа с ком портом Работа с виртуальным com-портом Delphi 10.1 Berlin работа с COM портом
Работа с COM Портом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|