Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 15

Чтение из com-порта

16.07.2014, 02:41. Показов 3517. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте реализовал простенькую програмку по отправке данных на порт теперь же нужно их от туда забрать и вывести на экран
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
78
79
80
81
82
83
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
char buf[128];
char* pbuf = buf;
int counter = 0;
HANDLE hSerial;//Объявляем обработчик com порта
 
void ReadCOM()//
{
    DWORD iSize;
    char sReceivedChar;
    while (true)
    {
        ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0);
        if (iSize > 0)
            cout << sReceivedChar;
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    LPCTSTR sPortName = L"COM1"; //объявление строки с именем порта
 
    hSerial = ::CreateFile(sPortName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);//Открываем первый ком порт для записи/чтения
    if (hSerial == INVALID_HANDLE_VALUE)
    {
        if (GetLastError() == ERROR_FILE_NOT_FOUND)
        {
            cout << "serial port does not exist.\n";
        }
        cout << "some other error occurred.\n";
    }
 
    DCB dcbSerialParams = { 0 };//параметры соединения
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams))
    {
        cout << "getting state error\n";
    }
    dcbSerialParams.BaudRate = CBR_9600;
    dcbSerialParams.ByteSize = 8;
    dcbSerialParams.StopBits = ONESTOPBIT;
    dcbSerialParams.Parity = NOPARITY;
    if (!SetCommState(hSerial, &dcbSerialParams))
    {
        cout << "error setting serial port state\n";
    }
    char data[] = "Hello from C++";
    DWORD dwSize = sizeof(data);
    DWORD dwBytesWritten;
    LPOVERLAPPED ov;
    HANDLE hCom, hEvent;
    DWORD bytesRead, bWritten;
 
    BOOL fSuccess;
    HANDLE hThread;
    DWORD dwParam, dwThreadId;
    BOOL iRet = WriteFile(hSerial, data, dwSize, &dwBytesWritten, NULL);
    iRet = ReadFile(hSerial, data, dwSize, &dwBytesWritten, NULL);
    if (bytesRead>0)
    {
        WriteFile(hCom, pbuf, 1, &bytesRead, NULL);
        counter++;
        if (counter == 10){
            SetEvent(hSerial);
            buf[counter] = '\0';
            counter = 0;
            pbuf = buf;
        }
    }
    cout << dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << data << " " << endl;
    
    
    
    while (1)
    {
        ReadCOM();
    }
    
    return 0;
}
Добавлено через 29 минут
Вообщем у меня реализация на вывод текста если он принят с другого порта а мне нужно чтобы с моего
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2014, 02:41
Ответы с готовыми решениями:

Как остановить чтение из com порта
Создаю поток с беcконечным циклом, в котором слушаю com порт (к нему подключен сканер штрих-кодов). Условием выхода является значение...

Где можно найти информацию про чтение из com-порта?
Помогите пожалуйста найти информацию про com-порт, как ведется чтение из него???

Как обрабатывать результат буфера ком-порта(запись, чтение)?
Такой вопрос. Пишу программу, которая работает с гипертерминалом на другом компе. На прием, пишу например так char buf=&quot;hello&quot;;...

2
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
16.07.2014, 14:40
Цитата Сообщение от kotoryc Посмотреть сообщение
C++
1
2
3
4
5
if (hSerial == INVALID_HANDLE_VALUE)
{  
    // ... 
}
// ...
1) kotoryc, какой смысл продолжать исполнение программы, вызывать GetCommState(hSerial,... ), WriteFile(hSerial,...) в случае, когда hSerial == INVALID_HANDLE_VALUE.

2) Почему отсутствует вызов CloseHandle().

Цитата Сообщение от kotoryc Посмотреть сообщение
C++
1
        WriteFile(hCom, pbuf, 1, &bytesRead, NULL);
3) Чему равняетстя hCom, когда Вы вызваете WriteFile(hCom,...).
0
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 15
16.07.2014, 14:46  [ТС]
Вообще то смысла нет но оно на то и рассчитано что если ошибка порта то все и выпишет и закончит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.07.2014, 14:46
Помогаю со студенческими работами здесь

Чтение из COM порта, При чтении из порта зависает read()
Каждому рано или поздно приходится программировать com порт. Вот и мой черед пришол. Я ужу умею: Откривать,закривать, писать. а читать не...

Чтение из COM порта
Приветствую всех! Для чтения из COM порта использую функцию ReadFile. Третьим параметром в данной функции указывается число байт для...

Чтение COM-порта на C++
Всем привет! Сразу скажу, что новичок в этом и вообще не разбираюсь. Очень долго искал код на c++, который позволил бы читать COM-порт....

Чтение com порта
Хочу реализовать что то вроде терминала для com порта, но все не как не могу реализовать чтение с com порта. Если можно киньте пример. ...

Чтение из com порта
Понять не могу, что происходит. Шлю в ериал порт данные с дискретом в 20 миллисекунд. Скрипт на Руби шикарно читает данные....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru