/
harryd61
/
cub
Обзор
Документация
Войти
/
harryd61
/
cub
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Comm.pas
92 строки
2 KB
harryd61
first_commit
06 авг 2024, 13:09
06 авг 2024, 13:09
6a14989
Код
Авторство
О чём код?
unit Comm; interface uses windows,sysutils; var CommHandle : integer; DCB : TDCB; Ovr : TOverlapped; Stat : TComStat; CommThread : THandle; hEvent : THandle; Flag,StopResive : boolean; KolByte,Kols,Mask,TransMask,Errs : DWord; procedure PortInit; function ReadComm:string; procedure WriteComm(A:byte); procedure KillComm; implementation procedure KillComm; begin TerminateThread(CommThread,0); CloseHandle(CommHandle); end; procedure WriteComm(A:byte); var Transmit:array [0..255] of char; begin //������� ���� ������ � ���� KolByte:=5; Transmit[0]:=#02; Transmit[0]:=#67; Transmit[0]:=#03; Transmit[0]:=#13; Transmit[0]:=#10; WriteFile(CommHandle,Transmit,KolByte,KolByte,@Ovr); end; function ReadComm:string; var Resive:array [0..255] of char; begin while true do begin TransMask:=0; WaitCommEvent(CommHandle,TransMask,@Ovr); //���� if (TransMask and EV_RXFLAG)=EV_RXFLAG then //��������� ������ ������� begin ClearCommError(CommHandle,Errs,@Stat);//���������� ���� Kols := Stat.cbInQue; ReadFile(CommHandle,Resive,Kols,Kols,@Ovr);//������ //��� ������ ���� ��������� �������� ���������� �� Resive // Form1.mmo1.Lines.Add(string(Resive)); //�� ����� ������� ������� ������, �� ��� ������� �������� Result:=string(Resive); end;//mask end;//while end; procedure PortInit; var ThreadID:dword; begin //�������� � ������������ ����� KolByte:=0; //�������� ����� � ��������� ��� ������ CommHandle := CreateFile('COM4',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0); //������ ����� - "�� ���������� ������������� �������" SetCommMask(CommHandle,EV_RXFLAG); //���������� DCB GetCommState(CommHandle,DCB); DCB.BaudRate:=CBR_9600; DCB.Parity:=NOPARITY; DCB.ByteSize:=8; DCB.StopBits:=OneStopBit; DCB.EvtChar:=chr(10);//������� ������� ��� ����� //������������� DCB SetCommState(CommHandle,DCB); //������� ����������� ����� //��� ����� ��������� ��������� ������ ������ //� ����� - ReadComm CommThread := CreateThread(nil,0,@ReadComm,nil,0,ThreadID); end; end.