Компонент для последовательного устройства (TRS232)
|
Просыпается программист с большого бодуна, поворачивается, а рядом какая-то девушка лежит.
- Ooрs, обнаружено новое устройство...
|
Компонент, который представлен здесь, выполняет функции синхронного чтения и записи в последовательный интерфейс RS232.
В цикле выполняется Application.ProcessMessages, чтобы все сообщения от основной программы обрабатывались.
Ниже приведён метод ReadString из компонента TRS323:
function TRS232.ReadString(var aResStr: string; aCount: word ): boolean;
var
nRead: dword;
Buffer: string;
Actual, Before: TDateTime;
TimeOutMin, TimeOutSec, lCount: word;
begin
Result := false;
if not Connected then
if not Connect then
raise Exception.CreateHelp('RS232.ReadString:' +
' Connect not possible !', 101);
aResStr := '';
TimeOutMin:=TimeOut div 60;
TimeOutSec:=TimeOut mod 60;
if (not Connected) or (aCount <= 0) then
EXIT;
nRead := 0; lCount := 0;
Before := Time;
while lCount < ACOUNT do
begin
Application.ProcessMessages;
SetLength(Buffer,1);
if ReadFile( FComPortHandle, PChar(Buffer)^, 1, nRead, nil) then
begin
if nRead > 0 then
begin
aResStr := aResStr + Buffer;
inc(lCount);
end;
Actual := Time;
if Actual-Before>EncodeTime(0, TimeOutMin, TimeOutSec, 0) then
raise Exception.CreateHelp('RS232.ReadString: TimeOut !', 103);
end
else
begin
raise Exception.CreateHelp('RS232.ReadString: Read not possible !', 104);
end;
end;
Result:=true;
end;
|
|