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

📄 dbjy.pas

📁 完成虚拟的多功能电能表
💻 PAS
📖 第 1 页 / 共 4 页
字号:


    Grid3.cells[0,11]:='最大需量';
    Grid3.cells[0,12]:='需量时间';

  for i:=1 to GLGBS do
  for M:=0 to 3 do
  for j:=0 to 4 do
  begin
    db_dq_dl[i,m,j]:='0.00';
    db_sxx_dl[i,m+1,j]:='0.00';
    db_zdxl[i,0,m,j]:='0.0';
    db_zdxl[i,1,m,j]:='00-00 00:00:00';
  end;

end;

procedure TdbjyForm.FormClose(Sender: TObject; var Action: TCloseAction);
BEGIN
  Action:=caFree;
end;

procedure TdbjyForm.Grid2SetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: String);
var
  i:Integer;
begin
if ACol=2 then
 if CheckBox2.Checked and (Value<>'') then
  begin
   for i:=1 to Grid2.RowCount-1 do
    if (ARow<>i) then
     Grid2.Cells[ACol,i]:=Value;
  end;
if ACol in [3,5] then
 if CheckBox3.Checked and (Value<>'') then
  begin
   for i:=1 to Grid2.RowCount-1 do
    if (ARow<>i) then
     Grid2.Cells[ACol,i]:=Value;
  end;
if ACol IN[4,6] then
 if CheckBox4.Checked and (Value<>'') then
  begin
   for i:=1 to Grid2.RowCount-1 do
    if (ARow<>i) then
     Grid2.Cells[ACol,i]:=Value;
  end;
if ACol=7 then
 if CheckBox1.Checked and (Value<>'') then
  begin
   for i:=1 to Grid2.RowCount-1 do
    if (ARow<>i) then
     Grid2.Cells[ACol,i]:=Value;
  end;

end;

procedure TdbjyForm.SpeedButton9Click(Sender: TObject);
begin
if GLXX='三相三线' then
  ib.Text:='0';

Combxj.ItemIndex:=3;
Comfx.ItemIndex:=GLFX;
Panel1.BringToFront;
Panel1.Visible:=true;
end;

procedure TdbjyForm.Button1Click(Sender: TObject);
begin
Panel1.Visible:=False;
end;

procedure TdbjyForm.Cmd1Click(Sender: TObject);
var
  i,j:integer;
begin
  tmpua:=GLDY*strtofloat(ua.text)/100;
  tmpub:=GLDY*strtofloat(ub.text)/100;
  tmpuc:=GLDY*strtofloat(uc.text)/100;
  tmpia:=GLDL*strtofloat(ia.text)/100;
  tmpib:=GLDL*strtofloat(ib.text)/100;
  tmpic:=GLDL*strtofloat(ic.text)/100;
  tmpys:=Combxj.Text;
  if tmpys='1.0' then
    tmpjd:=0;
  if tmpys='0.5L' then
      tmpjd:=60;
  if tmpys='0.8C' then
    tmpjd:=-30;
  if tmpys='0.5C' then
      tmpjd:=-60;
  if tmpys='0.8L' then
    tmpjd:=30;
   if tmpys='0.25L' then
      tmpjd:=75;
  if tmpys='0.25C' then
    tmpjd:=-75;

  if instr(tmpys,'C')<>0 then
    GLGXRX:=false
  else
    GLGXRX:=true;
  dqflh:=0;
  GLFX:=Comfx.ItemIndex;
  start_time:=formatdatetime('hh:mm:ss',now);
  timer1.Enabled:=true;
  panel1.Visible:=False;
end;

procedure TdbjyForm.Timer1Timer(Sender: TObject);
var
  tmpstr:string;
  i,j:integer;
  now_time:string;
  fl:integer;
  tmpval:double;
  tmpxx:integer;
