D7wmleixiaofu/码表/U_JcyData.pas
DESKTOP-E401PHE\Administrator c446a0860f ~
2025-04-30 16:04:42 +08:00

142 lines
3.0 KiB
ObjectPascal

unit U_JcyData;
interface
uses
SysUtils,Windows,forms,Spcomm, shlobj,ExtCtrls,MSCommLib_TLB;
type
TEventHandlers = class(TForm) { 建一个虚拟类}
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure Timer1Timer(Sender: TObject);
end;
var
EvHandler:TEventHandlers;
Comm1:TComm;
MSComm1: TMSComm;
time2:TTimer;
sReceiveData:string;
mhandle:hwnd;
function SendString(str: string):integer;
function CommOpen(fhandle:hwnd;sCommName:PAnsiChar;
IntTime:integer):integer;export;stdcall;
function CommClose(sCommName:PAnsiChar):integer;export;stdcall;
CONST
sendml='55AA02000001';
IsRecHex=1;
implementation
uses U_HexFunction;
function CommClose(sCommName:PAnsiChar):integer;export;stdcall;
begin
if Comm1<>nil then
begin
Comm1.StopComm;
Comm1.Free;
time2.Free;
end;
end;
procedure TEventHandlers.Timer1Timer(Sender: TObject);
var
str1,str2:string;
begin
try
SendString(sendml);
except
end;
end;
procedure TEventHandlers.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var str :string;
str1,str2:string;
i1,i2:integer;
begin
try
SetLength(Str,BufferLength);
move(buffer^,pchar(@Str[1])^,bufferlength);
IF IsRecHex=1 THEN
sReceiveData:=StrToHexStr(Str)
else
sReceiveData:=Str;
if (length(sReceiveData)=24) and (trim(Copy(sReceiveData,1,4))='55AA') then
begin
str1:=trim(Copy(sReceiveData,9,2));
str2:=trim(Copy(sReceiveData,11,6));
if IsRecHex=1 THEN
begin
i1:= hextoint16(str1);
i2:= hextoint16(str2);
end
else
begin
i1:= trunc(hextoint10(str1));
i2:= trunc(hextoint10(str2));
end;
postmessage(mhandle,1201,I1,I2);
// PurgeComm(Comm1.Handle, PURGE_RXCLEAR );//清除发送缓冲区
// PurgeComm(Comm1.Handle,PURGE_TXCLEAR );//清除发送缓冲区
end
else
begin
end;
except
end;
end;
function SendString(str: string):integer;
var
str1:string;
begin
result:=0;
try
IF IsRecHex=1 then
str1:= HexStrToStr(str)
else
str1:= str;
Comm1.WriteCommData(Pchar(str1),Length(str1));
result:=1;
except
end;
end;
function CommOpen(fhandle:hwnd;sCommName:PAnsiChar;
IntTime:integer):integer;export;stdcall;
begin
result:=0;
try
mhandle:= fhandle;
Comm1:=TComm.Create(Application);
Time2:=TTimer.Create(Application);
// MSComm1:=TMSComm.Create(self);
Comm1.CommName:=trim(sCommName);
Comm1.BaudRate:= 19200;
Comm1.Parity:=TParity(0);
Comm1.ByteSize:= TByteSize(3);
Comm1.StopBits:= TStopBits(0);
Comm1.Outx_XonXoffFlow:=false;
Comm1.Inx_XonXoffFlow:=false;
Comm1.OnReceiveData:=EvHandler.Comm1ReceiveData;
Comm1.StartComm;
time2.Enabled:=false;
time2.Interval:=IntTime;
time2.OnTimer:= EvHandler.Timer1Timer;
time2.Enabled:=true;
result:=1;
except
Comm1.free;
Time2.Free;
end;
end;
end.