9 / 1 / 0
Регистрация: 06.08.2018
Сообщений: 134
|
|
1 | |
Получение данные с последовательного порта. SerialDataReceivedEventHandler24.08.2020, 15:35. Показов 942. Ответов 3
Метки нет Все метки)
(
Уважаемые, Форумчане. Суть вопроса:
есть 2 формы. Из первой во второй я передаю serialport. Даже если я закрою соединение и открою его занового у меня не работает: SerialDataReceivedEventHandler. Что мне хотелось бы узнать: 1). Есть ли способ получить данные с COM-порта не отсылая команду на сам порт. То есть может ли устройство первое начать связь с моим ПК. 2). Как сделать так чтобы наконец эта хрень заработала SerialDataReceivedEventHandler. Мне нужно всего лишь чтобы эта ж...а реагировала на нажатие на кнопку на устройстве, мне не нужны ни данные ни что то еще, мне требуется только знать что да нажатие есть. Если можете дайте пример. Хрень что описана на пабликах по программированию типа использовать white, делегаты и invoke я уже пробовал реакции ноль. При нажатии на кнопку на устройстве ничего не происходит, то есть serialport.DataReceived += SerialDataReceivedEventHandler(DataReceived); не выполняется, хотя порт открыт, и при выполнении кода из формы то есть при нажатии на кнопку внутри программы все работает. И местами Open и DataReceived я менял, это также не дает результата. И еще раз уточню - мне не нужно читать данные, мне нужно просто знать что они пришли. Естественно мне требуется чтобы данное событие отслеживалось асинхронно, то есть не мешая работе основной формы, но при этом чтобы возвращало bool если пришли данные.
0
|
|
24.08.2020, 15:35 | |
Ответы с готовыми решениями:
3
20-40 выключателей в данные для последовательного порта
приемник последовательного порта Программирование последовательного порта |
24.08.2020, 23:05 | 2 |
Наконец-то вы решили про событие почитать и попробовать. Я считаю - более правильный путь.
Я не верю что ничего не приходит. Вы делали тест на простом коде? без всех этих ваших кнопок и циклов? Просто запуск формы, событие и ожидание. Если ваше внешнее устройство отправляет данные, то они будут приходить. Или вы что-то не то делаете. Но это ваше желание - знать только "bool" - это всё равно "3 шага назад". Прочитать данные чтобы узнать были ли данные... и снова отправить запрос. Добавлено через 5 минут Пример простого теста: SerialPort.DataReceived Event В интернете ещё обсуждают про правильную последовательность события и открытия. Но подтверждённых проблем вроде нет. Есть ещё установленные параметры порта и т.п. Вообщем есть что изучить или проверить.
0
|
9 / 1 / 0
Регистрация: 06.08.2018
Сообщений: 134
|
|
25.08.2020, 02:08 [ТС] | 3 |
Такое я уже делал и изучил вопрос. Данные попадают в обработчик только когда я сам в форме отправляю запрос на получение данных. При отправке с устройства без участия формы не происходит ничего. Есть вероятность что у меня трудности с асинхронным и методами и потоками. Возможно данный обработчик необходимо перевести в другой поток. В тоже время. Ваш код я дополнил он стал работать
Проблема там оказалось в банальном хотя да не спал я очень долго прежде чем смог найти ошибку. Это целая повесть о моем изучении stream в итоге необходимо было увеличить просто напросто время чтения таймаут порта и нужно было сделать дополнительно задержку через Thread чтобы порт сам скинул соединение и продолжил бы чтение. То есть та форма которую Вы предоставили работает. Однако конечно я её дополнил. Но в тоже время для получения данных если данные отправляются с устройства без команд со стороны ПК ничего не происходит хотя сам терминал указывает что данные он отправил. Потеря также в потоке как я считаю но не могу отследить даже с отладчик ом где. Так как event не происходит как следствие обходит мимо точку останова Добавлено через 2 минуты Может у вас есть не то чтобы набросок а просто показать как я мог бы вызвать чтение в отдельном потоке Task. Добавлено через 1 минуту У меня просто вопрос такой. Если я вызову чтение асинхронно то выполнитсч ли команда что вы указывали для закрытия формы. Я конечно понимаю что её нужно реализовать через BeginInvoke однако как собрать воедино также не знаю Добавлено через 55 минут Тот метод что Вы указали для асинхронно го чтения я знаю что он стандартный я его встречал на просторах инета. Единственное что я думаю что ему требуется добавить IAsyncResult ar имею ввиду обработать его однако пока не понял как. Точнее не научился тому как это сделать. Если сможете подсказать как было бы круто. А так все же думаю что верно будет использовать 2 потока основной и через Task но могу ошибаться времени просто задержка уже большая Добавлено через 2 минуты Информации просто крайне мало для именно таких задач. Особенно передача потоков basestream для последовательно го порта, такое я не встречал даже на англоязычных форумах Добавлено через 2 минуты Короче просто пока бьюсь с тем как соединить все вместе Task, DataReceived или его аналог через делегат и BeginInvoke Добавлено через 13 минут Что буду делать. По логике я думаю о следующем. 1. Создаю поток 2. Указываю внутри как вызываемый метод тот который вы указали 3. После внутри метода обрабатываю IAsyncResult через вызов его как делегата в BeginInvoke Предположим все отработает правильно. Теперь меня по той же логике ну размышлению интересует как закрыть поток. Так как нет гарантии что при закрытии формы он прекратит свое существование. Я попробую то что предположил просто надо это сделать правильно хахах
0
|
9 / 1 / 0
Регистрация: 06.08.2018
Сообщений: 134
|
|
25.08.2020, 10:53 [ТС] | 4 |
И еще хотелось бы уточнить, чтобы Вы понимали, трудность первая после того, как Вы показали форму и ее возможное решение состояло в потере потоков. Тут я думаю аналогичное, однако получалось так:
1. в случае передачи в другую форму было что мы первую половину передаем рабочую, а возвращаем нерабочую. 2. Теперь надо понимать что в случае basestream мы будем передавать рабочую, и обработать нам также требуется рабочую часть Добавлено через 1 час 15 минут А по поводу манулов всяких я их изучил ахах. В том и суть что я это не только читал но и пробовал а ещё даже понял. Однако пока вот результата нет
0
|
25.08.2020, 10:53 | |
Помогаю со студенческими работами здесь
4
Программирование последовательного порта.
Мониторинг последовательного порта Распределение данных с последовательного порта Программирование кнопок с использованием последовательного порта Ищу снифер для последовательного порта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |