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

📄 main.~pas

📁 GPRS/CDMA DTU数据中心源代码,基于DataCenterX控件开发.
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
 btstartservice.Enabled:=false;
 btstopservice.Enabled:=true;
 menustartservice.Enabled:=false;
 menustopservice.Enabled:=true;
 timer1.Enabled:=true;
 if i=0 then memo1.Lines.Add(datetimetostr(now)+' 服务启动成功,服务端口号='+inttostr(serviceport))
 else memo1.Lines.Add(datetimetostr(now)+' 服务启动失败');
except
 memo1.Lines.Add(datetimetostr(now)+' 服务启动失败');
end;
end;

procedure TfrmMain.btStopServiceClick(Sender: TObject);
begin
 datacenterx1.CloseAllDTU(0); 
 datacenterx1.StopService;
 timer1.Enabled:=false;
 btstartservice.Enabled:=true;
 btstopservice.Enabled:=false;
 menustartservice.Enabled:=true;
 menustopservice.Enabled:=false;
 memo1.Lines.Add(datetimetostr(now)+' 服务停止');
end;

procedure ShowDTUS;
var i,j:integer;
   listitem:tlistitem;
begin
 with frmMain do
 begin
   listview1.Clear;
   for i:=0 to datacenterx1.GetDTUCount-1 do
   begin
     listitem:=listview1.Items.Add;
     listitem.StateIndex:=0; listitem.ImageIndex:=-1;
     for j:=1 to 10 do listitem.SubItems.add('');
     listitem.Caption:=datacenterx1.GetDTUIDByPos(i);

     showdtu(datacenterx1.GetDTUIDByPos(i));
   end;
 end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
var listitem:tlistitem;
begin
 serviceport:=65000;
 datacenterx1.Init;
 datacenterx1.DeleteAllDTU;

 datacenterx1.AddDTU('zsgprs01','123456');
 datacenterx1.AddDTU('zsgprs02','123456');
 datacenterx1.AddDTU('zsgprs03','123456');

 ShowDTUS();
 btStartServiceClick(sender); 
end;

procedure TfrmMain.MenuStopServiceClick(Sender: TObject);
begin
 btStopServiceClick(sender);
end;

procedure TfrmMain.MenuStartServiceClick(Sender: TObject);
begin
 btStartServiceClick(sender);
end;

procedure TfrmMain.FormActivate(Sender: TObject);
begin
// if btStartService.Enabled=true then btStartServiceClick(sender);
end;
{
procedure TfrmMain.suiButton1Click(Sender: TObject);
var i,j:integer;
    listitem:tlistitem;
    dtuid,hexstr:string;
    s:string;
    ws:widestring;
    p:pchar;
    ret,k:integer;
begin

  if listview1.SelCount=0 then
  begin
    showmessage('请选中接收数据的DTU');
    exit;
  end;

    for i:=0 to listview1.Items.Count-1 do
    begin
       if i>=listview1.Items.Count then break;
       listitem:=listview1.Items[i];
       if listitem.Selected=false then continue;

       if listitem.StateIndex=1 then
       begin
         s:=memo2.text;
         if hex1.Checked then
         begin
             s:='';
             for k:=1 to (length(memo2.text) div 2) do
             begin
               s:=s+chr(strtohex(copy(memo2.text,(k-1)*2+1,2)));
             end;
         end;

         if s='' then exit;

         DTUID:=listitem.Caption;


         for j:=1 to strtoint(combobox2.text) do
         begin
           if i>=listview1.Items.Count then
           begin
             memo1.lines.add('发送中断,DTU不存在');
             break;
           end;
           setlength(ws,length(s));
           p:=@ws[1];
           for k:=1 to  length(s) do p[k-1]:=s[k];

           if ckcom1.Checked  then
           begin
            if hex1.Checked then hexstr:=' [HEX:'+texttohexstr(s)+']';
            if ndatatip.Checked then   memo1.lines.add(datetimetostr(now)+' 发送数据到'+ DTUID+'的COM1,数据内容:'+hexstr+s+'['+combobox2.text+'次]')
            else memo1.lines.add(hexstr+s);

            ret:=datacenterx1.SendData(DTUID,ws,length(s));
            if ret=-1 then
            begin
              memo1.lines.add('发送失败,'+DTUID+' TCP响应超时');
              break;
            end;
            if ret=-2 then
            begin
              memo1.lines.add('发送失败,'+DTUID+'不在线');
              break;
            end;
            if ret=-3 then
            begin
              memo1.lines.add('发送失败,'+DTUID+'不在DTU列表中');
              break;
            end;

            if listitem.SubItems[8]='' then listitem.SubItems[8]:='0';
            if ret>=0 then listitem.SubItems[8]:= inttostr(strtoint(listitem.SubItems[8])+ret);
            listitem.ImageIndex:=2;
           end;

           if ckcom2.Checked  then
           begin
            if hex1.Checked then hexstr:=' [HEX:'+texttohexstr(s)+']';
            if ndatatip.Checked then   memo1.lines.add(datetimetostr(now)+' 发送数据到'+ DTUID+'的COM2,数据内容:'+hexstr+s+'['+combobox2.text+'次]')
            else memo1.lines.add(hexstr+s);

            ret:=datacenterx1.SendData2(DTUID,ws,length(s));
            if ret=-1 then
            begin
              memo1.lines.add('发送失败,'+DTUID+' TCP响应超时');
              break;
            end;
            if ret=-2 then
            begin
              memo1.lines.add('发送失败,'+DTUID+'不在线');
              break;
            end;
            if ret=-3 then
            begin
              memo1.lines.add('发送失败,'+DTUID+'不在DTU列表中');
              break;
            end;

            if listitem.SubItems[8]='' then listitem.SubItems[8]:='0';
            if ret>=0 then listitem.SubItems[8]:= inttostr(strtoint(listitem.SubItems[8])+ret);
            listitem.ImageIndex:=2;
           end;

           sleep(10);
           application.ProcessMessages;
         end;
       end;
    end;
end;
}
procedure SendDTUData(listitem:tlistitem;dtuid:string;s:string);
var hexstr:string;
    ws:widestring;
    p:pchar;
    ret,k:integer;
begin
    with frmMain do
    begin
            setlength(ws,length(s));
            p:=@ws[1];
            for k:=1 to  length(s) do p[k-1]:=s[k];

            ret:=datacenterx1.SendData(DTUID,ws,length(s));

            if ret=-1 then
            begin
              memo1.lines.add('发送失败,'+DTUID+' TCP响应超时');
            end;

            if ret=-2 then
            begin
              memo1.lines.add('发送失败,'+DTUID+'不在线');
            end;

            if ret=-3 then
            begin
              memo1.lines.add('发送失败,'+DTUID+'不在DTU列表中');
            end;

            if listitem.SubItems[8]='' then listitem.SubItems[8]:='0';
            if ret>=0 then listitem.SubItems[8]:= inttostr(strtoint(listitem.SubItems[8])+ret);
            listitem.ImageIndex:=2;

    end;
end;

procedure SendDTUData2(listitem:tlistitem;dtuid:string;s:string);
var hexstr:string;
    ws:widestring;
    p:pchar;
    ret,k:integer;
begin
    with frmMain do
    begin
            setlength(ws,length(s));
            p:=@ws[1];
            for k:=1 to  length(s) do p[k-1]:=s[k];

            ret:=datacenterx1.SendData2(DTUID,ws,length(s));
            if ret=-1 then
            begin
              memo1.lines.add('发送失败,'+DTUID+' TCP响应超时');
            end;
            if ret=-2 then
            begin
              memo1.lines.add('发送失败,'+DTUID+'不在线');
            end;
            if ret=-3 then
            begin
              memo1.lines.add('发送失败,'+DTUID+'不在DTU列表中');
            end;

            if listitem.SubItems[8]='' then listitem.SubItems[8]:='0';
            if ret>=0 then listitem.SubItems[8]:= inttostr(strtoint(listitem.SubItems[8])+ret);
            listitem.ImageIndex:=2;

    end;
end;


procedure TfrmMain.suiButton1Click(Sender: TObject);
var i,j:integer;
    dtuid,hexstr:string;
    s:string;
    listitem:tlistitem;
    ret,k:integer;
begin

  if listview1.SelCount=0 then
  begin
    showmessage('请选中接收数据的DTU');
    exit;
  end;

    for i:=0 to listview1.Items.Count-1 do
    begin
       if i>=listview1.Items.Count then break;

       listitem:=listview1.Items[i];
       if listitem.Selected=false then continue;
       if listitem.StateIndex<>1 then continue;


         s:=memo2.text;
         if hex1.Checked then
         begin
             s:='';
             for k:=1 to (length(memo2.text) div 2) do
             begin
               s:=s+chr(strtohex(copy(memo2.text,(k-1)*2+1,2)));
             end;
         end;

         if s='' then exit;
         DTUID:=listitem.Caption;


         if ckcom1.Checked  then
         begin
            if hex1.Checked then hexstr:=' [HEX:'+texttohexstr(s)+']';
            if length(s)<=1024 then
            begin
              if ndatatip.Checked then   memo1.lines.add(datetimetostr(now)+' 发送数据到'+ DTUID+'的COM1,数据内容:'+hexstr+s+'['+combobox2.text+'次]')
              else memo1.lines.add(hexstr+s+'['+combobox2.text+'次]');
            end;
            if length(s)>1024 then
            begin
              if ndatatip.Checked then   memo1.lines.add(datetimetostr(now)+' 发送数据到'+ DTUID+'的COM1,数据内容:'+hexstr+copy(s,1,1024)+'...['+combobox2.text+'次]')
              else memo1.lines.add(hexstr+s+'...['+combobox2.text+'次]');
            end;

         end;

         if ckcom2.Checked  then
         begin
            if hex1.Checked then hexstr:=' [HEX:'+texttohexstr(s)+']';
            if ndatatip.Checked then   memo1.lines.add(datetimetostr(now)+' 发送数据到'+ DTUID+'的COM2,数据内容:'+hexstr+s+'['+combobox2.text+'次]')
            else memo1.lines.add(hexstr+s);
         end;

         for j:=1 to strtoint(combobox2.text) do
         begin
           if  ckcom1.Checked then SendDtuData(listitem,dtuid,s);
           if  ckcom2.Checked then SendDtuData2(listitem,dtuid,s);
           //sleep(10);
           application.ProcessMessages;
         end;
    end;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if btstopservice.Enabled then
  begin
   showmessage('请先停止服务,才能退出');
   action:=canone;
   exit;
  end;
  datacenterx1.DeInit;
end;

procedure TfrmMain.N1Click(Sender: TObject);
begin
  listview1.ViewStyle:=vsreport;
end;

procedure TfrmMain.N2Click(Sender: TObject);
begin
   listview1.ViewStyle:=vssmallicon;
end;

procedure TfrmMain.DataCenterX1DTULogout(Sender: TObject;
  const DTUID: WideString);
var i:integer;
    listitem:tlistitem;
begin
  memo1.lines.Add(datetimetostr(now)+' '+'收到注销,dtuid='+dtuid);
  showdtu(dtuid);
end;

procedure TfrmMain.N3Click(Sender: TObject);
var s:string;
begin
  s:=inttostr(serviceport);
  inputquery('服务端口号设置','请输入服务端口号(1025-65535):',s);
  try
    serviceport:=strtoint(s);
  except
    showmessage('输入非法,请输入1025-65535之间的整数');
  end;

end;

procedure TfrmMain.MenuExitClick(Sender: TObject);
begin
  if btstopservice.Enabled then
  begin
   showmessage('请先停止服务,才能退出');
  end
  else application.Terminate;
//  application.ProcessMessages;
end;

procedure TfrmMain.ADDDTUClick(Sender: TObject);
begin
  frmAddDTU.showmodal;
end;

procedure TfrmMain.DELDTUClick(Sender: TObject);
var i:integer;
begin
  if listview1.SelCount=0 then

⌨️ 快捷键说明

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