Catalog · How the catalog works
ComPortDLL
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
ComPortDLL
Библиотека для работы с COM-портами на Delphi с графическим окном настройки параметров.
Реализует открытие, закрытие, отправку и приём данных, а также интерактивное окно для изменения настроек порта.
Библиотека совместима с проектами на других ЯП. Передача данных осучествляется массивами байт, а стек передаваеммый в функции формируется по stdcall стандарту.
Архитектура проекта
Проект состоит из двух основных модулей:
- ComPortLib.pas — основная логика работы с COM-портом.
Содержит глобальный объектTComPortи функции для управления:- первичная инициализация при загрузке библиотеки;
- открытие и закрытие COM port;
- установка параметров COM port;
- обмен данными через открытый COM port;
- возврат текущей конфигурации COM port;
- преобразование значений в значение скоростей и битов чётности. (Используется во внутренней логике);
- PortSettingsForm.pas — форма настроек COM-порта.
Использует компоненты изCPortCtlдля выбора доступных портов, скоростей и битов чётности.
Вызывается черезShowComPortSettingsиз основной библиотеки.
Описание функций
procedure ShowComPortSettings(ParentHandle: HWND); stdcall;
Показывает форму настройки COM-порта.
Параметры:
ParentHandle— дескриптор окна, которое будет владельцем формы.- При отправке с параметром равным нулю окно откроется без привязки.
function OpenComPort: Boolean;
Открывает COM-порт с текущими настройками.
Возвращает True, если порт успешно открыт.
procedure CloseComPort;
Закрывает COM-порт, если он открыт.
procedure SetDataMessage(Buffer: PByte; BufferSize: Integer); stdcall;
Отправляет данные в порт.
Параметры:
Buffer— указатель на буфер с данными.BufferSize— количество байт для отправки.
function GetDataMessage(Buffer: PByte; BufferSize: Integer): Integer; stdcall;
Читает данные из COM-порта.
Параметры:
Buffer— указатель на буфер для приёма.BufferSize— размер буфера.
Возвращает: количество реально записанных в буфер байт.
procedure SetComPort(strComPort: PAnsiChar; strBaudRate: Integer; strParityBits: Integer); stdcall;
Устанавливает новые настройки порта.
Параметры:
strComPort— строка с именем порта (в формате,"COM3","COM12"и т.д.).strBaudRate— скорость (например,9600).strParityBits— код бита чётности:0— нет (None)1— нечётная (Odd)2— чётная (Even)
function GetComPortConfigStr(Buffer: PAnsiChar; BufferSize: Integer): Integer; stdcall;
Возвращает текущую конфигурацию порта в виде строки:
<PortName>, <BaudRate>, <ParityBits>
Параметры:
Buffer— указатель на буфер для записи строки.BufferSize— размер буфера.
Возвращает: длину записанной строки.
Служебные (внутренние) функции преобразования
function IntToBaudRateEnum(const S: Integer): TBaudRate;— целое → enum скорости.function BaudRateEnumToInt(BR: TBaudRate): Integer;— enum скорости → целое.function RadioIndexToParity(Index: Integer): TParityBits;— индекс радио-кнопки (в меню) → enum чётности.function ParityToRadioIndex(P: TParityBits): Integer;— enum чётности → индекс радио-кнопки (в меню).
Примеры использования
Открытие и закрытие порта
if OpenComPort then
ShowMessage('Порт открыт')
else
ShowMessage('Ошибка открытия порта');
CloseComPort;Установка параметров и открытие
SetComPort('COM3', 9600, 0); // COM3, 9600, без чётности
if OpenComPort then
ShowMessage('Порт открыт с новыми параметрами');Отправка данных
var
Msg: AnsiString;
begin
Msg := 'Hello, COM!';
SetDataMessage(PByte(@Msg[1]), Length(Msg));
end;Приём данных
var
Buffer: array[0..255] of Byte;
BytesRead: Integer;
begin
BytesRead := GetDataMessage(@Buffer, SizeOf(Buffer));
if BytesRead > 0 then
ShowMessage('Получено: ' + AnsiString(PAnsiChar(@Buffer[0])));
end;Получение текущей конфигурации
var
Buf: array[0..255] of AnsiChar;
begin
GetComPortConfigStr(@Buf, SizeOf(Buf));
ShowMessage('Конфигурация: ' + string(Buf));
end;Вызов формы настройки
ShowComPortSettings(Application.Handle);Логика формы настроек
TFormComSettings:
cbComPort— список доступных портов.cbBaudRate— список скоростей.rgParity— выбор бита чётности.btnOK/btnCancel— кнопки применения или отмены.
При нажатии OK:
- Сохраняются старые параметры.
- Закрывается порт.
- Применяются новые параметры.
- Порт открывается заново.
- Если открыть не удалось — параметры откатываются и окно остаётся открытым.
В основе лежит библиотека: https://github.com/CWBudde/ComPort-Library