begin
  now_time:=Timetostr(Time);
  if sqsdb[1,1]='00:00:00' then
  begin
    if (strtodatetime(now_time)>=strtodatetime(sqsdb[1,db_sds])) and (strtodatetime(now_time)<strtodatetime('23:59:59')) then
      dqsd:=sqsdb[0,db_sds];
  end else
  if (strtodatetime(now_time)>=strtodatetime(sqsdb[1,db_sds])) and (strtodatetime(now_time)<strtodatetime(sqsdb[1,1])) then
    dqsd:=sqsdb[0,db_sds];
  for i:=1 to db_sds-1 do
  begin
    if sqsdb[1,i+1]='00:00:00' then
    begin
      if (strtodatetime(now_time)>=strtodatetime(sqsdb[1,i])) and (strtodatetime(now_time)<strtodatetime('23:59:59')) then
      begin
        dqsd:=sqsdb[0,i];
        break;
      end;
    end else
    if (strtodatetime(now_time)>=strtodatetime(sqsdb[1,i])) and (strtodatetime(now_time)<strtodatetime(sqsdb[1,i+1])) then
    begin
      dqsd:=sqsdb[0,i];
      break;
    end;
  end;
  if dqsd='尖' then fl:=1;
  if dqsd='峰' then fl:=2;
  if dqsd='平' then fl:=3;
  if dqsd='谷' then fl:=4;
    for i:=1 to GLGBS do
    begin
      //有功电量
      if GLXX='三相三线' then
        tmpval:=abs(0.866*cos(tmpjd/180*3.1415926)*(tmpua*tmpia+tmpub*tmpib+tmpuc*tmpic)*(strtodatetime(now_time)-strtodatetime(start_time))*GLSFBL/3600)
      else
        tmpval:=abs(cos(tmpjd/180*3.1415926)*(tmpua*tmpia+tmpub*tmpib+tmpuc*tmpic)*(strtodatetime(now_time)-strtodatetime(start_time))*GLSFBL/3600);
      db_dq_dl[i,GLFX,fl]:=formatfloat('0.00',strtofloat(db_dq_dl[i,GLFX,fl])+tmpval);
      //最大需量
      if GLXX='三相三线' then
        db_zdxl[i,0,GLFX,fl]:=formatfloat('0.0000',abs(0.866*cos(tmpjd/180*3.1415926)*(tmpua*tmpia+tmpub*tmpib+tmpuc*tmpic))/1000)
      else
        db_zdxl[i,0,GLFX,fl]:=formatfloat('0.0000',abs(cos(tmpjd/180*3.1415926)*(tmpua*tmpia+tmpub*tmpib+tmpuc*tmpic))/1000);
      db_zdxl[i,1,GLFX,fl]:=mid(grid3.cells[i,1],6,5)+' '+grid3.cells[i,2];
      if strtofloat(db_zdxl[i,0,GLFX,fl])>=strtofloat(db_zdxl[i,0,GLFX,0]) then
      begin
        db_zdxl[i,0,GLFX,0]:=db_zdxl[i,0,GLFX,fl];
        db_zdxl[i,1,GLFX,0]:=db_zdxl[i,1,GLFX,fl];
      end;
      Grid3.cells[i,11]:=db_zdxl[i,0,GLFX,0]+'kW';
      Grid3.cells[i,12]:=db_zdxl[i,1,GLFX,0];

      //无功电量
      if GLGXRX then
      begin
        case GLFX of
        0,2:
          tmpxx:=1;
        1,3:
          tmpxx:=3;
        end;
      end else
      begin
        case GLFX of
        0,2:
          tmpxx:=4;
        1,3:
          tmpxx:=2;
        end;
      end;
      //无功最大需量

//      db_zdxl[i,0,glfx,fl]:=formatfloat('0.000',abs(sin(tmpjd/180*3.1415926)*(tmpua*tmpia+tmpub*tmpib+tmpuc*tmpic)));
//      db_zdxl[i,1,glfx,fl]:=mid(grid3.cells[i,1],6,5)+' '+mid(grid3.cells[i,2],1,5);
//      db_zdxl[i,0,glfx,0]:=formatfloat('0.000',abs(sin(tmpjd/180*3.1415926)*(tmpua*tmpia+tmpub*tmpib+tmpuc*tmpic)));
//      db_zdxl[i,1,glfx,0]:=mid(grid3.cells[i,1],6,5)+' '+mid(grid3.cells[i,2],1,5);

      if GLXX='三相三线' then
        tmpval:=abs(0.866*sin(tmpjd/180*3.1415926)*(tmpua*tmpia+tmpub*tmpib+tmpuc*tmpic)*(strtodatetime(now_time)-strtodatetime(start_time))*GLSFBL/3600)
      else
        tmpval:=abs(sin(tmpjd/180*3.1415926)*(tmpua*tmpia+tmpub*tmpib+tmpuc*tmpic)*(strtodatetime(now_time)-strtodatetime(start_time))*GLSFBL/3600);
      db_sxx_dl[i,tmpxx,fl]:=formatfloat('0.00',strtofloat(db_sxx_dl[i,tmpxx,fl])+tmpval);
      db_dq_dl[i,2,fl]:=formatfloat('0.00',strtofloat(db_sxx_dl[i,1,fl])+strtofloat(db_sxx_dl[i,4,fl]));
      db_dq_dl[i,3,fl]:=formatfloat('0.00',strtofloat(db_sxx_dl[i,2,fl])+strtofloat(db_sxx_dl[i,3,fl]));

      //当前方向总电量
      tmpval:=0;
      for j:=1 to 4 do
        tmpval:=tmpval+strtofloat(db_dq_dl[i,GLFX,j]);
      db_dq_dl[i,GLFX,0]:=formatfloat('0.00',tmpval);
      tmpval:=0;
      for j:=1 to 4 do
        tmpval:=tmpval+strtofloat(db_sxx_dl[i,tmpxx,j]);
      db_sxx_dl[i,tmpxx,0]:=formatfloat('0.00',tmpval);
      db_dq_dl[i,2,0]:=formatfloat('0.00',strtofloat(db_sxx_dl[i,1,0])+strtofloat(db_sxx_dl[i,4,0]));
      db_dq_dl[i,3,0]:=formatfloat('0.00',strtofloat(db_sxx_dl[i,2,0])+strtofloat(db_sxx_dl[i,3,0]));

      for j:=0 to 3 do
        grid3.cells[i,j+3]:=db_dq_dl[i,j,0];
      for j:=1 to 4 do
        grid3.cells[i,j+6]:=db_sxx_dl[i,j,0];
    end;
  if dqflh<>fl then
  begin
    start_time:=now_time;
    dqflh:=fl;
  end;
end;



procedure TdbjyForm.SpeedButton10Click(Sender: TObject);
begin
  timer1.Enabled:=false;
  tmpua:=0;
  tmpub:=0;
  tmpuc:=0;
  tmpia:=0;
  tmpib:=0;
  tmpic:=0;
end;

procedure TdbjyForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  tmpini:Tinifile;
  i,j,m:integer;
