Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Читать и писать в последовательный порт

Delphi , Файловая система , Порты

Читать и писать в последовательный порт

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function OpenCOMPort: Boolean;
 var
   DeviceName: array[0..80] of Char;
   ComFile: THandle;
 begin
    { First step is to open the communications device for read/write. 
     This is achieved using the Win32 'CreateFile' function. 
     If it fails, the function returns false. 

     Wir versuchen, COM1 zu offnen. 
     Sollte dies fehlschlagen, gibt die Funktion false zuruck. 
   }
   StrPCopy(DeviceName, 'COM1:');

   ComFile := CreateFile(DeviceName,
     GENERIC_READ or GENERIC_WRITE,
     0,
     nil,
     OPEN_EXISTING,
     FILE_ATTRIBUTE_NORMAL,
     0);

   if ComFile = INVALID_HANDLE_VALUE then
     Result := False
   else
     Result := True;
 end;


 function SetupCOMPort: Boolean;
 const
   RxBufferSize = 256;
   TxBufferSize = 256;
 var
   DCB: TDCB;
   Config: string;
   CommTimeouts: TCommTimeouts;
 begin
    { We assume that the setup to configure the setup works fine. 
     Otherwise the function returns false. 

     wir gehen davon aus das das Einstellen des COM Ports funktioniert. 
     sollte dies fehlschlagen wird der Ruckgabewert auf "FALSE" gesetzt. 
   }

   Result := True;

   if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
     Result := False;

   if not GetCommState(ComFile, DCB) then
     Result := False;

   // define the baudrate, parity,... 
  // hier die Baudrate, Paritat usw. konfigurieren 

      Config := 'baud=9600 parity=n data=8 stop=1';

   if not BuildCommDCB(@Config[1], DCB) then
     Result := False;

   if not SetCommState(ComFile, DCB) then
     Result := False;

   with CommTimeouts do
   begin
     ReadIntervalTimeout         := 0;
     ReadTotalTimeoutMultiplier  := 0;
     ReadTotalTimeoutConstant    := 1000;
     WriteTotalTimeoutMultiplier := 0;
     WriteTotalTimeoutConstant   := 1000;
   end;

   if not SetCommTimeouts(ComFile, CommTimeouts) then
     Result := False;
 end;


 { 
  The following is an example of using the 'WriteFile' function 
  to write data to the serial port. 

  Folgendes Beispiel verwendet die 'WriteFile' Funktion, um Daten 
  auf den seriellen Port zu schreiben. 
}


 procedure SendText(s: string);
 var
   BytesWritten: DWORD;
 begin
    { 
     Add a word-wrap (#13 + #10) to the string 

     An den ubergebenen String einen Zeilenumbruch (#13 + #10) hangen 
   }
   s := s + #13 + #10;
   WriteFile(ComFile, s[1], Length(s), BytesWritten, nil);
 end;


 { 
  The following is an example of using the 'ReadFile' function to read 
  data from the serial port. 
   
  Folgendes Beispiel verwendet die 'ReadFile' Funktion, um Daten 
  vom seriellen Port zu lesen. 
}


 procedure ReadText: string;
 var
   d: array[1..80] of Char;
   s: string;
   BytesRead, i: Integer;
 begin
   Result := '';
   if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
   begin
     { Raise an exception }
   end;
   s := '';
   for i := 1 to BytesRead do s := s + d[I];
   Result := s;
 end;


 procedure CloseCOMPort;
 begin
   // finally close the COM Port! 
  // nicht vergessen den COM Port wieder zu schliessen! 
  CloseHandle(ComFile);
 end;

Программа на языке Delphi, предназначенная для работы с серийными портами. Код написан на Паскале и использует Win32 API для взаимодействия с портом.

Вот краткое описание функций:

  1. OpenCOMPort: Функция пытается открыть COM1-серийный порт для операций чтения/записи. Возвращает False, если не удалось.
  2. SetupCOMPort: Функция настраивает конфигурацию порта, включая скорость передачи, парность и количество бит данных. Также инициализирует размеры буферов приема и отправки. Если какой-либо из этих шагов не удалось, возвращает False.
  3. SendText: Процедура записывает строку на серийный порт, добавляя символ конца строки (#13 + #10).
  4. ReadText: Процедура читает данные с порта в строку. Вызывает исключение, если операция чтения не удалась.
  5. CloseCOMPort: Процедура закрывает handle порта.

Код включает комментарии на английском и немецком языках, что полезно для разработчиков, которые не являются_native speakers этих языков.

Вот некоторые предложения по улучшению кода:

  1. Обработка ошибок: Код использует простой булевый возвращаемый тип для указания успеха или неудачи. Рассмотрите использование более детализированных сообщений об ошибках или исключений для предоставления лучшего обратного связи.
  2. Портативность: Код предполагает, что COM1-серийный порт будет доступен на всех системах, но это может не быть так. Рассмотрите возможность настройки имени порта или использования более портативной подхода.
  3. Размеры буферов: Код использует фиксированные размеры буферов для приема и отправки данных. Рассмотрите возможность настройки этих размеров или динамического изменения в зависимости от потребностей приложения.
  4. Организация кода: Функции и процедуры тесно связаны, что может сделать код более сложным для поддержки. Рассмотрите разделение задач на различные модули или единицы.

В целом, это хорошо структурированная программа, которая предоставляет хороший фундамент для работы с серийными портами в Delphi. С некоторыми дополнительными улучшениями обработки ошибок и портативности она могла бы быть еще более robust и полезной.

Описывается пример программирования на Delphi для работы с последовательным портом, включающий открытие и настройку порта, отправку и чтение данных.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Порты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-17 20:12:03/0.0038418769836426/0