![]() 179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
Как организовать непрерывный опрос Com-порта?30.09.2016, 12:47. Показов 6188. Ответов 39
Метки нет Все метки)
(
Всем здравствуйте.
Приведенный ниже код работает так: кликнули по кнопке - отправили в порт набор байт, кликнули по другой - получили ответ. Нужно чтобы каждую секунду запрос в порт посылался, и ответ возвращался с отображением на форме. Пример взят из книги Архангельского (Delphi). На всякий случай прикрепляю проект.
0
|
30.09.2016, 12:47 | |
Ответы с готовыми решениями:
39
ATtiny13, непрерывный опрос АЦП, прерывание Как организовать непрерывный обмен между сокетами без переподключения? Как настроить опрос COM-порта по прерыванию int 14h? |
![]() ![]() |
|
30.09.2016, 13:07 | |
Запускается отдельный поток.
В потоке отправляется запрос, читается ответ, по кругу. В .Net есть свой класс для работы с последовательным портом.
1
|
![]() 179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
30.09.2016, 16:49 [ТС] | ||||||
Rius, нашёл пример с классом и потоками:
Код передрал со статьи один к одному. Что не так?
0
|
![]() ![]() |
|
30.09.2016, 16:51 | |
Не так то, что глобальная и локальная переменные, даже если у них одно имя, это разные переменные.
1
|
![]() 179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|||||||||||
30.09.2016, 17:07 [ТС] | |||||||||||
Rius, понял сработало
А приведенный пример - это асинхронная работа с портом или нет? Добавлено через 3 минуты наверное API вообще не стоит трогать раз такая халява есть. или здесь ещё что-то всплывёт непонятное? а если у меня возвращаемый массив сотни байт и за 1 раз весь не вернётся, кто это обрабатывает класс или я?
0
|
![]() ![]() |
|
30.09.2016, 17:19 | |
![]() Решение
Я бы сказал, что это на основе событий (DataReceived). Может быть оно и асинхронное в основе своей.
Не такая уж и халява. Класс не всегда удобен. Если сотни байт, событие может вылететь... как повезёт. И вообще через событие получается криво, IMHO. Посмотрите другие варианты https://www.cyberforum.ru/blog... g4357.html.
1
|
![]() ![]() |
|
30.09.2016, 17:32 | |
Нет, я не VB не пишу. Но можете воспользоваться converter.telerik.com или рефлексией готовой сборки в ILSpy.
1
|
![]() 179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 18:24 [ТС] | |
Rius, у меня VS2010, пересобрал ваш проект SerialStreamTest (архив прилагается)
формы нет. Перед тем как конвертировать хотелось бы попробовать. Хотелось бы видеть нечто похожее на пример в посте#1. Как всё это запустить?
0
|
![]() ![]() |
|
30.09.2016, 18:53 | |
Вот.
Этот метод я на практике пока ещё не применяю. Проверен был только раз на одном приборе.
1
|
![]() 179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 19:12 [ТС] | |
Rius, а какой применяете? я собрал проект на основе контрола SerialPort, похоже это тот же класс SerialPort. Я там тоже использовал DataReceived. У меня за 8-10 часов непрерывной работы (опрос текущих данных) на несколько минут вместо данных возвращаются нули, затем всё само собой восстанавливается. Прибор (счётчик газа) в это время фиксирует нештатную ситуацию. а это штраф. Я не знаю почему это происходит, но это никуда не годится. Поэтому и взялся за API.
Не могли бы Вы выложить проект WindowsForm стабильно работающий: Отправляем в порт массив байт - получаем массив байт.
0
|
![]() ![]() |
|
30.09.2016, 19:17 | |
Пока что применяю первый из блога в посте 6. Отправка как обычно через запись в порт, чтение как там.
Проекта нет - дома нет прибора с RS-232 для проверки.
1
|
![]() ![]() |
|
30.09.2016, 19:52 | |
jkrnd,
1
|
![]() 179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
30.09.2016, 21:11 [ТС] | |
Sklifosofsky, на всякий случай выложу проект. он реально работает, но как я уже говорил, что то в моей программе влияет на работу прибора и он периодически возвращает вместо реальных данных нули. А газ то расходуется. Это считается нештатной ситуацией, фиксируется внутри прибора и инфа передаётся в Межрегионгаз.
0
|
![]() ![]() |
|
01.10.2016, 11:04 | |
У вас по одному таймеру посылается запрос, по другому читается ответ. Эти события вполне могут рассинхронизироваться.
Если modbus в приборе работает совместно с аппаратным управлением потоком, то рассинхронизация чтения и записи может как-то повлиять. Запись и чтение должны происходить в одной функции последовательно.
1
|
![]() 179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
01.10.2016, 13:08 [ТС] | |
Rius, то есть работа моей программы повлияла на правильность работы прибора. Я немного в этом сомневался, но факты упрямая вещь, да и Вы подтвердили. В документации к прибору есть целый раздел про modbus.
Вопрос: контрол SerialPort здесь не причём? Или это и его глюки.
0
|
01.10.2016, 13:08 | ||||||
Помогаю со студенческими работами здесь
20
Как организовать опрос матричной клавиатуры + DS18B20? Опрос COM-порта Опрос LPT порта Опрос состояния порта принтера Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. )
В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
|
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
|
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
|
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
|
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
|
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
|
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
|
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
|
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
|
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|