|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
||||||
Программа для связи с устройством через СОМ порт.Фиаско(11.10.2017, 11:11. Показов 5558. Ответов 33
Метки serialport (Все метки)
Друзья, всем добрый день. Решил написать программу для передачи и приема данных через СОМ порт. Писал всё с нуля не зная ни языка ни среды разработки. В итоге сделал небольшую программу, которая подключается к СОМ порту передает и принимает определенные пакеты данных по UART. Все было хорошо, программа работала и с терминальной программой через виртуальные СОМ порты и в симуляторе PROTEUS, передавало и принимало все правильно и то что нужно...пока не решил опробовать обмен данных с железом. Итак, подключил к компу Arduino, который использовал чисто как переходник USB-UART, настроил нужную скорость и количество байт данных. Для уверенности закольцевал RX и TX Arduino, послал данные через терминал, все отправляется и передается как надо. Подключаю свое устройство к UART, посылаю в него пакет из обычного терминала, все в порядке, прием и отправка работают как надо, все совпадает. Теперь запускаю свою написанную программу, нажимаю кнопку соединения ииии.... ничего не происходит((((
Чего я только не пробовал, и менял кодировку в свойстве SerialPort.Encoding, и задавал различные величины для SerialPort.WriteTimeout/ReadTimeout, и делал задержку в процедуре отправки и приема байт. Самое интересное, что с устройства данные приходят, это я понял, когда в PROTEUS подключил симулятор терминала в режиме прослушки. И я так понял, что пакет до устройства доходит, и с него же приходит, но в моей программе по каким-то причинам не срабатывает событие SerialPot_DataReceived. Может кто-нибудь подскажет, в какую сторону копать??? Прилагаю файлы проекта целиком в архиве. Ну и код для кучи сюда выложу.
0
|
||||||
| 11.10.2017, 11:11 | |
|
Ответы с готовыми решениями:
33
Как запустить купюроприемник для теста через сом порт ? Можно ли через VB организовать связь (через паралельный порт) с отдельным устройством? управление через СОМ порт |
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 04.11.2017, 11:55 [ТС] | |
|
0
|
|
|
|
|
| 04.11.2017, 12:07 | |
|
RockMANN, тогда вот вам пример другой темы, где запрос-ответ решён:
Кликните здесь для просмотра всего текста
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
||||||
| 08.11.2017, 00:39 [ТС] | ||||||
|
Наконец вышел из положения. Пришлось сделать так: после записи в порт данных SerialPort1.Write(Sendstring, 0, 24) сделал задержку Thread Sleep, а потом уже проверяю, что пришло в буфер SerialPort1.Read(Buf, 0, 24), но так же добавил таймер, который по истечении 1 секунды выдает сообщение о потере связи и разрывает соединение если ничего не пришло или пришли некорректные данные. Всё это дело запихнул в событие по нажатию кнопки.
Единственное, что форма зависает на время передачи, тогда попробовал сделать через событие таймера, но в этом случае при удержании кнопки мыши на заголовке окна а так же при перемещении окна приложения не успевают обрабатываться данные, как будто таймер заканчивается раньше. В чём может быть проблема с таймером? Добавлено через 46 минут Добавлю наблюдения: итак пауза выявилась при нажатии и удержании ПКМ на заголовке окна, в этот момент прекращается вызов события таймера. Если же нажать на заголовок и тут же начать перемещать окно, то событие возобновляется.
0
|
||||||
|
|
|
| 08.11.2017, 04:55 | |
|
RockMANN, обмен надо делать в потоке, и без использования sleep.
Добавлено через 2 минуты Чтение из COM-порта, странная ошибка
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
||||||||||||||||
| 19.11.2017, 22:52 [ТС] | ||||||||||||||||
|
Сделал отправку данных на таймере, так как понял, что устройство возможно не успевает обрабатывать следующую посылку. Но работать таймер отказывается, таймер запускается один раз при нажатии кнопки отправки. При последующем обращении к команде Timer2.Start() таймер не запускается. В чём кроется проблема?
Запускаем таймер с кнопки.
Вернее таймер возможно и запускается, но не происходит события по окончании времени срабатывания
0
|
||||||||||||||||
|
Модератор
4363 / 3433 / 512
Регистрация: 27.01.2014
Сообщений: 6,261
|
|
| 19.11.2017, 23:58 | |
|
может сдвинуть 4ю строку в Timer2_Tick в конец процедуры это процедуры?
Добавлено через 57 секунд а в DataReceived точно команда запуска таймера выполняется? Точку останова ставили?
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 20.11.2017, 00:21 [ТС] | |
|
Yury Komar, Это которая Dim B As New EventArgs ? Я её закомментил, а в DataReceived запуск выполняется, по крайней мере точка останова там работает.
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|||||||||||||||||||||
| 29.11.2017, 11:08 [ТС] | |||||||||||||||||||||
|
Всех приветствую, итак, снова делюсь своими наработками) Всё осталось как и в предыдущем посте, только старт и стоп таймера запихнул в отдельную процедуру, и вызываю их через Invoke. Примерно так:
Добавлено через 16 минут Соответственно вопрос, как узнать какая процедура или событие перенаправило поток на эту процедуру? Добавлено через 10 часов 58 минут Уверен на все 100%, что устройство присылает правильные данные, и только после того, как оно примет данные с компьютера.
0
|
|||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 01.12.2017, 02:32 [ТС] | |
|
Дополню. Переделал процедуру DataReceived на событие по таймеру, т.е. теперь в процедуре отправки запускаю таймер, и по его истечении в событии работает код приёма данных. При этом всё отлично работает, правда немного медленнее...Почему не работало на SerialPort_DataReceived не могу понять?((
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
||
| 01.12.2017, 23:37 [ТС] | ||
|
Я понял в чём дело!!! Нашел где-то на просторах интернета вот это:
Note that &H1A = Ctrl Z is regarded as a End Of File (EOF) character. If you don't want your event handler for the DataReceived event to do anything special in case of &H1A, but just want to wait until the ReceivedBytesThreshold level is reached, you can for example put the following test into it: If (e.EventType = SerialData.chars) then ' Do whatever you need to do End If The SerialData enumeration has only two members - Eof, which is the &H1A character, and chars, which stands for all other characters. Как раз на этом месте при приёме у меня и останавливается передача и вываливается Exception так как в данных есть именно этот символ
Добавлено через 1 час 2 минуты Ура! Товарищи! Победил я этот DataReceived!!! Действительно проблема оказалась в приёме символа "Конец файла" он же EOF он же &H1A, об этом написано выше. Ответом на мою проблему оказался код выше. Соответственно буфер, ещё не принял определенное количество байт и возникало событие SerialPort_DataReceived и при попытке чтения буфера возникало исключение. Очень помогла вот эта статья: http://www.innovatic.dk/knowle... ialcom.htm
0
|
||
| 02.12.2017, 00:00 | ||
|
Не по теме:
If you must use .NET System.IO.Ports.SerialPort
0
|
||
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
||||||||||||
| 29.12.2017, 01:30 [ТС] | ||||||||||||
|
Всех приветствую, снова прошу помощи. Теперь работаю с файлом, пытаюсь сохранить в BIN файл. Выскакивает exception
вот в этом месте:
0
|
||||||||||||
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 01.01.2018, 15:41 [ТС] | |
|
Всем большое спасибо за помощь и напутствия!!! Доделал я свою программу, работает неплохо, пока без косяков, если нужно поделюсь файлами и исходниками. SerialPort_DataReceived событие работает как надо, были конечно небольшие костыли, но об их исправлении я написал в предыдущих постах.
0
|
|
| 01.01.2018, 15:41 | |
|
Как управлять устройством через com-порт? Взаимодействие с устройством через usb порт
Общение с внешним устройством через COM-порт Программа для роботы с устройством через RS-232 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|
Теория всего 6. Судьба неотвратима?
anaschu 21.07.2026
Математическое доказательство Судьбы: Точка бифуркации в едином тензорном ядре Модели ВсегоСвежее обновление питоновского ядра «Soil Chemistry 2. 0» дало нам неопровержимое математическое. . .
|
Теория всего 5. ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
anaschu 21.07.2026
Единое ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
Главная задача «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы» (аттракторов. . .
|
сукцессия 37. Внедрил дипсик в свой оркестр из ИИ. У него закончилось пространство чата, потому опубликую выводы из его работы здесь
anaschu 21.07.2026
====================================================================
КОНТЕКСТ: Моделирование микоризной сукцессии (AM → ECM)
====================================================================
. . .
|
|
сукцессия 36. Делаю прогоны модели около порога бифуркации (превращения эндо микоризы в экто микоризу)
anaschu 21.07.2026
СУКЦЕССИЯ МИКОРИЗ: КАК МАТЕМАТИКА ОБЪЯСНЯЕТ ПОДЗЕМНУЮ ВОЙНУ
Мы привыкли думать, что лес — это деревья. А грибы — это то, что мы собираем в корзинку осенью. Но если заглянуть под землю, окажется,. . .
|
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
|
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного.
1. Почему показания термометра заряжены целью?
Цель заложена в самом. . .
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|