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

📄 main.~pas

📁 GPRS/CDMA DTU数据中心源代码,基于DataCenterX控件开发.
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, DataCenterXControl_TLB, ExtCtrls, Menus,
  SUIButton, ComCtrls, ImgList, Buttons, WinSkinData;

type
  TfrmMain = class(TForm)
    Memo1: TMemo;
    Timer1: TTimer;
    DataCenterX1: TDataCenterX;
    MainMenu1: TMainMenu;
    MenuSystem: TMenuItem;
    MenuStartService: TMenuItem;
    MenuStopService: TMenuItem;
    MenuExit: TMenuItem;
    MenuTest: 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;
    DTUMan: TMenuItem;
    ADDDTU: TMenuItem;
    DELDTU: TMenuItem;
    N4: TMenuItem;
    CLOSEDTU: TMenuItem;
    CLOSEALLDTU: TMenuItem;
    N5: TMenuItem;
    DELALLDTU: TMenuItem;
    N6: TMenuItem;
    DATACLEAR: TMenuItem;
    Memo6: TMemo;
    Panel2: TPanel;
    ComboBox2: TComboBox;
    suiButton1: TsuiButton;
    Panel3: TPanel;
    Edit3: TEdit;
    HEX1: TMenuItem;
    SpeedButton1: TSpeedButton;
    N8: TMenuItem;
    N9: TMenuItem;
    DTU7: TMenuItem;
    N10: TMenuItem;
    N13: TMenuItem;
    NDataTip: TMenuItem;
    N16: TMenuItem;
    DTU1: TMenuItem;
    N7: TMenuItem;
    DTU2: TMenuItem;
    DTU3: TMenuItem;
    N11: TMenuItem;
    GroupBox3: TGroupBox;
    ckcom1: TCheckBox;
    ckcom2: TCheckBox;
    SkinData1: TSkinData;
    N12: TMenuItem;
    N14: TMenuItem;
    PINGDTU1: 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 ADDDTUClick(Sender: TObject);
    procedure DELDTUClick(Sender: TObject);
    procedure DELALLDTUClick(Sender: TObject);
    procedure CLOSEDTUClick(Sender: TObject);
    procedure CLOSEALLDTUClick(Sender: TObject);
    procedure DATACLEARClick(Sender: TObject);
    procedure HEX1Click(Sender: TObject);
    procedure Memo2Change(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure DTU7Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure NDataTipClick(Sender: TObject);
    procedure Memo2KeyPress(Sender: TObject; var Key: Char);
    procedure N16Click(Sender: TObject);
    procedure DataCenterX1DTUDataX(Sender: TObject;
      const DTUID: WideString; DataLen: Integer;
      const DataBuf: WideString);
    procedure DataCenterX1DTUAlarm(Sender: TObject;
      const DTUID: WideString; AlarmCode: Integer);
    procedure DTU1Click(Sender: TObject);
    procedure DTU2Click(Sender: TObject);
    procedure DTU3Click(Sender: TObject);
    procedure DataCenterX1DTUData2(Sender: TObject;
      const DTUID: WideString; DataLen: Integer);
    procedure N12Click(Sender: TObject);
    procedure PINGDTU1Click(Sender: TObject);
    procedure DataCenterX1PingResult(Sender: TObject;
      const DTUID: WideString; Result: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;
  ServicePort:integer;
  procedure ShowDTUS;
  function DllRegisterServer:integer ; stdcall external 'DataCenterXControl.ocx';
  function TextToHexStr(s:string):string;      
implementation

uses adddtu, remotecfg, remoteupgrade, filetest;

{$R *.dfm}
function strtohex(s:string):integer;
var tmp:string;
    i,j,a,b:integer;
begin
  if s='' then
  begin
    result:=0;
    exit;
  end;

  s:=uppercase(s);
  
  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 frmMain 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 TfrmMain.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 TfrmMain.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)+'}';
  if NDataTip.Checked  then  memo1.lines.Add(datetimetostr(now)+' '+'收到DTU串口1数据包,dtuid='+dtuid+','+'数据内容:'+hexstr+s)
  else memo1.lines.Add(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;

  if frmfiletest.CheckBox1.Checked then
  begin
    PackLen:=DataLen;
    for i:=1 to length(s) do  EEPROMVM[i]:=ord(s[i]);
    BlockWrite(DataFileRecv,EEPROMVM,PackLen,WriteLen);
  end;
end;

procedure TfrmMain.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 TfrmMain.DataCenterX1DTUDisconnect(Sender: TObject;
  const DTUID: WideString);
var i:integer;
    listitem:tlistitem;
begin
  memo1.lines.Add(datetimetostr(now)+' TCP连接断开,dtuid='+dtuid);
  showdtu(dtuid);
end;

procedure TfrmMain.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 frmMain=nil then exit;

  for i:=0 to listview1.Items.Count-1 do
  begin
       listitem:=listview1.Items[i];
       if listitem.StateIndex=1 then   //已经登陆后
       begin
         if listitem.imageindex<>4 then
         begin
             listitem.ImageIndex:=0;
         end;
       end;
  end;
end;

procedure TfrmMain.DataCenterX1SysError(Sender: TObject; ErrorCode: Integer;
  const ErrorMessage, DTUID: WideString);
begin
  memo1.Lines.Add(datetimetostr(now)+'  系统错误:dtuid='+dtuid+',错误消息='+errormessage);
end;

procedure TfrmMain.Button6Click(Sender: TObject);
begin
 datacenterx1.DeleteAllDTU;
 datacenterx1.AddDTU('zsgprs01','123456');
 datacenterx1.AddDTU('zsgprs02','123456');
 datacenterx1.AddDTU('zsgprs03','123456');
end;

procedure TfrmMain.btStartServiceClick(Sender: TObject);
var i,j:integer;
begin
try
 i:=datacenterx1.StartService(serviceport);
 if i=-1 then
 begin
    j:=datacenterx1.GetLastError;
    memo1.Lines.Add(datetimetostr(now)+' 服务启动失败');
    exit;
 end;
 timer1.Enabled:=true;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -