0 / 0 / 0
Регистрация: 08.06.2021
Сообщений: 3

Не приходят данные из COM порта при использовании ReadFile()

09.04.2022, 19:49. Показов 1193. Ответов 3

Author24 — интернет-сервис помощи студентам
Я студент на удалёнке. Требуется написать лабораторную по отправке и получению данных из COM. Само задание понятно, однако столкнулся с проблемой что не приходят данные при чтении из порта функцией ReadFile(). Я написал преподавателю, но ответ затянулся, возможно здесь получу его быстрее. Я прочитал документацию msdn по работе с портами, не понимаю в чем ошибка, скорее всего банальна и на поверхности. Любая помощь будет очень ценна
Листинг
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <windows.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
HANDLE hCOM;
 
void close()
{
    CloseHandle(hCOM);
    cout << endl;  ExitProcess(0);
}
 
int main()
{
    setlocale(LC_ALL, ".1251");
//----------------------------------------- открываем порт
    hCOM = CreateFile(L"\\\\.\\COM10",      
                    GENERIC_READ | GENERIC_WRITE,NULL,NULL,
                    OPEN_EXISTING,NULL,NULL);
 
    if (hCOM == INVALID_HANDLE_VALUE)
    {
        cout << "Ошибка открытия порта" << endl; 
        close();
    }
 
    cout << "Порт COM10 открыт. Описатель: " << hCOM << endl;
//----------------------------------------- инициализируем порт
    DCB dcb;
    GetCommState(hCOM, &dcb);
 
    dcb.fBinary = TRUE;                   // Включаем двоичный режим обмена
    dcb.BaudRate = CBR_9600;              // Скорость передачи данных
    dcb.ByteSize = 8;                     // Размер байта данных
    dcb.StopBits = ONESTOPBIT;            // Количество стоповых бит
    dcb.fParity = NOPARITY;               // Проверка четности
 
    COMMTIMEOUTS CommTimeOuts;
    CommTimeOuts.ReadIntervalTimeout = 2000;
    CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
    CommTimeOuts.ReadTotalTimeoutConstant = 1000;
    CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
    CommTimeOuts.WriteTotalTimeoutConstant = 1000;
 
    if (!SetCommState(hCOM, &dcb) || !SetCommTimeouts(hCOM, &CommTimeOuts))
    {
        cout << "Ошибка настройки порта" << endl;
        close();
    }
 
    unsigned char ch;
    cout << "Символ для передачи: "; ch = _getche();
//----------------------------------------- отправляем символ в порт
    DWORD rb;
    bool Wchar = WriteFile(hCOM, &ch, sizeof(ch), &rb, 0);
    
    if (Wchar && rb > 0) printf("\nСимвол '%c' отправлен в порт\n", ch);
 
    unsigned char rez = 0;
    rb = 0;
    int i = 0;
//----------------------------------------- ожидаем получения из порта
    while (++i<10) {
        bool Rchar = ReadFile(hCOM, &rez, sizeof(rez), &rb, 0);
        if (Rchar && rb > 0) {
            printf("\nСимвол '%с' получен\n", rez);
            break;
        }
        cout << "ожидаем получения символа из COM10 .." << endl;
    }
 
    close();
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2022, 19:49
Ответы с готовыми решениями:

Зацикливание при чтении COM-порта в функции ReadFile()
Создал класс Transmit для работы с виртуальным COM-портом ПК. Transmit.h #include &quot;Windows.h&quot; #define...

Утечки при использовании порта завершения и соккетов
Здравствуйте, уважаемые Гуру! Реализовываю сервер с использованием порта завершения. Всё работает, всё прекрасно. Одно меня смущает -...

Приходят неправильные данные при чтении из Serial Port
Доброго времени суток. Имеется проблема с реализацией обмена данными с COM портом. Прибор, принимающий команды в битах, график...

3
Модератор
 Аватар для vxg
3402 / 2173 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
11.04.2022, 10:55
pirocsilin, вроде буквы верные, у меня только FILE_ATTRIBUTE_NORMAL в CreateFile, а еще имя файла без префикса - просто COM10
0
0 / 0 / 0
Регистрация: 08.06.2021
Сообщений: 3
15.04.2022, 13:15  [ТС]
Выставил FILE_ATTRIBUTE_NORMAL. Без префикса порт не открывается. Позвонил на кафедру, пообщался с преподавателем, он сказал что ему пока не до меня. На сегодняшний день решение не найдено.
0
2717 / 870 / 329
Регистрация: 10.02.2018
Сообщений: 2,068
15.04.2022, 13:35
Цитата Сообщение от pirocsilin Посмотреть сообщение
Требуется написать лабораторную по отправке и получению данных из COM
Вы же понимаете, что порт сам по себе никакие данные вам не отправит. Данные отправляет устройство, которое связано с компьютером посредством порта и RS-232 интерфейса. Устройство может не отвечать по множеству причин: устройство выключено или не готово к работе, неправильные параметры передачи данных (частота, битность или четность), неправильный протокол обмена. Из вашего описания совершенно не известно куда именно вы отправляете символы вводимые с клавиатуры и должно ли хоть что-то приходить на них в ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2022, 13:35
Помогаю со студенческими работами здесь

Проблема искажения данных при использовании ком-порта с четностью, установленной в режим ODD и EVEN
Добрый день. Я пишу программу, которая должна опрашивать микроконтроллер по юарт. Одна из функций - перенастройка настроек юарта через...

[SIP] При использовании клиентом параметра rport сервер отправляет запросы INVITE с нового порта
Здравствуйте. Пытаюсь разобраться с sip-телефонией. Каждый раз новые сюрпризы выдаёт. Проблема в том, что при использовании клиентом...

Из COM порта в ответе частично приходят кракозябры
Здравствуйте, у меня в ответе из COM порта приходят частично кракозябры, в консоли это отображается как знаки вопроса, не понимаю почему....

Некорректные данные при считывании с COM-порта
Добрый день! Прошу помочь разобраться с работой COM-порта. Опрашиваю порт в ручном режиме: отправляю массив байтов через порт на устройство...

Пропадают данные COM порта при закрытии формы
MainForm using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
Конвейеры ETL с Apache Airflow и Python
AI_Generated 13.05.2025
ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .
Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .
CQRS (Command Query Responsibility Segregation) на Java
Javaican 12.05.2025
CQRS — Command Query Responsibility Segregation, или разделение ответственности команд и запросов. Суть этого архитектурного паттерна проста: операции чтения данных (запросы) отделяются от операций. . .
Шаблоны и приёмы реализации DDD на C#
stackOverflow 12.05.2025
Когда я впервые погрузился в мир Domain-Driven Design, мне показалось, что это очередная модная методология, которая скоро канет в лету. Однако годы практики убедили меня в обратном. DDD — не просто. . .
Исследование рантаймов контейнеров Docker, containerd и rkt
Mr. Docker 11.05.2025
Когда мы говорим о контейнерных рантаймах, мы обсуждаем программные компоненты, отвечающие за исполнение контейнеризованных приложений. Это тот слой, который берет образ контейнера и превращает его в. . .
Micronaut и GraalVM - будущее микросервисов на Java?
Javaican 11.05.2025
Облачные вычисления безжалостно обнажили ахиллесову пяту Java — прожорливость к ресурсам и медлительный старт приложений. Традиционные фреймворки, годами радовавшие корпоративных разработчиков своей. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru