|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 338
|
||||||||||||||||
Почему пропадают/искажаются сообщения SerialPort?06.03.2025, 17:09. Показов 6571. Ответов 61
Метки serialport (Все метки)
Программа должна обмениваться данными с несколькими платами Arduino(сейчас подключаю 3 шт., планируется больше, но проблемы появляются и ни одной шт., и на двух…).
В тестовом режиме режиме я отправляю “99/0/0/0” – плата считывает это сообщение и отправляет обратно. В мониторе порта программы Arduino все работает четко и стабильно, без каких-либо сбоев (во всяком случае, мне не удалось такое обнаружить). Но вот когда подключаю написанную программу – начинаются проблемы: часто вместо отправленного сообщения программа получает не отображаемые символы, в кодировке Asc номера: 13, 10. Иногда программа вообще не получает никакого ответа. В программе использованы библиотеки:
0
|
||||||||||||||||
| 06.03.2025, 17:09 | |
|
Ответы с готовыми решениями:
61
Visual studio 2019. Элемент serialport, почему нет метода getportnames? Почему пропадают элементы в конструкторе формы? |
| 07.03.2025, 09:15 | ||||||
|
У вас скорее всего это из-за блокировки UI потока.
Например в этом участке кода поток отпускается совсем не надолго:
Не по теме: Код настолько (даже не знаю как назвать) линейный что ли, что даже те объекты, вроде СОМ-порта, которые пытаются работать в события, то ломаются об блокировку. filat18, вам реально надо изменить код под паттерн наблюдатель. Добавлено через 5 минут Вместо блокировки потока, вроде той, на которую я указал, запускайте таймер ожидания ответа. Также измените название, а лучше разделите функционал метода ComsRead. Дело в том, что этот метод не только читает, что можно подумать на основании его названия, но и создаёт порты, пишет в них, обрабатывает нештатные ситуации. Короче, метод делает много чего и это много надо декомпозировать.
0
|
||||||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 338
|
|
| 07.03.2025, 10:29 [ТС] | |
|
А в чем смысл задержек ReadTimeout и WriteTimeout - стоит ли их задавать?
И стоит ли очищать буферы DiscardInBuffer/DiscardOutBuffer перед отправкой-чтением?
0
|
|
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 338
|
||
| 07.03.2025, 12:06 [ТС] | ||
|
0
|
||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 338
|
|||||||
| 07.03.2025, 12:36 [ТС] | |||||||
|
Я вот хэлп еще раз почитал... Вроде получилось пример кода применить:
Пробовал добавить условие: If _serialPort.IsOpen = True Then, но без результатно...
0
|
|||||||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 338
|
|||
| 10.03.2025, 09:48 [ТС] | |||
|
0
|
|||
|
|
||
| 10.03.2025, 09:52 | ||
И есть время таймаута посылки. Например, равное времени передачи 3-5 байт на используемой скорости. Если оно истекло, то пакет завершён.
0
|
||
|
|
||||||
| 10.03.2025, 16:24 | ||||||
0
|
||||||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 338
|
||
| 08.04.2025, 08:19 [ТС] | ||
|
Но, увы ![]() ![]() пока есть только ощущение наличия рационального зерна... Перманентный цейтнот и подкрадывающийся писец, не дает осознать суть наблюдателя... Может кто-нибудь в двух словах набросать структуру переадресаций и пояснить: где ведущий/ведомый...?
0
|
||
| 08.04.2025, 11:44 | |
|
Шаблон Наблюдатель широко распространён в формах в виде механизма событий. Суть до безобразия проста: один объект, например СОМ-порт, имеет (определяет) события, другой объект, например экземпляр формы, подписывается (регистрирует свои методы) на события первого. Что происходит в кулуарах? Там следующее на нашем примере - отправитель события (СОМ-порт) при обнаружении данных на входе записывает их в буфер обмена, после чего возбуждает соответствующее событие, при этом все получатели события обрабатывают данные в буфере как им хочется. Как происходит возбуждение события? На самом деле при подписывании метода на событие происходит запись делегата в список делегатов для данного события. Когда отправителю надо оповестить подписчиков о чём-то, то он из соответствующего типу события списка поочерёдно вызывает делегатов. Вот и всё.
0
|
|
|
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
|
||||||
| 09.04.2025, 17:16 | ||||||
|
Есть простой и надёжный способ чтения данных из COM порта, который почему-то не описан
в рекомендациях Microsoft. Создаём таймер с периодом скажем 100 миллисекунд. Для этого таймера пишем:
высокую скорость обмена, вроде 115 КБод, число принятых байт (за 100 миллисекунд таймера) не превысит 1000-2000, что быстро отрабатывается такой SUB
0
|
||||||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 338
|
|
| 16.04.2025, 07:33 [ТС] | |
|
0
|
|
|
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
|
|
| 16.04.2025, 16:04 | |
|
Не понравилось мне описание ReadExisting
Цитата из MSDN: Считывает все непосредственно доступные байты в соответствии с кодировкой из потока и из входного буфера объекта SerialPort. "в соответствии с кодировкой" - это как понимать ? И далее: Примечание Поскольку класс SerialPort предусматривает буферизацию данных, в отличие от потока, задаваемого свойством BaseStream, между ними возможен конфликт при определении числа байтов, доступных для чтения. Свойство BytesToRead может показывать, что байты для чтения имеются, однако они могут оказаться недоступными для потока, определенного свойством BaseStream, поскольку помещены в буфер для SerialPort. В общем .ReadByte представляется более надёжным и не даёт повода для ненужных ошибок. К тому же среди программистов есть два подхода к обмену через последовательный порт. Кто-то считает (вполне разумно), что можно передавать через него любые бинарные данные, а правильность передачи можно контролировать контрольными суммами. Второй подход - это передача всех данных (в том числе чисел) в текстовом формате, произвольный двоичный код можно при этом передавать как HEX цифры. Это вроде бы медленней, но позволяет отлаживать выходные данные микроконтроллера с помощью программы-терминала, а не писать с нуля свою программу, которая способна принять и напечатать например байт 00h
0
|
|
|
Администратор
|
|
| 18.04.2025, 08:40 | |
|
0
|
|
|
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
|
||
| 18.04.2025, 09:45 | ||
|
да ещё вероятно не в 8-битной кодировке, так что использовать .ReadExisting для приёма двоичных данных не стоит.
0
|
||
|
Администратор
|
|
| 18.04.2025, 13:42 | |
|
0
|
|
| 18.04.2025, 13:42 | |
|
Помогаю со студенческими работами здесь
20
Почему пропадают созданные ячейки таблицы? Serialport.write и serialport.basestream.write - в чем разница C# SerialPort Неполный прием сообщений Почему не приходит сообщение группе SignalR? Почему в отправляемом почтовом сообщении появляются вопросики? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|