Компонент для работы с COM-портом из среды Delphi

Компонент для работы с COM-портом из среды Delphi

Компонент предназначен для простой работы с последовательными портами систем WinNT.

Скачать весь zip-архив с компонентом.

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

Для работы с компонентом без установки нужно сделать несколько простых вещей:

1. Скопировать модуль Comm32.pas или Comm32.dcu в каталог, где его найдет компилятор

2. Записать его в Uses:

uses Comm32, Classes, ExtCtrls, Forms,......

3. Объявить переменную для ссылки на объект класса. Следим за тем, чтобы эта переменная была доступна из всех мест, где мы будем использовать работу с портом:

var Cm:TComm32;

4. Создать объект класса TComm32. Сделать это можно при создании формы, или непосредственно перед работой программы. Главное, чтобы в момент открытия порта мы уже имели переменную, в которой содержалась бы ссылка на созданный объект:

    Cm := TComm32.Create(AOwner);
5. Прописать параметры открываемого порта. Здесь надо отметить один важный момент для систем класса NT: порты с номерами до 9 имеют особый статус, и могут быть открыты по имени вида «COMn», несмотря на то, что правильная ссылка на порт выглядит как «\\.\COMn». Для того, чтобы избавить себя от лишних проблем с открытием портов, лучше использовать второй вариант. Итак, пропишем:
        Cm.CommPort := '\\.\'+FPort;
        Cm.BaudRate := InitSpeed;
        Cm.ByteSize := sz_7;
        Cm.Parity := pEven;
        Cm.StopBits := sb2_0;
        Cm.ClearTxBuffer;
        Cm.ClearRxBuffer;

6. Создать процедуру, которая будет принимать в себя пришедшие независимо от нас данные:

procedure TForm1.OnRecieveData(Buffer : pointer; BuffSize : Word);

естественно, прописав ее, при необходимости, в описании класса, внутри которого мы будем работать:

TForm1 = class(TObject)
private
...............
    procedure OnRecieveData(Buffer : pointer; BuffSize : Word);
...............
public
...............
end;
7. И указать, что именно эта процедура должна принимать в себя данные, которые придут по порту:
Cm.OnReceiveData := OnRecieveData;

8. Теперь нужно просто попытаться открыть порт. В случае, если это не получится, надо отловить исключение:

        try
        	Cm.StartComm;
        except
		// тут будем делать то, что подобает, если не получилось открыть порт.
        end;

Вот и все. Можно начинать передавать данные:

Cm.WriteCommData(p,length(s));

Принятые же данные придут в OnRecieveData, на них будет ссылаться указатель Buffer. Данных будет в количестве, указанном в BuffSize.

remix

Оставить отклик

Ваш адрес эл.почты не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.