|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 342
|
||||||||||||||||
Почему пропадают/искажаются сообщения SerialPort?06.03.2025, 17:09. Показов 7626. Ответов 61
Метки serialport (Все метки)
Программа должна обмениваться данными с несколькими платами Arduino(сейчас подключаю 3 шт., планируется больше, но проблемы появляются и ни одной шт., и на двух…).
В тестовом режиме режиме я отправляю “99/0/0/0” – плата считывает это сообщение и отправляет обратно. В мониторе порта программы Arduino все работает четко и стабильно, без каких-либо сбоев (во всяком случае, мне не удалось такое обнаружить). Но вот когда подключаю написанную программу – начинаются проблемы: часто вместо отправленного сообщения программа получает не отображаемые символы, в кодировке Asc номера: 13, 10. Иногда программа вообще не получает никакого ответа. В программе использованы библиотеки:
0
|
||||||||||||||||
| 06.03.2025, 17:09 | |
|
Ответы с готовыми решениями:
61
Visual studio 2019. Элемент serialport, почему нет метода getportnames? Почему пропадают элементы в конструкторе формы? |
|
Модератор
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
|
||
| 29.08.2025, 18:43 | ||
|
0
|
||
| 31.08.2025, 11:12 | |
|
filat18, обновлённая версия посредника.
Доработано: - проверка сигнала завершения на любой итерации чтения/записи; - работа с портом происходит в одном потоке; - добавлен класс данных "запрос-ответ". Теперь каждому запросу соответствует свой ответ.
2
|
|
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 342
|
|
| 02.09.2025, 08:00 [ТС] | |
|
В v2 тоже сталкиваюсь с состоянием ступора программы, после которого Отправка перестает работать, а попытка закрыть программу не может остановить работу класса. При нажатии в VS кнопки Прервать все - оказываюсь тут:
0
|
|
| 02.09.2025, 08:42 | ||
|
filat18, чуть ранее вам рекомендовали делать чтение порта используя методы Read, ReadByte или ReadChar. ReadLine ждёт символа конца строки, который, очевидно, он не получает. Кроме того у вас по видимому не настроен тайм-аут ReadTimeout.
Помимо очевидных указанных ошибок в вашем коде не видно всего того, о чём говорилось ранее в теме. А именно реализации тайм-аута ожидания ответа на запрос, контроля целостности данных и др.
1
|
||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 342
|
||||||
| 02.09.2025, 13:20 [ТС] | ||||||
|
Uswer, благодарю за уточнения! Реализовал, в меру своего понимания - процесс существенно сдвинулся!
А вот взял другой чип (с той же прошивкой и той же частотой) так его работа стабилизировалась только при Thread.Sleep(1)!?
0
|
||||||
| 02.09.2025, 16:34 | ||
|
На что ещё обращаю внимание: - запись и чтение порта будут работать только при отладке. Имейте это ввиду. - проверку строки на Nothing и прочую обработку контроля ответа вынесите в отдельный метод или даже класс. - вместо конкатенации строк я бы использовал StringBuilder.
1
|
||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 342
|
|||
| 04.09.2025, 07:00 [ТС] | |||
|
0
|
|||
|
110 / 74 / 6
Регистрация: 08.08.2025
Сообщений: 716
|
||
| 04.09.2025, 13:19 | ||
|
Я бы лучше в этот момент отдавал управление Винде, чтобы она свою очередь отработала и вернула управление.
0
|
||
|
Модератор
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
|
|
| 04.09.2025, 19:32 | |
|
Вызов Thread.Sleep(1) не означает, что поток будет спать ровно одну миллисекунду.
Фактический минимальный интервал, поддерживаемый Windows для Thread.Sleep(), зависит от частоты системного таймера, которая обычно составляет около 16 миллисекунд (один таймерный тик), поэтому, поток будет разбужен с погрешностью около этого значения, а не точно в указанный интервал. Так, что ставьте 10-15. Меньшее же значение не имеет смысла.
1
|
|
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 342
|
|
| 30.09.2025, 09:09 [ТС] | |
|
Прошу пояснить, в примере от Uswer, в Sub ReadData команда currentData.Answer - что именно делает?
сообщает очереди, что эти данные - есть получены!?
0
|
|
| 30.09.2025, 10:49 | |||||||
|
Если речь идёт об этом куске кода:
0
|
|||||||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 342
|
||||||
| 16.12.2025, 18:58 [ТС] | ||||||
|
Uswer, я очень благодарен за разработку класса ProtokolBroker - удобный и продуктивный, а главное - дающий стабильный результат КОД! Большое спасибо!
![]() и вот движение мысли продолжается: обкатав исходные алгоритмы общения с МК показала, что в отдельных ветках появилась необходимость переключения режима общения... Если исходный режим (вариант №1) был "одна отправка в порт" - "один ответ из порта". То сейчас появилась необходимость выполнить переключение (в рамках имеющегося класса) в другой режим (вариант №2), когда в порт ничего не отправляется, а работает событие чтения всех сообщений из порта - количество сообщений - может быть любое, интервал между сообщениями произвольный. Каждое новое сообщение должно инициировать работу того же саба (Private Sub ReadData) в основном потоке, что и в варианте №1. Я понимаю, что в классе нужно создать новое свойство, указывающее на вариант работы класса, и нужно создать новый метод, переключающий режим работы, но вот как "мягко" остановить поток ReadWriteProc, без закрытия порта и сброса настроек? После этого, как я понимаю, нужно инициализировать новый поток ReadWriteProc2, а вот как в нем должен выглядеть замкнутый цикл - пока свойство показывает вариант №2? Добавлено через 26 минут Такой код пробую, который не переключает варианты, а переходит с первого на второй.:
0
|
||||||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 342
|
|||||||||||
| 19.12.2025, 14:25 [ТС] | |||||||||||
|
В v3 cтолкнулся с проблемой возврата к запрос-ответ.
Программа запускается в режиме запрос-ответ - все работает. Переключаю в режим ReadOnly - все работает. Еще раз переключаю в режиме запрос-ответ - что-то идет не так... По пошаговому проходу показывает, что в:
У меня где-то происходит залипание маркера IsReadOrWrite - принудительно присваиваю False в Sub StopWork(). Но в этом случае первая группа запросов ставится в очередь и не отправляется. А когда приходит вторая группа запросов, то происходит отправка всего накопленного. Сам понимаю, что такой подход - чистое варварство... таким образом получилось добиться прохождения первой группы запросов:
0
|
|||||||||||
| 22.12.2025, 09:24 | ||
|
Не по теме: P.S. Вот поэтому и делают протоколы обмена стандартно, а не меняют их логику на ходу.
0
|
||
|
8 / 7 / 4
Регистрация: 03.12.2020
Сообщений: 342
|
||
| 22.12.2025, 15:25 [ТС] | ||
![]() Добавлено через 5 минут P.S. Может, при перезапуске последовательности общения с портом можно принудительно "обнулять" все переменные, до исходного значения?
0
|
||
| 22.12.2025, 15:25 | |
|
Почему пропадают созданные ячейки таблицы? Serialport.write и serialport.basestream.write - в чем разница C# SerialPort Неполный прием сообщений Почему не приходит сообщение группе SignalR? Почему в отправляемом почтовом сообщении появляются вопросики? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|