unit U_DataModule_COM; interface uses SysUtils, Classes, SPComm, ExtCtrls,strUtils,shlobj,Windows; var sReceiveData:string; mhandle:hwnd; fhNum1:double; fhnum2:double; type TDataModule_COM = class(TDataModule) Comm1: TComm; Timer1: TTimer; procedure DataModuleDestroy(Sender: TObject); procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); private { Private declarations } public { Public declarations } end; CONST IsRecHex=1; var DataModule_COM: TDataModule_COM; implementation uses U_HexFunction; {$R *.dfm} procedure TDataModule_COM.DataModuleDestroy(Sender: TObject); begin DataModule_COM:=nil; end; procedure TDataModule_COM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var str :string; str1,str2:string; i1,i2:integer; num1,num2:integer; fRate,aaa:double; begin try SetLength(Str,BufferLength); move(buffer^,pchar(@Str[1])^,bufferlength); IF IsRecHex=1 THEN sReceiveData:=trim(StrToHexStr(Str)) else sReceiveData:=trim(Str); IF length(trim(sReceiveData))>=14 then begin str1:=Copy(sReceiveData,1,12); fhNum1:=strtofloat(HexStrToStr(str1)); num1:=strtoint(floattostr(fhNum1*100000)); str1:=Copy(sReceiveData,15,2); IF str1='4D' then num2:=0 else num2:=1; postmessage(mhandle,1301,num1,num2); end; except end; end; end.