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

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

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

Author24 — интернет-сервис помощи студентам
Добрый день!
Написал программу открытия и передачи данных по 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2012, 11:20
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru