📄 main.~pas
字号:
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 + -