begin
  tmpini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'dgntest.ini');
  for i:=1 to GLGBS do begin
    tmpini.WriteString('DGNB_TEST','BDZ'+IntToStr(i),Grid2.Cells[1,i]);
    tmpini.WriteString('DGNB_TEST','BGY'+IntToStr(i),Grid2.Cells[2,i]);
    tmpini.WriteString('DGNB_TEST','MM'+IntToStr(i),Grid2.Cells[3,i]);
    tmpini.WriteString('DGNB_TEST','BCQX'+IntToStr(i),Grid2.Cells[4,i]);
    tmpini.WriteString('DGNB_TEST','XLMM'+IntToStr(i),Grid2.Cells[5,i]);
    tmpini.WriteString('DGNB_TEST','XLQX'+IntToStr(i),Grid2.Cells[6,i]);
    tmpini.WriteString('DGNB_TEST','BTL'+IntToStr(i),Grid2.Cells[7,i]);
    //保存表数据
      tmpini.WriteString('表'+inttostr(i),'正向有功总',db_dq_dl[i,0,0]);
      tmpini.WriteString('表'+inttostr(i),'正向有功尖',db_dq_dl[i,0,1]);
      tmpini.WriteString('表'+inttostr(i),'正向有功峰',db_dq_dl[i,0,2]);
      tmpini.WriteString('表'+inttostr(i),'正向有功平',db_dq_dl[i,0,3]);
      tmpini.WriteString('表'+inttostr(i),'正向有功谷',db_dq_dl[i,0,4]);

      tmpini.WriteString('表'+inttostr(i),'反向有功总',db_dq_dl[i,1,0]);
      tmpini.WriteString('表'+inttostr(i),'反向有功尖',db_dq_dl[i,1,1]);
      tmpini.WriteString('表'+inttostr(i),'反向有功峰',db_dq_dl[i,1,2]);
      tmpini.WriteString('表'+inttostr(i),'反向有功平',db_dq_dl[i,1,3]);
      tmpini.WriteString('表'+inttostr(i),'反向有功谷',db_dq_dl[i,1,4]);

      tmpini.WriteString('表'+inttostr(i),'正向无功总',db_dq_dl[i,2,0]);
      tmpini.WriteString('表'+inttostr(i),'正向无功尖',db_dq_dl[i,2,1]);
      tmpini.WriteString('表'+inttostr(i),'正向无功峰',db_dq_dl[i,2,2]);
      tmpini.WriteString('表'+inttostr(i),'正向无功平',db_dq_dl[i,2,3]);
      tmpini.WriteString('表'+inttostr(i),'正向无功谷',db_dq_dl[i,2,4]);

      tmpini.WriteString('表'+inttostr(i),'反向无功总',db_dq_dl[i,3,0]);
      tmpini.WriteString('表'+inttostr(i),'反向无功尖',db_dq_dl[i,3,1]);
      tmpini.WriteString('表'+inttostr(i),'反向无功峰',db_dq_dl[i,3,2]);
      tmpini.WriteString('表'+inttostr(i),'反向无功平',db_dq_dl[i,3,3]);
      tmpini.WriteString('表'+inttostr(i),'反向无功谷',db_dq_dl[i,3,4]);

      tmpini.WriteString('表'+inttostr(i),'一象限无功总',db_sxx_dl[i,1,0]);
      tmpini.WriteString('表'+inttostr(i),'一象限无功尖',db_sxx_dl[i,1,1]);
      tmpini.WriteString('表'+inttostr(i),'一象限无功峰',db_sxx_dl[i,1,2]);
      tmpini.WriteString('表'+inttostr(i),'一象限无功平',db_sxx_dl[i,1,3]);
      tmpini.WriteString('表'+inttostr(i),'一象限无功谷',db_sxx_dl[i,1,4]);

      tmpini.WriteString('表'+inttostr(i),'二象限无功总',db_sxx_dl[i,2,0]);
      tmpini.WriteString('表'+inttostr(i),'二象限无功尖',db_sxx_dl[i,2,1]);
      tmpini.WriteString('表'+inttostr(i),'二象限无功峰',db_sxx_dl[i,2,2]);
      tmpini.WriteString('表'+inttostr(i),'二象限无功平',db_sxx_dl[i,2,3]);
      tmpini.WriteString('表'+inttostr(i),'二象限无功谷',db_sxx_dl[i,2,4]);

      tmpini.WriteString('表'+inttostr(i),'三象限无功总',db_sxx_dl[i,3,0]);
      tmpini.WriteString('表'+inttostr(i),'三象限无功尖',db_sxx_dl[i,3,1]);
      tmpini.WriteString('表'+inttostr(i),'三象限无功峰',db_sxx_dl[i,3,2]);
      tmpini.WriteString('表'+inttostr(i),'三象限无功平',db_sxx_dl[i,3,3]);
      tmpini.WriteString('表'+inttostr(i),'三象限无功谷',db_sxx_dl[i,3,4]);

      tmpini.WriteString('表'+inttostr(i),'四象限无功总',db_sxx_dl[i,4,0]);
      tmpini.WriteString('表'+inttostr(i),'四象限无功尖',db_sxx_dl[i,4,1]);
      tmpini.WriteString('表'+inttostr(i),'四象限无功峰',db_sxx_dl[i,4,2]);
      tmpini.WriteString('表'+inttostr(i),'四象限无功平',db_sxx_dl[i,4,3]);
      tmpini.WriteString('表'+inttostr(i),'四象限无功谷',db_sxx_dl[i,4,4]);

      tmpini.WriteString('表'+inttostr(i),'正向有功需量',db_zdxl[i,0,0,0]);
      tmpini.WriteString('表'+inttostr(i),'正向有功需量时间',db_zdxl[i,1,0,0]);
      tmpini.WriteString('表'+inttostr(i),'反向有功需量',db_zdxl[i,0,1,0]);
      tmpini.WriteString('表'+inttostr(i),'反向有功需量时间',db_zdxl[i,1,1,0]);
      tmpini.WriteString('表'+inttostr(i),'正向无功需量',db_zdxl[i,0,2,0]);
      tmpini.WriteString('表'+inttostr(i),'正向无功需量时间',db_zdxl[i,1,2,0]);
      tmpini.WriteString('表'+inttostr(i),'反向无功需量',db_zdxl[i,0,2,0]);
      tmpini.WriteString('表'+inttostr(i),'反向无功需量时间',db_zdxl[i,1,2,0]);


  end;
  tmpini.free;
