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

Передача данных по com порту

20.11.2012, 11:20. Показов 6217. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Написал программу открытия и передачи данных по com порту. Проблема в следующем.
Если я пишу передачу в теле открытия ком порта, то данные отсылаются. При создании отдельного события передача не происходит, объясните пожалуйста в чем может быть проблема.
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 //HANDLE port;
 DCB dcb;
 port=CreateFileA("COM9", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
    if(port==INVALID_HANDLE_VALUE) {
    Memo1->Lines->Add("Не возможно открыть последовательный порт");
 
   }
  // CloseHandle(port);
 
  //далее установим наши параметры
dcb.BaudRate = CBR_19200;
dcb.fBinary = TRUE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
dcb.fDsrSensitivity = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = 1;
dcb.XonLim=2048;
dcb.XoffLim=512;
dcb.StopBits=ONESTOPBIT;
 
SetCommState(port, &dcb);  //запишем параметры в порт
 
COMMTIMEOUTS CommTimeOuts;
GetCommTimeouts(port, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout= 100;
CommTimeOuts.ReadTotalTimeoutMultiplier = 1;
CommTimeOuts.ReadTotalTimeoutConstant = 5;
CommTimeOuts.WriteTotalTimeoutMultiplier = 1;
CommTimeOuts.WriteTotalTimeoutConstant = 100;
SetCommTimeouts(port, &CommTimeOuts);
 
 Memo1->Lines->Add("  Порт COM9 открыт успешно ");
 Memo1->Lines->Add(" скорость 19200");
 
 
 }
 
//---------------------------------------------------------------------------
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
 CloseHandle(port);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 char buffer[1];
 memset(buffer,0,sizeof(buffer));
 buffer[0] |=(1<<0);
 //strcpy(buffer,"SAVE TO COM1");
 DWORD nb;
 OVERLAPPED ov;
 WriteFile(port,buffer,sizeof(buffer),&nb,&ov);
}
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TMemo *Memo1;
    TButton *Button2;
    TTimer *Timer1;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall Button2Click(TObject *Sender);
    void __fastcall Timer1Timer(TObject *Sender);
 
 
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    HANDLE port;
 
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2012, 11:20
Ответы с готовыми решениями:

Передача char по com порту
учусь работать с com портом, может кто-нибудь написать простой пример передачи битовой структуры. вот так я заполняю структуру: ...

Передача одного байта по com-порту
Ком порт в компьютере соединен перемычкой RX-&gt;TX; HANDLE COMport; //дескриптор порта OVERLAPPED overlapped; //будем...

Передача данных по LPT порту
Всем привет! Передо мной стоит задача: Необходимо передать файл по средствам парралельного порта с одного компьютера, на другой. (2...

4
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
22.11.2012, 10:17
Цитата Сообщение от Snikersman Посмотреть сообщение
При создании отдельного события передача не происходит, объясните пожалуйста в чем может быть проблем
Как я понимаю, все дело в том что CreateFile это что-то вроде потока, ты открыл порт в этом "потоке" и работать с этим портом может только "поток", который его открыл.
Я предполагаю, а не утверждаю. Если есть знающие люди - разъясните.
0
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 13
22.11.2012, 12:55  [ТС]
Уже разобрался, спасибо!
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 30
05.03.2016, 19:38
у меня здесь выдает ошибку
C++
1
2
port=CreateFileA("COM9", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
// ошибка[bcc32 Error] (432): E2451 Undefined symbol 'port'
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
09.03.2016, 12:22
А где вы объявили тип этой переменной ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2016, 12:22
Помогаю со студенческими работами здесь

Передача данных через терминал по порту
Всем привет!Появился такой вопрос.Допустим я поставил через netcat программу которая записывает введеные данные в текстовый файл file.txt. ...

Передача данных по RS233 или COM порту
Доброго времени суток всем ! У меня проблема, хочется разобраться с передачей данных по RS233 или COM порту. Написал такую программку: ...

Прием и передача данных на одном порту
Всем Доброго времени суток. Где то слышал что возможно так что бы данные отправлялись и принимались на одном и том же порту. Что то...

Передача и прием данных по виртуальному COM порту
Доброе время ))) вот собрал девайс на основе FT232BL Вот отсылаю данные: private SerialPort port; //...

Альтернатива COM порту (требуется высокоскоростная передача данных)
Всем привет! Мне через MATLAB необходимо с очень высокой скоростью забрить данные с АЦП устройства (это может быть Arduino,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
[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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru