📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, DataCenterXControl_TLB, ExtCtrls, Menus,
SUIButton, ComCtrls, ImgList, Buttons;
type
TForm1 = class(TForm)
Memo1: TMemo;
Timer1: TTimer;
DataCenterX1: TDataCenterX;
MainMenu1: TMainMenu;
MenuSystem: TMenuItem;
MenuStartService: TMenuItem;
MenuStopService: TMenuItem;
MenuExit: TMenuItem;
MenuTest: TMenuItem;
MenuCfgTest: TMenuItem;
MenuStartTest: TMenuItem;
MenuStopTest: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
Panel1: TPanel;
ListView1: TListView;
Splitter1: TSplitter;
ImageList1: TImageList;
ImageList2: TImageList;
GroupBox1: TGroupBox;
btStartService: TsuiButton;
btStopService: TsuiButton;
btStartTest: TsuiButton;
btStopTest: TsuiButton;
GroupBox2: TGroupBox;
Memo2: TMemo;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
DTU1: TMenuItem;
DTU2: TMenuItem;
DTU3: TMenuItem;
N4: TMenuItem;
DTU4: TMenuItem;
DTU5: TMenuItem;
N5: TMenuItem;
DTU6: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
Memo6: TMemo;
Panel2: TPanel;
ComboBox2: TComboBox;
suiButton1: TsuiButton;
Panel3: TPanel;
Edit3: TEdit;
HEX1: TMenuItem;
SpeedButton1: TSpeedButton;
N8: TMenuItem;
N9: TMenuItem;
DTU7: TMenuItem;
procedure DataCenterX1DTULogin(Sender: TObject; const DTUID,
PWD: WideString; Status: Integer);
procedure DataCenterX1DTUData(Sender: TObject; const DTUID: WideString;
DataLen: Integer);
procedure DataCenterX1DTUBeat(Sender: TObject;
const DTUID: WideString);
procedure DataCenterX1DTUDisconnect(Sender: TObject;
const DTUID: WideString);
procedure Timer1Timer(Sender: TObject);
// procedure Button4Click(Sender: TObject);
// procedure Button5Click(Sender: TObject);
procedure DataCenterX1SysError(Sender: TObject; ErrorCode: Integer;
const ErrorMessage, DTUID: WideString);
procedure Button6Click(Sender: TObject);
procedure btStartServiceClick(Sender: TObject);
procedure btStopServiceClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure MenuStopServiceClick(Sender: TObject);
procedure MenuStartServiceClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure suiButton1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure DataCenterX1DTULogout(Sender: TObject;
const DTUID: WideString);
procedure N3Click(Sender: TObject);
procedure MenuExitClick(Sender: TObject);
procedure DTU2Click(Sender: TObject);
procedure DTU3Click(Sender: TObject);
procedure DTU6Click(Sender: TObject);
procedure DTU4Click(Sender: TObject);
procedure DTU5Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure HEX1Click(Sender: TObject);
procedure Memo2Change(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure N9Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ServicePort:integer;
procedure ShowDTUS;
implementation
uses adddtu, remotecfg;
{$R *.dfm}
function strtohex(s:string):integer;
var tmp:string;
i,j,a,b:integer;
begin
if s='' then
begin
result:=0;
exit;
end;
a:=0;
tmp:='0123456789ABCDEF ';
for j:=1 to length(s) do
begin
if s[j]=' ' then s[j]:='0';
i:=1;
while i<=16 do
begin
if tmp[i]=s[j] then
begin
b:=i-1;
break;
end;
i:=i+1;
end;
a:=a*16+b;
end;
result:=a;
end;
function HexToStr(i:integer):string;
var tmp:string;
begin
tmp:='0123456789ABCDEF ';
result:=tmp[(i div 16)+1]+tmp[(i mod 16)+1];
end;
function TextToHexStr(s:string):string;
var i:integer;
ss:string;
begin
ss:='';
for i:=1 to length(s) do
begin
ss:=ss+hextostr(ord(s[i]))+' ';
end;
result:=ss;
end;
procedure showdtu(dtuid:string);
var i:integer;
listitem:tlistitem;
phoneno,protocol,sin_addr,local_addr, logon_time, update_time:widestring;
sin_port,local_port,status1,sendcount,readcount:integer;
begin
with form1 do
begin
for i:=0 to listview1.Items.Count-1 do
begin
if listview1.Items[i].Caption=dtuid then
begin
listitem:=listview1.Items[i];
datacenterx1.GetDTUInfo(dtuid,phoneno,protocol,sin_addr,sin_port,local_addr,local_port
,logon_time,update_time,status1,sendcount,readcount);
if status1=2 then
begin
listview1.items[i].StateIndex:=1;
listview1.items[i].ImageIndex:=0;
listitem.SubItems[0]:=phoneno;
listitem.SubItems[1]:=protocol;
listitem.SubItems[2]:=Local_Addr;
listitem.SubItems[3]:=inttostr(local_port);
listitem.SubItems[4]:=Sin_addr;
listitem.SubItems[5]:=inttostr(sin_port);
listitem.SubItems[6]:=logon_time;
listitem.SubItems[7]:=update_time;
// listitem.SubItems[8]:=inttostr(sendcount);
// listitem.SubItems[9]:=inttostr(readcount);
end;
if status1<>2 then
begin
listview1.items[i].StateIndex:=0;
listview1.items[i].ImageIndex:=-1;
listitem.SubItems[0]:='';
listitem.SubItems[1]:='';
listitem.SubItems[2]:='';
listitem.SubItems[3]:='';
listitem.SubItems[4]:='';
listitem.SubItems[5]:='';
listitem.SubItems[6]:='';
listitem.SubItems[7]:='';
listitem.SubItems[8]:='';
listitem.SubItems[9]:='';
end;
break;
end;
end;
end;
end;
procedure TForm1.DataCenterX1DTULogin(Sender: TObject; const DTUID,
PWD: WideString; Status: Integer);
begin
case status of
0: memo1.lines.Add(datetimetostr(now)+' '+'收到登录包,dtuid='+dtuid+','+'密码='+pwd+','+'登录成功');
-1: memo1.lines.Add(datetimetostr(now)+' '+'收到登录包,dtuid='+dtuid+','+'密码='+pwd+','+'登录失败,密码错误');
-2: memo1.lines.Add(datetimetostr(now)+' '+'收到登录包,dtuid='+dtuid+','+'密码='+pwd+','+'登录失败,DTUID非法');
end;
showdtu(dtuid);
end;
procedure TForm1.DataCenterX1DTUData(Sender: TObject;
const DTUID: WideString; DataLen: Integer);
var ws:widestring;
i:integer;
listitem:tlistitem;
s,hexstr:string;
p:pchar;
begin
setlength(ws,datalen);
datacenterx1.ReadData(dtuid,ws,datalen);
p:=@ws[1];
s:='';
for i:=1 to DataLen do s:=s+p[i-1];
if hex1.Checked then hexstr:=' {HEX:'+texttohexstr(s)+'}';
memo1.lines.Add(datetimetostr(now)+' '+'收到数据包,dtuid='+dtuid+','+'数据内容:'+hexstr+s);
for i:=0 to listview1.Items.Count-1 do
begin
if listview1.Items[i].Caption=dtuid then
begin
listitem:=listview1.Items[i];
listitem.ImageIndex:=1;
if listitem.SubItems[9]='' then listitem.SubItems[9]:='0';
listitem.SubItems[9]:= inttostr(strtoint(listitem.SubItems[9])+DataLen);
break;
end;
end;
end;
procedure TForm1.DataCenterX1DTUBeat(Sender: TObject;
const DTUID: WideString);
var i:integer;
listitem:tlistitem;
begin
memo1.lines.Add(datetimetostr(now)+' '+'收到心跳包,dtuid='+dtuid);
showdtu(dtuid);
for i:=0 to listview1.Items.Count-1 do
begin
if listview1.Items[i].Caption=dtuid then
begin
listitem:=listview1.Items[i];
listitem.ImageIndex:=3;
break;
end;
end;
end;
procedure TForm1.DataCenterX1DTUDisconnect(Sender: TObject;
const DTUID: WideString);
var i:integer;
listitem:tlistitem;
begin
memo1.lines.Add(datetimetostr(now)+' TCP连接断开,dtuid='+dtuid);
showdtu(dtuid);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i,count:integer;
dtuid:string;
databuf:widestring;
datalen:integer;
listitem:tlistitem;
begin
if listview1=nil then exit;
if datacenterx1=nil then exit;
if memo1=nil then exit;
if form1=nil then exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -