Ребята мне очень нужна ваша помощь!
Надо комментировать текст программу, если кто то что то знаеть пишите пожалуйста!! !
Спасибо всем заранее!! !
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
f : TextFile;
FileName : String;
Dcb : TDcb;
dwWrite, dwRead : DWord;
OverWrite, OverRead : TOVerlapped;
i: byte;
tstart,tfinish,freq:int64;
tread:extended;
time:Cardinal;
Buf : char;
begin
if(ComPort.Text='') then
begin
Memo1.Lines.Add('Не выбран Com порт! ');
end
else
begin
{Opening file}
FileName:='log.txt';
AssignFile(f, FileName);
if not FileExists(FileName) then
begin
Rewrite(f);
CloseFile(f);
end;
Append(f);
{Opening the port}
hPort:= CreateFile(PChar(ComPort.Text), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if hPort = INVALID_HANDLE_VALUE then
raise Exception.Create('Ошибка при открытии порта');
{Setting parameters}
if not GetCommState(hPort, Dcb) then
raise Exception.Create('Ошибка при получении состояния порта');
Dcb.BaudRate:=StrToInt(Speed.Text);
if (Cparity.Text)='Чётность' then
Dcb.Parity:= EVENPARITY;
if (Cparity.Text)='Нечётность' then
Dcb.Parity:= ODDPARITY;
if (Cparity.Text)='Без контроля' then
Dcb.Parity:= NOPARITY;
Dcb.ByteSize:= 8;
if(StopB.Text='1') then
Dcb.StopBits:=ONESTOPBIT;
if(StopB.Text='1.5') then
Dcb.StopBits:=ONE5STOPBITS;
if(StopB.Text='2') then
Dcb.StopBits:=TWOSTOPBITS;
if not SetCommState(hPort, Dcb) then
raise Exception.Create('Ошибка при установке параметров порта');
{Purging the port}
if not PurgeComm(hPort, PURGE_TXCLEAR or PURGE_RXCLEAR) then
raise Exception.Create('Ошибка при сбросе порта');
if not SetCommMask(hPort, EV_RXCHAR) then
raise Exception.Create('Ошибка при установке маски');
if Frac(12.0/StrToInt(Speed.Text)*1000)<>0.0 then
time:=Trunc(12.0/StrToInt(Speed.Text)*1000)+1 else
time:=Trunc(12.0/StrToInt(Speed.Text)*1000);
{Transfering data}
for i:= StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do
begin
OverWrite.hEvent := CreateEvent(nil, True, False, nil);
if Overwrite.hEvent = Null then
raise Exception.Create('Ошибка при подготовке к записи');
{Sending byte, Read byte and time checking}
QueryPerformanceCounter(tstart);
WriteFile(hPort, i, SizeOf(i), dwWrite, @OverWrite);
Sleep(time);
ReadFile (hPort, Buf, dwRead, dwRead, @OverRead);
QueryPerformanceCounter(tfinish);
QueryPerformanceFrequency(freq);
tread:=(tfinish-tstart)/(freq);
Memo1.Lines.Add(chr(i) + ' отправлено');
Writeln(f,chr(i)+ ' отправлено');
Memo1.Lines.Add(Buf +' получено, время передачи: '+FloatToStr(tread)+' с');
Writeln(f, Buf + ' получено, время передачи: '+FloatToStr(tread)+' с');
if(Buf=Chr(i)) then
begin
Memo1.Lines.Add('OK');
Writeln(f,'OK');
end
else
begin
Memo1.Lines.Add('Error');
Writeln(f,'Error');
end;
end;
{Closing the port}
CloseHandle(hPort);
CloseFile(f);
Memo1.Lines.Add('Тест окончен');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin {опрос существующих портов}
for i := 0 to 31 do {цикл опроса}
begin {пробуем получить дескриптор порта}
FHandl := CreateFile(PChar('COM' + IntToStr(i + 1)),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if FHandl <> INVALID_HANDLE_VALUE then {если порт есть то добавить в список}
ComPort.Items.Add('COM' + IntToStr(i + 1));
CloseHandle(FHandl); {закрыть дескриптор}
end;
StopB.Items.Add('1');
StopB.Items.Add('1.5');
StopB.Items.Add('2');
Cparity.Items.Add('Чётность');
Cparity.Items.Add('Нечётность');
Cparity.Items.Add('Без контроля');
end;
end.