Компонент для работы с 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);
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;
Cm.OnReceiveData := OnRecieveData;
8. Теперь нужно просто попытаться открыть порт. В случае, если это не получится, надо отловить исключение:
try Cm.StartComm; except
// тут будем делать то, что подобает, если не получилось открыть порт. end;
Вот и все. Можно начинать передавать данные:
Cm.WriteCommData(p,length(s));
Принятые же данные придут в OnRecieveData, на них будет ссылаться указатель Buffer. Данных будет в количестве, указанном в BuffSize.