Задача
Настроить параметры открытого COM-порта через структуру DCB.
Компоненты на форме
ComboBox (ComboBaud, ComboBits, ComboStop), Edit (EditParity), Button (ButtonApply), StatusBar.
Как работает
- Прочитать текущее состояние порта GetCommState.
- Заполнить поля DCB выбранными значениями.
- Применить настройки SetCommState.
Исходный код модуля
//---------------------------------------------------------------------------
// Проект 42. Настройка параметров COM
// Заполнение DCB: скорость, биты, чётность, стоп-биты.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// Кодирование параметров COM в поля DCB. dcbParity — ядро, переводящее
// букву чётности в код WinAPI (N/E/O), проверяется тестом.
int dcbParity(char p) // N,E,O,M,S -> NOPARITY..
{
switch (p){ case 'E':case 'e':return EVENPARITY;
case 'O':case 'o':return ODDPARITY;
case 'M':case 'm':return MARKPARITY;
case 'S':case 's':return SPACEPARITY; }
return NOPARITY;
}
//---------------------------------------------------------------------------
extern HANDLE FPort;
void __fastcall TForm1::ButtonApplyClick(TObject *Sender)
{
if (FPort==INVALID_HANDLE_VALUE){ StatusBar1->SimpleText="Сначала откройте порт"; return; }
DCB dcb; ZeroMemory(&dcb,sizeof(dcb)); dcb.DCBlength=sizeof(dcb);
GetCommState(FPort,&dcb);
dcb.BaudRate = StrToIntDef(ComboBaud->Text,9600);
dcb.ByteSize = StrToIntDef(ComboBits->Text,8);
dcb.Parity = dcbParity(EditParity->Text.IsEmpty()?'N':EditParity->Text[1]);
dcb.StopBits = (ComboStop->ItemIndex==1)? TWOSTOPBITS : ONESTOPBIT;
if (SetCommState(FPort,&dcb)) StatusBar1->SimpleText="Параметры применены";
else StatusBar1->SimpleText="Ошибка настройки";
}
//---------------------------------------------------------------------------
Пояснения
- Ядро dcbParity переводит букву чётности в код WinAPI.
- Настраивать порт нужно после его открытия.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.
Что дальше
Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.