end;

procedure TdbjyForm.Timer2Timer(Sender: TObject);
var
  h,j,m:integer;
  DLQL:boolean;
  tmpini:Tinifile;
begin
  for h:=1 to GLGBS do
  begin
    try
      Grid3.cells[h,1]:=formatdatetime('YYYY-MM-DD',strtodatetime(Grid3.cells[h,1]+' '+Grid3.cells[h,2])+strtodatetime('00:00:01'));
      Grid3.cells[h,2]:=formatdatetime('hh:mm:ss',strtodatetime(Grid3.cells[h,1]+' '+Grid3.cells[h,2])+strtodatetime('00:00:01'));
    except
    end;
    tmpini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'dgntest.ini');
    DLQL:=tmpini.Readbool('校验参数','表'+inttostr(h)+'DLQL',False);
    if (mid(Grid3.cells[h,1],9,2)='01') and (NOT DLQL) then
    begin
      for m:=0 to 3 do
      begin
        for j:=0 to 4 do
        begin
          db_dq_dl[h,m,j]:='0.00';
          db_sxx_dl[h,m+1,j]:='0.00';
          db_zdxl[h,0,m,j]:='0.0';
          db_zdxl[h,1,m,j]:='00-00 00:00:00';
        end;
        grid3.cells[h,m+3]:=db_dq_dl[h,m,0];
        grid3.cells[h,m+7]:=db_sxx_dl[h,m+1,0];

      end;
      DLQL:=True;
    end;
    if (mid(Grid3.cells[h,1],9,2)<>'01') then DLQL:=False;
    tmpini.Writebool('校验参数','表'+inttostr(h)+'DLQL',DLQL);
  end;
  tmpini.free;
end;

procedure TdbjyForm.GroupBox3DblClick(Sender: TObject);
begin
memo1.BringToFront;
memo1.Visible:=not memo1.Visible;
end;

end.

⌨️ 快捷键说明

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