📄 xndgnb.pas
字号:
TMPBH:=data_reset(mid(dta,3,12));
if (tmpbh='999999999999') or (tmpbh='AAAAAAAAAAAA') then
tmpbw:=Combtxbw.ItemIndex
else
for i:=1 to GLGBS do
if TMPBH=GLBH[i] then
begin
tmpbw:=i;
break;
end;
sndstr:='';
if tmpbw=-1 then exit;
TMPKZM:=mid(dta,17,2);
if tmpkzm='01' then //请求读数据
sndstr:=read_db_sj(tmpbh,dta,tmpbw)
{ else if tmpkzm='02' then //读后续数据
begin
TMPSJCD:=mid(dta,19,2);
TMPSJXBS:=mid(dta,21,4);
end;
else if tmpkzm='03' then //重读数据
begin
TMPSJCD:=mid(dta,19,2);
TMPSJXBS:=mid(dta,21,4);
end;}
else if tmpkzm='04' then //写数据
sndstr:=write_db_sj(tmpbh,dta,tmpbw)
else if tmpkzm='08' then //广播校时
sndstr:=datetime_set(dta,tmpbw)
else if tmpkzm='0A' then //写设备地址
sndstr:=addr_set(dta,tmpbw)
else if tmpkzm='0C' then //更改通讯速率
sndstr:=txsl_set(dta,tmpbw)
else if tmpkzm='0F' then //修改密码
sndstr:=mm_set(dta,tmpbw)
else if tmpkzm='10' then //最大需量清零
sndstr:=xl_clear(dta,tmpbw);
memo1.Lines.add(sndstr);
if sndstr<>'' then
sj_fs_485(mscomm1,sndstr,5);
end;
function TxndgnbForm.xl_clear(dta:string;bw:integer):string;
var
tmpsjcd,tmpsjx:string;
i,j,m:integer;
begin
TMPSJCD:=mid(dta,19,2);
if TMPSJCD='04' then
begin
TMPSJX:=hexdel(mid(dta,21,8));
if GLXLQX[bw]=mid(tmpsjx,1,2) then
if GLXLMM[bw]=data_reset(mid(tmpsjx,3,6)) then
begin
// for i:=1 to GLGBS do
for m:=0 to 3 do
for j:=0 to 4 do
begin
db_zdxl[bw,0,m,j]:='0';
db_zdxl[bw,1,m,j]:='00-00 00:00:00';
grid3.cells[bw,11]:=db_zdxl[bw,0,m,0]+'kW';
grid3.cells[bw,12]:=db_zdxl[bw,1,m,0];
end;
end;
end;
result:='';
end;
function TxndgnbForm.mm_set(dta:string;bw:integer):string;
var
tmpsjcd,tmpsjx,tmpstr:string;
sndstr:string;
begin
sndstr:='';
TMPSJCD:=mid(dta,19,2);
if tmpsjcd='08' then
begin
TMPSJX:=mid(dta,21,16);
tmpstr:=hexdel(mid(tmpsjx,1,8));
tmpstr:=leftstr(tmpstr,2)+data_reset(rightstr(tmpstr,6));
if tmpstr=(GLBCQX[bw]+GLBCMM[bw]) then
begin
tmpstr:=hexdel(mid(tmpsjx,9,2));
GLBCQX[bw]:=tmpstr;
grid2.cells[4,bw]:=tmpstr;
tmpstr:=data_reset(hexdel(mid(tmpsjx,11,6)));
GLBCMM[bw]:=tmpstr;
grid2.cells[3,bw]:=tmpstr;
sndstr:='68'+data_chang(GLBH[bw],false)+'688F04'+GLBCQX[bw]+GLBCMM[bw]
+hexadd('68'+data_chang(GLBH[bw],false)+'688F04'+GLBCQX[bw]+GLBCMM[bw])+'16';
end;
end;
result:=sndstr;
end;
function TxndgnbForm.txsl_set(dta:string;bw:integer):string;
var
tmpsjcd,tmpsjxbs:string;
sndstr:string;
begin
TMPSJCD:=mid(dta,19,2);
if tmpsjcd='01' then
begin
TMPSJXBS:=hexdel(mid(dta,21,2));
if tmpsjxbs='02' then mscomm1.Settings:='300,e,8,1';
if tmpsjxbs='04' then mscomm1.Settings:='600,e,8,1';
if tmpsjxbs='08' then mscomm1.Settings:='1200,e,8,1';
if tmpsjxbs='10' then mscomm1.Settings:='2400,e,8,1';
if tmpsjxbs='20' then mscomm1.Settings:='4800,e,8,1';
if tmpsjxbs='40' then mscomm1.Settings:='9600,e,8,1';
sndstr:='68'+GLBH[bw]+'688C01'+data_chang(tmpsjxbs,true)+hexadd('68'+GLBH[bw]+'688C01'+data_chang(tmpsjxbs,true))+'16';
end else
sndstr:='68'+GLBH[bw]+'688C01FF'+hexadd('68'+GLBH[bw]+'688C01FF')+'16';
result:=sndstr;
end;
function TxndgnbForm.addr_set(dta:string;bw:integer):string;
var
tmpsjx,tmpsjcd:string;
sndstr:string;
begin
sndstr:='';
TMPSJCD:=mid(dta,19,2);
if tmpsjcd='06' then
begin
if bw=0 then exit;
TMPSJX:=mid(dta,21,12);
GLBH[bw]:=data_reset(hexdel(tmpsjx));
Grid2.cells[1,bw]:=data_reset(hexdel(tmpsjx));
sndstr:='68'+tmpsjx+'688A00'+hexadd('68'+tmpsjx+'688A00')+'16';
end;
result:=sndstr;
end;
function TxndgnbForm.datetime_set(dta:string;bw:integer):string;
var
i:integer;
tmpsjx:string;
begin
TMPSJX:=hexdel(mid(dta,21,6));
if bw=0 then
begin
for i:=1 to GLGBS do //时间
Grid3.cells[i,2]:=mid(tmpsjx,5,2)+':'+mid(tmpsjx,3,2)+':'+mid(tmpsjx,1,2);
end else
Grid3.cells[bw,2]:=mid(tmpsjx,5,2)+':'+mid(tmpsjx,3,2)+':'+mid(tmpsjx,1,2);
result:='';
end;
function TxndgnbForm.write_db_sj(tmpbh,dta:string;bw:integer):string;
var
i,j,m:integer;
fl:string;
tmpsjxbs,tmpsjcd,tmpsjx:string;
tmpsj:string;
sndstr:string;
tmpstr:string;
begin
sndstr:='';
tmpstr:=hexdel(mid(dta,25,8)); //密码 权限
if tmpstr<>(GLBCQX[bw]+GLBCMM[bw]) then
begin
sndstr:='68'+tmpbh+'68C40137'+hexadd('68'+tmpbh+'68C40137')+'16'; //密码错误
end else begin
TMPSJXBS:=mid(dta,21,4);// 标识码
if TMPSJXBS='43F3' then //日期及周次
begin
TMPSJX:=hexdel(mid(dta,33,8));
tmpstr:='20'+mid(tmpsjx,7,2)+'-'+mid(tmpsjx,5,2)+'-'+mid(tmpsjx,3,2);
Grid3.cells[bw,1]:=tmpstr;
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end
else if TMPSJXBS='44F3' then //时间
begin
TMPSJX:=hexdel(mid(dta,33,6));
tmpstr:=mid(tmpsjx,5,2)+':'+mid(tmpsjx,3,2)+':'+mid(tmpsjx,1,2);
Grid3.cells[bw,2]:=tmpstr;
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end
else if (tmpsjxbs='66F3') or (tmpsjxbs='65F3') then //局编号 厂编号
begin
tmpsjx:=data_reset(hexdel(mid(dta,33,12)));
GLBH[bw]:=tmpsjx;
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end
else if (tmpsjxbs='44F4') then //最大需量周期
begin
tmpsjx:=hexdel(mid(dta,33,2));
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end
else if (tmpsjxbs='45F4') then //滑差时间
begin
tmpsjx:=hexdel(mid(dta,33,2));
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end
else if tmpsjxbs='43F6' then //时区总数
begin
TMPSJX:=hexdel(mid(dta,33,2));
db_sqzs:=strtoint(tmpsjx);
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end
else if tmpsjxbs='44F6' then //时段表数
begin
TMPSJX:=hexdel(mid(dta,33,2));
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end
else if tmpsjxbs='45F6' then //日时段数
begin
TMPSJX:=hexdel(mid(dta,33,2));
db_sds:=strtoint(tmpsjx);
sqsdb:=VarArrayCreate([0,1,1,db_sds], varOleStr);
listbox1.Items.Clear;
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end
else if tmpsjxbs='72F6' then //时段表 块写入
begin
tmpsjcd:=mid(dta,19,2);
m:=strtoint('$'+tmpsjcd)-6;
TMPSJX:=hexdel(mid(dta,33,m*2));
m:=m div 3;
for i:=0 to m-1 do
begin
tmpstr:=mid(tmpsjx,1+i*6,2);
j:=strtoint(tmpstr);
case j of
1:
fl:='尖';
2:
fl:='峰';
3:
fl:='平';
4:
fl:='谷';
else
fl:='';
end;
tmpstr:=mid(tmpsjx,5+i*6,2)+':'+mid(tmpsjx,3+i*6,2);
listbox1.Items.Add('------费率:'+fl+'------'+tmpstr);
if fl<>'' then
sqsdb[0,i+1]:=fl;
sqsdb[1,i+1]:=tmpstr+':00';
end;
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
ListBox1.Items.SaveToFile(ExtractFilePath(Application.ExeName)+'sqsd_set.dat');
end
else
for i:=1 to db_sqzs do
begin
if tmpsjxbs=inttohex($53+i,2)+'F6' then
begin
tmpsjx:=hexdel(mid(dta,33,6));
tmpstr:='第'+inttostr(i)+'时区---起始日期:'+mid(tmpsjx,5,2)+'月'+mid(tmpsjx,3,2)+'日';
listbox1.Items.Insert((i-1)*(db_sds+1),tmpstr);
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end else
for m:=1 to db_sds do
begin
tmpstr:=inttohex($53+m+i*$10,2)+'F6';
if tmpsjxbs=tmpstr then
begin
TMPSJX:=hexdel(mid(dta,33,6));
tmpsj:=mid(tmpsjx,1,2);
j:=strtoint(tmpsj);
case j of
1:
fl:='尖';
2:
fl:='峰';
3:
fl:='平';
4:
fl:='谷';
else
fl:='';
end;
tmpsj:=mid(tmpsjx,5,2)+':'+mid(tmpsjx,3,2);
listbox1.Items.Add('------费率:'+fl+'------'+tmpsj);
if fl<>'' then
sqsdb[0,i+1]:=fl;
sqsdb[1,i+1]:=tmpsj+':00';
sndstr:='68'+data_chang(tmpbh,false)+'688400'+hexadd('68'+data_chang(tmpbh,false)+'688400')+'16';
end;
end;
ListBox1.Items.SaveToFile(ExtractFilePath(Application.ExeName)+'sqsd_set.dat');
end;
end;
result:=sndstr;
end;
function TxndgnbForm.read_db_sj(tmpbh,dta:string;bw:integer):string;
var
i,fl,num:integer;
tmpsj:string;
tmpsjcd,tmpsjxbs,tmpsjx:string;
sndstr:string;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -