//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "COMtest.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// ComPort1->BaudRate = br9600;
// ComPort1->DataBits = dbEight;
// ComPort1->Parity->Check = false;
// ComPort1->StopBits = sbOneStopBit;
if(ComPort1->Connected) {
Application->MessageBox("Port is already opened!", "Error!", MB_OK);
Close();
}
else
ComPort1->Open();
outfile.open("COMout.dat", ios_base::trunc);
Memo1->Text = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
{
AnsiString Str;
ComPort1->ReadStr(Str, ComPort1->InputCount());
outfile << Str.c_str();
Memo1->Text = Memo1->Text + Str;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
ComPort1->Close();
outfile.close();
// Application->MessageBox("Test.", "TEST", MB_OK);
}
//---------------------------------------------------------------------------
Проблема: работа с COM-портом в Borland C++Builder
Программа на компьютере разработана на Borland C++Builder 6, компонент работы с COM-портом - ComPort Library.
Программа самая простая: читает из буфера порта всё, что там накопилось, и сбрасывает это в файл и на экран. (Код программы - в следующем сообщении).
Есть эталонная программа, написанная на Дельфи - так что можно быть уверенным, что устройство работает нормально.
Программа на С++ вместо ожидаемых результатов выдаёт одно и то же значение: $80. Если после этого запустить приложение на Дельфи, оно тоже показывает этот результат; после перезагрузки компьютера приложение на Дельфи работает нормально - но только до запуска приложения на С++. Похоже, каким-то образом нарушается работа COM-порта; но что сделано неправильно?
Код прилагается.
PS Программа выполняется на ноутбуке.
- А как можно изменить порт COM1 ->COM2 из кода ? ComPort1->Port="COM2"; не работает :( от west74, 20 марта 2012 года
Код:
Заголовок:
Код:
//---------------------------------------------------------------------------
#ifndef COMtestH
#define COMtestH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "CPort.hpp"
//---------------------------------------------------------------------------
#include <iostream>
#include <fstream>
using namespace std;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TComPort *ComPort1;
TMemo *Memo1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall ComPort1RxChar(TObject *Sender, int Count);
void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
ofstream outfile;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
#ifndef COMtestH
#define COMtestH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "CPort.hpp"
//---------------------------------------------------------------------------
#include <iostream>
#include <fstream>
using namespace std;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TComPort *ComPort1;
TMemo *Memo1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall ComPort1RxChar(TObject *Sender, int Count);
void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
ofstream outfile;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
в данной версии все настройки выполняются в Object Inspector, поэтому эти строки закомментированы:
Код:
// ComPort1->BaudRate = br9600;
// ComPort1->DataBits = dbEight;
// ComPort1->Parity->Check = false;
// ComPort1->StopBits = sbOneStopBit;
// ComPort1->DataBits = dbEight;
// ComPort1->Parity->Check = false;
// ComPort1->StopBits = sbOneStopBit;
Хотя я пробовал задавать настройки и непосредственно в программе - результат тот же %(
Цитата:
Originally posted by Frostling
Дополнение по настройкам COM-порта:
в данной версии все настройки выполняются в Object Inspector, поэтому эти строки закомментированы:
Хотя я пробовал задавать настройки и непосредственно в программе - результат тот же %(
Дополнение по настройкам COM-порта:
в данной версии все настройки выполняются в Object Inspector, поэтому эти строки закомментированы:
Код:
// ComPort1->BaudRate = br9600;
// ComPort1->DataBits = dbEight;
// ComPort1->Parity->Check = false;
// ComPort1->StopBits = sbOneStopBit;
// ComPort1->DataBits = dbEight;
// ComPort1->Parity->Check = false;
// ComPort1->StopBits = sbOneStopBit;
Хотя я пробовал задавать настройки и непосредственно в программе - результат тот же %(
Друг, если хочешь разрулить СОМ-порт, пиги все сам без всяких там компонент. Используй чистый WinApi.
CreateFile - открыть порт
ReadFile/WriteFile - чтение/запись в файл (порт)
CloseFile - закрыть порт
Остальное все дело техники. По себе знаю!!!!!
Документации на русском хватает.
P.S. для отлавливания сообщений используй собственный дополнительный поток, хотя на Delphi/Builder и это можно обойти :)
Проблема оказалась на стороне устройства...
для Borland C++Builder 6 ?
Скачал по ссылке архив 3.1, в нем куча файлов, непонятно что с ними делать. Не поможешь разобраться?
Цитата:
Originally posted by vap
Где взять рабочую версию ComPort Library
для Borland C++Builder 6 ?
Скачал по ссылке архив 3.1, в нем куча файлов, непонятно что с ними делать. Не поможешь разобраться?
Где взять рабочую версию ComPort Library
для Borland C++Builder 6 ?
Скачал по ссылке архив 3.1, в нем куча файлов, непонятно что с ними делать. Не поможешь разобраться?
Боюсь, что помочь не смогу. В конце концов я использовал библиотеку Async Pro, которая упоминается на домашней странице проекта ComPort Library.
А к куче файлов, как правило, прилагается описание ;)
Цитата:
Originally posted by vap
Где взять рабочую версию ComPort Library
для Borland C++Builder 6 ?
Скачал по ссылке архив 3.1, в нем куча файлов, непонятно что с ними делать. Не поможешь разобраться?
Где взять рабочую версию ComPort Library
для Borland C++Builder 6 ?
Скачал по ссылке архив 3.1, в нем куча файлов, непонятно что с ними делать. Не поможешь разобраться?
Вот описание работы с com-портом на API.