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

📄 unit1.pas

📁 Delphi_7.0数据库开发源代码。有内容十一章节
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Unit1;

interface

uses
  unit2,DB, DBTables,
  Windows, Math, Controls, StdCtrls, ExtCtrls, TeEngine, Series,
  Classes, TeeProcs, Chart,Messages, SysUtils, Variants,
  Graphics,Forms,  Dialogs,TeeFunci, ToolWin, ComCtrls, Buttons, ImgList,
  Grids, DBGrids, DBCtrls;

type
    PowerArray=array[0..59] of single;
    Rate=array[0..8] of single; 
    TForm1 = class(TForm)
    Chart1: TChart;
    Series_Liu: TLineSeries;
    CoolBar1: TCoolBar;
    Label_sum: TLabel;
    Label_sum2: TLabel;
    SpeedButton_P: TSpeedButton;
    SpeedButton_Q: TSpeedButton;
    SpeedButton_S: TSpeedButton;
    SpeedButton_R: TSpeedButton;
    Series_Ge: TLineSeries;
    Series_Da: TLineSeries;
    Series_Qin: TLineSeries;
    Timer1: TTimer;
    Label5: TLabel;
    Lb_C: TLabel;
    Panel1: TPanel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Lb_Liu: TLabel;
    Lb_Ge: TLabel;
    Lb_Da: TLabel;
    Lb_Qin: TLabel;
    Lb_Give: TLabel;
    Lb_Aver: TLabel;
    Lb_Need: TLabel;
    Lb_Diff: TLabel;
    TabSheet2: TTabSheet;
    RadioGroup1: TRadioGroup;
    Label10: TLabel;
    Lb_Shoud: TLabel;
    Ed_Fee: TEdit;
    Label12: TLabel;
    Lb_RunOut: TLabel;
    Label14: TLabel;
    BitBtn1: TBitBtn;
    TabSheet3: TTabSheet;
    ComboBox1: TComboBox;
    Label11: TLabel;
    Label13: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    BitBtn2: TBitBtn;
    Lb_Sum: TLabel;
    Lb_ShoudG: TLabel;
    Lb_AlreadyG: TLabel;
    Label20: TLabel;
    Lb_NotG: TLabel;
    TabSheet4: TTabSheet;
    RadioGroup2: TRadioGroup;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label21: TLabel;
    Lb_P: TLabel;
    Lb_Q: TLabel;
    Lb_S: TLabel;
    Lb_R: TLabel;
    Label26: TLabel;
    Ed_Min: TEdit;
    BitBtn3: TBitBtn;
    Label27: TLabel;
    Ed_Sec: TEdit;
    Label28: TLabel;
    TabSheet5: TTabSheet;
    GroupBox1: TGroupBox;
    Button_Liu: TButton;
    Button_Ge: TButton;
    Button_Da: TButton;
    Button_Qin: TButton;
    DBNavigator1: TDBNavigator;
    Lb_M: TLabel;
    BitBtn4: TBitBtn;
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure SpeedButton_PClick(Sender: TObject);
    procedure SpeedButton_QClick(Sender: TObject);
    procedure SpeedButton_SClick(Sender: TObject);
    procedure SpeedButton_RClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure Button_LiuClick(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure Button_GeClick(Sender: TObject);
    procedure Button_DaClick(Sender: TObject);
    procedure Button_QinClick(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  temp1,temp2:integer;
  LiuP,GeP,DaP,QinP,LiuQ,GeQ,DaQ,QinQ,
  LiuS,GeS,DaS,QinS,LiuR,GeR,DaR,QinR:PowerArray;
  Con_Rate:Rate;
  Time:integer;
  Total:single;
  SeriesNo:integer;
  index:integer;
  PowerNo:integer;
  Liu_Open,Ge_Open,Da_Open,Qin_Open:boolean;
const
  PLEVEL=15;
  QLEVEL=5;

implementation


{$R *.dfm}
function RealToStr(a:Real):String;
var
x,y:Integer;
z:single;
begin
    if(a>=0) then
        begin
        x:=Trunc(a);
        z:=a-x;
        y:=round(a*100000-x*100000);
            if z>=0.1 then
                RealToStr:=IntToStr(x)+'.'+IntToStr(y)
            else
                RealToStr:=IntToStr(x)+'.'+'0'+IntToStr(y);
        end
    else
        begin
        a:=-a;
        x:=Trunc(a);
        z:=a-x;
        y:=round(a*100000-x*100000);
            if z>=0.1 then
                RealToStr:=IntToStr(x)+'.'+IntToStr(y)
            else
                RealToStr:=IntToStr(x)+'.'+'0'+IntToStr(y);
        end;

end;

function  Test(AliasName:String):Boolean;
  var
  List:TStringList;
begin
  List:=TStringlist.Create;
  Session.GetAliasNames(LiSt);
  if (List.IndexOf(AliasName)=-1) then
      begin
      ShowMessage('别名错误!');
      Result:=False;
      end;
  List.Clear;
  Result:=True;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin

        Randomize;
        SeriesNo:=1;
        Panel1.Height:=Form1.Height div 3;
        CoolBar1.Height:=Form1.Height div 8;
        PowerNo:=60;
        Con_Rate[0]:=1/20;
        Con_Rate[1]:=3/20;
        Con_Rate[2]:=3/20;
        Con_Rate[3]:=2/20;
        Con_Rate[4]:=1/20;
        Con_Rate[5]:=2/20;
        Con_Rate[6]:=3/20;
        Con_Rate[7]:=1/20;
        Con_Rate[8]:=4/20;
        Time:=0;
        
        Lb_Liu.Caption:='';
        Lb_Ge.Caption:='';
        Lb_Qin.Caption:='';
        Lb_Da.Caption:='';
        Lb_Give.Caption:='';
        Lb_Need.Caption:='';
        Lb_Diff.Caption:='';
        Lb_Aver.Caption:='';
        Lb_C.Caption:='';
        Lb_Shoud.Caption:='';
        Lb_RunOut.Caption:='';
        Lb_Sum.Caption:='';
        Lb_ShoudG.Caption:='';
        Lb_NotG.Caption:='';
        Lb_AlreadyG.Caption:='';
        Lb_M.Caption:='';

        Lb_P.Caption:='0';
        Lb_Q.Caption:='0';
        Lb_R.Caption:='0';
        Lb_S.Caption:='0';

        Liu_Open:=False;
        Ge_Open:=False;
        Da_Open:=False;
        Qin_Open:=False;
        
        Timer1.Enabled:=False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
        Time:=Time+1;
        for i:=1 to 59 do
        begin
            LiuP[60-i]:=LiuP[60-i-1];
            GeP[60-i]:=GeP[60-i-1];
            DaP[60-i]:=DaP[60-i-1];
            QinP[60-i]:=QinP[60-i-1];

            LiuQ[60-i]:=LiuQ[60-i-1];
            GeQ[60-i]:=GeQ[60-i-1];
            DaQ[60-i]:=DaQ[60-i-1];
            QinQ[60-i]:=QinQ[60-i-1];

            LiuS[60-i]:=LiuS[60-i-1];
            GeS[60-i]:=GeS[60-i-1];
            DaS[60-i]:=DaS[60-i-1];
            QinS[60-i]:=QinS[60-i-1];

            LiuR[60-i]:=LiuR[60-i-1];
            GeR[60-i]:=GeR[60-i-1];
            DaR[60-i]:=DaR[60-i-1];
            QinR[60-i]:=QinR[60-i-1];
        end;
        LiuP[0]:=PLEVEL+random(100)/25;
        GeP[0]:=PLEVEL+random(100)/25;
        DaP[0]:=PLEVEL+random(100)/25;
        QinP[0]:=PLEVEL+random(100)/25;

        LiuQ[0]:=QLEVEL+random(20)/10;
        GeQ[0]:=QLEVEL+random(20)/10;
        DaQ[0]:=QLEVEL+random(20)/10;
        QinQ[0]:=QLEVEL+random(20)/10;

        LiuS[0]:=Sqrt(LiuP[0]*LiuP[0]+LiuQ[0]*LiuQ[0]);
        GeS[0]:=Sqrt(GeP[0]*GeP[0]+GeQ[0]*GeQ[0]);
        DaS[0]:=Sqrt(DaP[0]*DaP[0]+DaQ[0]*DaQ[0]);
        QinS[0]:=Sqrt(QinP[0]*QinP[0]+QinQ[0]*QinQ[0]);

        LiuR[0]:=LiuP[0]/LiuS[0];
        GeR[0]:=GeP[0]/GeS[0];
        DaR[0]:=DaP[0]/DaS[0];
        QinR[0]:=QinP[0]/QinS[0];

        Total:=LiuP[0]+GeP[0]+QinP[0]+DaP[0];
        PowerNo:=PowerNo+1;
        with DM do
        begin
        Table_Power.Open;
        Table_Power.Append;
        Table_Power.FieldByName('ID').AsInteger:=PowerNo;
        Table_Power.FieldByName('LiuP').AsFloat:=LiuP[0];
        Table_Power.FieldByName('LiuQ').AsFloat:=LiuQ[0];
        Table_Power.FieldByName('GeP').AsFloat:=GeP[0];
        Table_Power.FieldByName('GeQ').AsFloat:=GeQ[0];
        Table_Power.FieldByName('DaP').AsFloat:=DaP[0];
        Table_Power.FieldByName('DaQ').AsFloat:=DaQ[0];
        Table_Power.FieldByName('QinP').AsFloat:=QinP[0];
        Table_Power.FieldByName('QinQ').AsFloat:=QinQ[0];
        Table_Power.Post;
        Table_Power.Close;

        Table_Consumer.Open;
        Table_Consumer.First;
            for i:=1 to 9 do
            begin
            Table_Consumer.Edit;
            Table_Consumer.FieldByName('Consum').AsFloat:=Total*Con_Rate[i-1]*Time/3600;
            Table_Consumer.FieldByName('Need').AsFloat:=Total*Con_Rate[i-1]*Time*0.5/3600;
            Table_Consumer.Post;
            Table_Consumer.Next;
            end;

            Case RadioGroup1.ItemIndex of
                0:  Table_Consumer.First;
                1:  Table_Consumer.FindKey(['2']);
                2:  Table_Consumer.FindKey(['3']);
                3:  Table_Consumer.FindKey(['4']);
                4:  Table_Consumer.FindKey(['5']);
                5:  Table_Consumer.FindKey(['6']);
                6:  Table_Consumer.FindKey(['7']);
                7:  Table_Consumer.FindKey(['8']);
                8:  Table_Consumer.FindKey(['9']);
            end;
            Lb_Shoud.Caption:=RealToStr(Table_Consumer.FieldByName('Need').AsFloat);
            Lb_RunOut.Caption:=RealToStr(Table_Consumer.FieldByName('Consum').AsFloat);
            Table_Consumer.Close;
        end;

        Series_Liu.Clear;
        Series_Ge.Clear;
        Series_Da.Clear;
        Series_Qin.Clear;
        Series_Liu.LinePen.Width:=2;
        Series_Ge.LinePen.Width:=2;
        Series_Da.LinePen.Width:=2;
        Series_Qin.LinePen.Width:=2;

        Lb_Liu.Caption:=IntToStr(Trunc(LiuP[0]))+'万kw';
        Lb_Ge.Caption:=IntToStr(Trunc(GeP[0]))+'万kw';
        Lb_Da.Caption:=IntToStr(Trunc(DaP[0]))+'万kw';
        Lb_Qin.Caption:=IntToStr(Trunc(QinP[0]))+'万kw';
        temp1:=Trunc(LiuP[0]+GeP[0]+QinP[0]+DaP[0]);
        Lb_Give.Caption:=IntToStr(temp1)+'万kw';
        Lb_Aver.Caption:=IntToStr(Trunc((LiuP[0]+GeP[0]+QinP[0]+DaP[0])/4))+'万kw';
        temp2:=2-Trunc(Random(5));
        Lb_Diff.Caption:=IntToStr(temp2)+'万kw';
        Lb_Need.Caption:=IntToStr(temp1-temp2)+'万kw';
        Lb_C.Caption:=RealToStr(Total*Time/3600);

        for i:=0 to 59 do
        begin
          case SeriesNo of
            1:  begin
                Chart1.LeftAxis.Maximum:=20;
                Chart1.LeftAxis.Title.Caption:='有功功率(单位:万kw)';
                Chart1.Title.Text.SetText('瞬时有功功率曲线');
                Series_Liu.AddXY(i,LiuP[i],IntToStr(i),clred);
                Series_Ge.AddXY(i,GeP[i],IntToStr(i),clgreen);
                Series_Da.AddXY(i,DaP[i],IntToStr(i),clblue);
                Series_Qin.AddXY(i,QinP[i],IntToStr(i),clyellow);
                end;
            2:  begin
                Chart1.LeftAxis.Maximum:=8;
                Chart1.LeftAxis.Title.Caption:='无功功率(单位:万kw)';
                Chart1.Title.Text.SetText('瞬时无功功率曲线');
                Series_Liu.AddXY(i,LiuQ[i],IntToStr(i),clred);
                Series_Ge.AddXY(i,GeQ[i],IntToStr(i),clgreen);
                Series_Da.AddXY(i,DaQ[i],IntToStr(i),clblue);
                Series_Qin.AddXY(i,QinQ[i],IntToStr(i),clyellow);
                end;
            3:  begin
                Chart1.LeftAxis.Maximum:=25;
                Chart1.LeftAxis.Title.Caption:='视在功率(单位:万kw)';
                Chart1.Title.Text.SetText('瞬时视在功率曲线');
                Series_Liu.AddXY(i,LiuS[i],IntToStr(i),clred);
                Series_Ge.AddXY(i,GeS[i],IntToStr(i),clgreen);
                Series_Da.AddXY(i,DaS[i],IntToStr(i),clblue);
                Series_Qin.AddXY(i,QinS[i],IntToStr(i),clyellow);
                end;
            4:  begin
                Chart1.LeftAxis.Maximum:=1;
                Chart1.LeftAxis.Title.Caption:='功率因数';
                Chart1.Title.Text.SetText('瞬时功率因数曲线');
                Series_Liu.AddXY(i,LiuR[i],IntToStr(i),clred);
                Series_Ge.AddXY(i,GeR[i],IntToStr(i),clgreen);
                Series_Da.AddXY(i,DaR[i],IntToStr(i),clblue);
                Series_Qin.AddXY(i,QinR[i],IntToStr(i),clyellow);
                end;
           end;

        end;
end;

procedure TForm1.SpeedButton_PClick(Sender: TObject);
begin
     SeriesNo:=1;//有功功率
end;

procedure TForm1.SpeedButton_QClick(Sender: TObject);
begin
     SeriesNo:=2;// 无功功率
end;

procedure TForm1.SpeedButton_SClick(Sender: TObject);
begin
     SeriesNo:=3;//视在功率
end;

procedure TForm1.SpeedButton_RClick(Sender: TObject);
begin
     SeriesNo:=4;//功率因数
end;

procedure TForm1.FormShow(Sender: TObject);
var
i:Integer;
begin
        With DM do
        begin
             Table_Power.Open;
             if Table_Power.RecordCount>60 then
             begin
                Table_power.First;
                Table_Power.MoveBy(60);
                for i:=1 to Table_Power.RecordCount-60 do
                begin
                Table_Power.Delete;
                end;
             end;

             Table_Power.Last;
             for i:=0 to 59 do
             begin
             LiuP[59-i]:=Table_Power.FieldByName('LiuP').AsFloat;
             LiuQ[59-i]:=Table_Power.FieldByName('LiuQ').AsFloat;
             LiuS[59-i]:=Sqrt(LiuP[59-i]*LiuP[59-i]+LiuQ[59-i]*LiuQ[59-i]);
             LiuR[59-i]:=LiuP[59-i]/LiuS[59-i];

             GeP[59-i]:=Table_Power.FieldByName('GeP').AsFloat;
             GeQ[59-i]:=Table_Power.FieldByName('GeQ').AsFloat;
             GeS[59-i]:=Sqrt(GeP[59-i]*GeP[59-i]+GeQ[59-i]*GeQ[59-i]);
             GeR[59-i]:=GeP[59-i]/GeS[59-i];

⌨️ 快捷键说明

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