![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Читать и писать в последовательный портDelphi , Файловая система , ПортыЧитать и писать в последовательный порт
Оформил: DeeCo 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 для взаимодействия с портом. Вот краткое описание функций:
Код включает комментарии на английском и немецком языках, что полезно для разработчиков, которые не являются_native speakers этих языков. Вот некоторые предложения по улучшению кода:
В целом, это хорошо структурированная программа, которая предоставляет хороший фундамент для работы с серийными портами в Delphi. С некоторыми дополнительными улучшениями обработки ошибок и портативности она могла бы быть еще более robust и полезной. Описывается пример программирования на Delphi для работы с последовательным портом, включающий открытие и настройку порта, отправку и чтение данных. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |