|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
||||||
Программа для связи с устройством через СОМ порт.Фиаско(11.10.2017, 11:11. Показов 5319. Ответов 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
|
|
| 12.10.2017, 00:38 [ТС] | |
|
Нашёл я причину, моя программа заработала через эмуляцию порта (использовал Virtual Serial Port Emulator), а вот напрямую если к порту подключать, то не работает, как сделать чтобы программа работала напрямую с портом?
Добавлено через 8 минут Так же возможная причина кроется в том что устройство соединено посредством USB COM порта. Через СОМ порт на материнской плате ещё не пробовал.
0
|
|
|
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
|
|||
| 17.10.2017, 20:33 | |||
|
Добавлено через 46 секунд
0
|
|||
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
||
| 17.10.2017, 21:52 [ТС] | ||
|
Да, всё верно, пакеты принимаются либо 16 либо 24 байта, что интересно, я использую метод чтения определенного количества байт
Да и входной и выходной буферы настроены на 24 байта.
0
|
||
|
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
|
||||
| 17.10.2017, 22:52 | ||||
|
На буржуйских форумах рекомендуют записывать принятые сообщения в отдельную переменную (али массив), а потом его парсить требуемым образом, основываясь на маркере конца сообщения. Соответственно, из переменной прочитанные данные изымаются. Вот как то так.
0
|
||||
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 17.10.2017, 23:02 [ТС] | |
|
А может в этом помочь свойство SerialPort.ReceivedBytesThreshold?
0
|
|
|
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
|
|
| 17.10.2017, 23:21 | |
|
Вероятно. Попробуйте. Нужно проверить этот подход при передачи большого количества пакетов. Главное - чтобы ничего не пропало)))
Добавлено через 4 минуты В моем случае такой подход был не шибко хорош, так как длина принимаемого сообщения зависела от переданной информации. В общем, намаялся я знатно тогда. Обидно, что код где-то посеял...только принципы в башке остались.
1
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 27.10.2017, 15:59 [ТС] | |
|
Поправил немного прошивку в устройстве для отладки. Теперь устройство отправляет ровно то, что оно приняло. В итоге количество отправленных и принятых байт совпадает, но значения различаются. В общем пробовал разные методы, но что-то мне подсказывает, что дело либо в кодировке, либо в драйвере Arduino. Моя программа отлично работает, если создать виртуальный СОМ порт и работать через него. Количество и значения полностью совпадают. Но вот напрямую с USB-COM драйвером работать не хочет. Подскажите, в какую сторону двигаться?
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 27.10.2017, 21:40 [ТС] | |
|
Всё одинаковое, скорость, количество бит, четность, стоп бит
Добавлено через 2 часа 7 минут Отправляю в порт 24 байта со значением "0" а получаю вот это: FE FF FF FE 00 00 00 06 06 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 09 06 06 00
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 27.10.2017, 22:59 [ТС] | |
|
Rius, смотрите первый пост.
Добавлено через 6 минут Отправляю данные через Terminal by Bray, данные передает корректно, даже без эмуляции СОМ порта. Добавлено через 9 минут Жду пока придет конвертер USB COM, протестирую на нем, отпишусь.
0
|
|
|
|
|
| 27.10.2017, 23:04 | |
|
Попробуйте записывать методом Write.
И сразу считывать ответ методом Read. С указанием размера буфера, заведомо превышающего пакет. И с таймаутом чтения, с запасом. Не по теме: Могу показать код, но на другом языке.
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 28.10.2017, 01:03 [ТС] | |
|
Всем откликнувшимся спасибо за помощь, немного покопавшись в коде для микроконтроллера нашел ошибку)))Теперь всё отправляет и принимает без ошибок.
0
|
|
|
COM‐пропагандист
|
|
| 29.10.2017, 15:36 | |
|
RockMANN, и в чём была ошибка? Расскажите, чтобы оградить новичков от этого.
0
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 30.10.2017, 00:43 [ТС] | |
|
Замабувараев, Ошибка была в том что устройство посылало неправильные данные в порт. Поэтому всегда проверяйте прошивку на возможные штатные и нештатные режимы работы. К примеру в моём устройстве, если отправить в пакете неверный адрес, то программа считает неправильную строку из RAM и отправит её в порт, поэтому я видел не то, что нужно.
1
|
|
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
||||||
| 03.11.2017, 23:57 [ТС] | ||||||
|
Всем добрый вечер! Снова возникают вопросы в решении проблем)) Итак, на этот раз хотел бы узнать имеет ли право на жизнь такая реализация кода: в теле одной процедуры вызывается другая процедура? У меня в теле процедуры SerialPort1_DataReceived_1 вызывается процедура Read_write_Click при определенном условии? Оно вроде работает, но как-то с прерываниями, на процедуру Read_write_Click переходит не с первого раза. А еще иногда ругается System.IO.IOException в этом месте: SerialPort1.Read(Buf, 0, 24) "Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения." & vbCrLf при попытке записать в порт
0
|
||||||
|
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
|
|
| 04.11.2017, 10:50 [ТС] | |
|
Rius, Как тогда реализовать вызов подпрограммы сразу по завершении предыдущей? Где можно почитать информацию о методах вызова?
0
|
|
|
|
|
| 04.11.2017, 11:42 | |
|
Вам это никак не поможет. Стоит пересмотреть работу с SerialPort.
У вас обмен идёт в формате запрос-ответ?
0
|
|
| 04.11.2017, 11:42 | |
|
Помогаю со студенческими работами здесь
20
Как управлять устройством через com-порт? Взаимодействие с устройством через usb порт
Общение с внешним устройством через COM-порт Программа для роботы с устройством через RS-232 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|