142 lines
3.0 KiB
ObjectPascal
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.
|