⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 GPRS/CDMA DTU数据中心源代码,基于DataCenterX控件开发.
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
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 + -