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