Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема: работа с COM-портом в Borland C++Builder

13K
26 октября 2005 года
Frostling
7 / / 14.10.2005
Ситуация: есть устройство, содержащее микроконтроллер. Устройство должно общаться с компьютером через COM-порт.
Программа на компьютере разработана на Borland C++Builder 6, компонент работы с COM-портом - ComPort Library.

Программа самая простая: читает из буфера порта всё, что там накопилось, и сбрасывает это в файл и на экран. (Код программы - в следующем сообщении).

Есть эталонная программа, написанная на Дельфи - так что можно быть уверенным, что устройство работает нормально.

Программа на С++ вместо ожидаемых результатов выдаёт одно и то же значение: $80. Если после этого запустить приложение на Дельфи, оно тоже показывает этот результат; после перезагрузки компьютера приложение на Дельфи работает нормально - но только до запуска приложения на С++. Похоже, каким-то образом нарушается работа COM-порта; но что сделано неправильно?

Код прилагается.

PS Программа выполняется на ноутбуке.
  • А как можно изменить порт COM1 ->COM2 из кода ? ComPort1->Port="COM2"; не работает :( от west74, 20 марта 2012 года
13K
26 октября 2005 года
Frostling
7 / / 14.10.2005
Программа:
Код:
//---------------------------------------------------------------------------

#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);
}
//---------------------------------------------------------------------------


Заголовок:
Код:
//---------------------------------------------------------------------------

#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
13K
26 октября 2005 года
Frostling
7 / / 14.10.2005
Дополнение по настройкам COM-порта:
в данной версии все настройки выполняются в Object Inspector, поэтому эти строки закомментированы:

 
Код:
//    ComPort1->BaudRate = br9600;
//    ComPort1->DataBits = dbEight;
//    ComPort1->Parity->Check = false;
//    ComPort1->StopBits = sbOneStopBit;


Хотя я пробовал задавать настройки и непосредственно в программе - результат тот же %(
14K
09 ноября 2005 года
Ember
7 / / 09.11.2005
Цитата:
Originally posted by Frostling
Дополнение по настройкам COM-порта:
в данной версии все настройки выполняются в Object Inspector, поэтому эти строки закомментированы:

 
Код:
//    ComPort1->BaudRate = br9600;
//    ComPort1->DataBits = dbEight;
//    ComPort1->Parity->Check = false;
//    ComPort1->StopBits = sbOneStopBit;


Хотя я пробовал задавать настройки и непосредственно в программе - результат тот же %(



Друг, если хочешь разрулить СОМ-порт, пиги все сам без всяких там компонент. Используй чистый WinApi.
CreateFile - открыть порт
ReadFile/WriteFile - чтение/запись в файл (порт)
CloseFile - закрыть порт
Остальное все дело техники. По себе знаю!!!!!
Документации на русском хватает.
P.S. для отлавливания сообщений используй собственный дополнительный поток, хотя на Delphi/Builder и это можно обойти :)

13K
09 ноября 2005 года
Frostling
7 / / 14.10.2005
Спасибо за совет, но всё уже разрулилось %)
Проблема оказалась на стороне устройства...
18K
12 мая 2006 года
vap
1 / / 12.05.2006
Где взять рабочую версию ComPort Library
для Borland C++Builder 6 ?
Скачал по ссылке архив 3.1, в нем куча файлов, непонятно что с ними делать. Не поможешь разобраться?
13K
24 мая 2006 года
Frostling
7 / / 14.10.2005
Цитата:
Originally posted by vap
Где взять рабочую версию ComPort Library
для Borland C++Builder 6 ?
Скачал по ссылке архив 3.1, в нем куча файлов, непонятно что с ними делать. Не поможешь разобраться?

Боюсь, что помочь не смогу. В конце концов я использовал библиотеку Async Pro, которая упоминается на домашней странице проекта ComPort Library.

А к куче файлов, как правило, прилагается описание ;)

15K
24 мая 2006 года
9byte
5 / / 17.03.2006
Цитата:
Originally posted by vap
Где взять рабочую версию ComPort Library
для Borland C++Builder 6 ?
Скачал по ссылке архив 3.1, в нем куча файлов, непонятно что с ними делать. Не поможешь разобраться?



Вот описание работы с com-портом на API.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог