
Введение
Delphi — это мощный язык программирования, позволяющий разработчикам с легкостью создавать надежные приложения. Что касается работы с COM-портами, Delphi предоставляет простой способ связи с внешними устройствами. Не следует считать, что COM порт — это нечто безнадежно устаревшее и архаичное. Конечно, вы уже не встретите его в современных гаджетах общего назначения, таких как принтеры, сканеры и т.д. Однако COM порт широко используется до сих пор в промышленной технике, в различных световых рекламных табло. Также без работы с этим портом не обойтись если вы разрабатываете программы для микроконтроллеров, в частности для Arduino.
В этой статье мы рассмотрим, как работать с COM-портами в Delphi, не полагаясь на дополнительные компоненты, используя функции Windows API. Мы рассмотрим основные задачи, такие как открытие COM-порта, настройка его параметров и чтение/запись данных.
Открытие COM-порта
Для начала нам нужно открыть COM-порт. Для этого Delphi предоставляет функцию CreateFile из Windows API. Вот пример того, как открыть COM-порт:
var
hPort: THandle;
comPort: string;
begin
comPort := 'COM1'; // Укажем COM-порт, который вы хотите открыть
hPort := CreateFile(
PChar('\\.\' + comPort),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
);
if hPort <> INVALID_HANDLE_VALUE then
begin
// COM-порт успешно открыт
// Выполнить дальнейшие операции...
end
else
begin
// Не удалось открыть COM-порт
ShowMessage('Failed to open COM port ' + comPort);
end;
end;
Настройка параметров COM-порта
После открытия COM-порта нам необходимо настроить его параметры, такие как скорость передачи данных, четность, стоповые биты и т. д. Для этой цели Delphi предоставляет структуру DCB (блок управления устройством) и функции GetCommState/SetCommState из Windows API. Вот пример того, как настроить параметры COM-порта:
var
dcb: TDCB;
begin
// Получить текущие настройки
GetCommState(hPort, dcb);
// Configure the desired settings
dcb.BaudRate := CBR_9600; // Установите скорость передачи данных = 9600
dcb.Parity := NOPARITY; // No parity bit
dcb.ByteSize := 8; // 8 data bits
dcb.StopBits := ONESTOPBIT; // 1 stop bit
// Примените новые настройки
SetCommState(hPort, dcb);
// Дальнейшие операции...
end;
Чтение и запись данных
Теперь, когда мы открыли COM-порт и настроили его параметры, мы можем приступить к чтению и записи данных на подключенное устройство. Для этих операций используются функции ReadFile и WriteFile из Windows API. Вот пример того, как читать и записывать данные:
var
bytesRead, bytesWritten: DWORD;
buffer: array[0..255] of Byte;
begin
// Чтение данных с COM-порта
ReadFile(hPort, buffer, SizeOf(buffer), bytesRead, nil);
// Обработать полученные данные
if bytesRead > 0 then
begin
// Данные успешно получены
// Доступ к полученным данным в буферном массиве
end;
// Запись данных в COM-порт
buffer[0] := $41; // Example: Writing 'A' to the port
WriteFile(hPort, buffer, 1, bytesWritten, nil);
// Проверяем, прошла ли операция записи успешно
if bytesWritten = 1 then
begin
// Данные успешно записаны
end;
// Дальнейшие операции...
end;
Заключение
В этой статье мы рассмотрели, как работать с COM-портами в Delphi, не полагаясь на дополнительные компоненты, используя функции Windows API. Мы рассмотрели открытие COM-порта, настройку его параметров и чтение/запись данных. Понимая и используя функции Windows API, вы получаете полный контроль над процессом связи COM-порта в ваших приложениях Delphi. Экспериментируйте, исследуйте и создавайте удивительные приложения, которые беспрепятственно взаимодействуют с внешними устройствами через COM-порты!
Читать также:
Работа с COM-PORT в C#…
Работа с COM-PORT в Python…