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

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

16.07.2014, 02:41. Показов 3486. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru