📄 tcpmod.pas
字号:
unit TcpMod;
interface
uses
SysUtils, Classes, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient,Dialogs,record_define, DB, ADODB,Term,windows, IdUDPBase,
IdUDPServer,IdSocketHandle;
type
TClientHandleThread = class(TThread)
private
CB: TCommBlock;
procedure HandleInput;
protected
procedure Execute; override;
end;
type
TTcpModule = class(TDataModule)
IdTCPClient1: TIdTCPClient;
ADOQuery1: TADOQuery;
ADOStoredProc1: TADOStoredProc;
ADOConnection1: TADOConnection;
IdUDPServer1: TIdUDPServer;
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
ClientHandleThread: TClientHandleThread;
procedure Tcp_connect;
procedure Tcp_disconnect;
procedure refresh;
procedure ADOinit(ADOStoredProc1: TADOStoredProc);
procedure send_data(buf:array of char;data_len:byte);
end;
function refresh_opera:integer;stdcall;
var
TcpModule: TTcpModule;
implementation
uses Unit1, Unit3;
{$R *.dfm}
{ TTcpModule }
procedure TTcpModule.Tcp_connect;
begin
try
self.IdTCPClient1.Connect(10000);
ClientHandleThread := TClientHandleThread.Create(True);
ClientHandleThread.FreeOnTerminate:=True;
ClientHandleThread.Resume;
except
//on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
end;
end;
procedure TTcpModule.Tcp_disconnect;
begin
try
ClientHandleThread.Terminate;
IdTCPClient1.Disconnect;
except
end;
end;
procedure TClientHandleThread.HandleInput;
var
str:string;
begin
char_to_str(cb.tcp_data,cb.data_long,str);
if form3_show then
form3.Memo1.Lines.Add(str);
//insert_blank(str);
//showmessage(str);
mainform.term_set.deal_data(cb.tcp_data,cb.data_long);
end;
procedure TClientHandleThread.Execute;
var
i:integer;
begin
while not Terminated do
begin
if not TcpModule.IdTCPClient1.Connected then
Terminate
else
try
TcpModule.IdTCPClient1.ReadBuffer(cb,sizeof(cb));
Synchronize(HandleInput);
except
end;
end;
end;
procedure TTcpModule.DataModuleCreate(Sender: TObject);
var
connect_file:textfile;
connect_str:string;
begin
assignfile(connect_file,'connect.ini');
Reset(connect_file);
readln(connect_file,connect_str);
closefile(connect_file);
ADOQuery1.ConnectionString:=connect_str;
self.ADOConnection1.ConnectionString:=connect_str;
//040518修改
//Tcp_connect;
end;
procedure TTcpModule.DataModuleDestroy(Sender: TObject);
begin
//040518修改
//Tcp_disconnect;
end;
procedure TTcpModule.refresh;
var
hThread:Thandle;
ThreadID:DWord;
begin
//创建线程,同时线程函数被调用
hthread:=CreateThread(nil,0,@refresh_opera,nil,0,ThreadID);
if hThread=0 then
showmessage('创建线程失败');
end;
function refresh_opera:integer;stdcall;
var
sql_str:string;
i,gprs_id:integer;
term_id:byte;
term_obj:TTerm;
begin
with mainform.term_set.members do
begin
for i:=0 to Count-1 do
TTerm(items[i]).worked:=false;
end;
sql_str:='select * from vterminfo';
with TcpModule do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sql_str);
ADOQuery1.Open;
ADOQuery1.First;
for i:=0 to ADOQuery1.RecordCount-1 do
begin
//term_obj:=TTerm.Create;
gprs_id:=ADOQuery1.FieldByName('GPRS_ID').AsInteger;
term_id:=ADOQuery1.FieldByName('TER_ID').AsInteger;
term_obj:=mainform.term_set.find_term(gprs_id,term_id);
if term_obj=nil then
begin
term_obj:=TTerm.Create;
term_obj.gprs_id:=ADOQuery1.FieldByName('GPRS_ID').AsInteger;
term_obj.term_id:=ADOQuery1.FieldByName('TER_ID').AsInteger;
term_obj.app_id:=ADOQuery1.FieldByName('APP_ID').AsInteger;
term_obj.well_id:=ADOQuery1.FieldByName('WELL_ID').AsInteger;
term_obj.summit_type:=ADOQuery1.FieldByName('SUMMIT_TYPE').AsInteger;
term_obj.collect_inteval:=ADOQuery1.FieldByName('COLLECT_INTERVAL').AsInteger;
term_obj.packet_inteval:=ADOQuery1.FieldByName('SUMMIT_INTERVAL').AsInteger;
term_obj.remedy_count_max:=ADOQuery1.FieldByName('REMEDY_COUNT').AsInteger;
if term_obj.summit_type=TEMP_SUMMIT then
term_obj.second_count:=term_obj.collect_inteval
else
term_obj.second_count:=term_obj.packet_inteval;
term_obj.remedy_cound:=0;
term_obj.remedy_interval:=REMEDY_SECOND;
term_obj.worked:=true;
term_obj.obtained:=true;
mainform.term_set.members.Add(term_obj);
end
else
begin
term_obj.app_id:=ADOQuery1.FieldByName('APP_ID').AsInteger;
term_obj.well_id:=ADOQuery1.FieldByName('WELL_ID').AsInteger;
term_obj.summit_type:=ADOQuery1.FieldByName('SUMMIT_TYPE').AsInteger;
term_obj.collect_inteval:=ADOQuery1.FieldByName('COLLECT_INTERVAL').AsInteger;
term_obj.packet_inteval:=ADOQuery1.FieldByName('SUMMIT_INTERVAL').AsInteger;
term_obj.remedy_count_max:=ADOQuery1.FieldByName('REMEDY_COUNT').AsInteger;
term_obj.worked:=true;
end;
ADOQuery1.Next;
end;
ADOQuery1.Close;
end;
i:=0;
with mainform.term_set.members do
begin
while i<count do
begin
if TTerm(items[i]).worked=false then
begin
Remove(items[i]);
i:=i-1;
end;
i:=i+1;
end;
end;
//form3.add_term_to_listview;
end;
procedure TTcpModule.ADOinit(ADOStoredProc1: TADOStoredProc);
var
para:TParameter;
i:integer;
connect_file:textfile;
connect_str:string;
begin
ADOStoredProc1.Parameters.Clear;
para:=ADOStoredProc1.Parameters.AddParameter;
para.Name:='APP_ID';
para.DataType:=ftInteger;
para:=ADOStoredProc1.Parameters.AddParameter;
para.Name:='WELL_ID';
para.DataType:=ftInteger;
para:=ADOStoredProc1.Parameters.AddParameter;
para.Name:='COLLECT_TIME';
para.DataType:=ftDateTime;
para:=ADOStoredProc1.Parameters.AddParameter;
para.Name:='DATA_COUNT';
para.DataType:=ftDateTime;
for i:=1 to 32 do
begin
para:=ADOStoredProc1.Parameters.AddParameter;
para.Name:='DATA'+inttostr(i);
para.DataType:=ftInteger;
end;
ADOStoredProc1.ProcedureName:='DATA_CALC';
assignfile(connect_file,'connect.ini');
Reset(connect_file);
readln(connect_file,connect_str);
//readln(connect_file,proc_name_str);
closefile(connect_file);
ADOStoredProc1.ConnectionString:=connect_str;
end;
procedure TTcpModule.send_data(buf: array of char; data_len: byte);
begin
self.IdUDPServer1.SendBuffer('10.70.18.7',6868,buf,data_len);
end;
procedure TTcpModule.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
str:string;
buf: array [0..255] of char;
data_len,i: byte;
begin
AData.Read(buf,AData.Size);
data_len:=AData.Size;
{char_to_str(buf,data_len,str);
if form3_show then
form3.Memo1.Lines.Add(str);}
mainform.term_set.deal_data(buf,data_len);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -