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

📄 waterctrl.~pas

📁 delphi+access,水位控制系统
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
       +MB_DEFBUTTON2) = IDOK then
FormWaterControl.Close;
end;

procedure TFormWaterControl.TimerRedoTimer(Sender: TObject);
begin
//实验过程重放,绘制水箱水面高度变化情况,绘制水面控制曲线
    WaterHeightLeft := DataSource1.DataSet.Fields[1].AsInteger;
    Shape_A.Top := Shape3Top - WaterHeightLeft;
    Shape_A.Height := WaterHeightLeft;
    Shape_A.Repaint;
    Edit_A_Position.Text := DataSource1.DataSet.Fields[1].AsString;
    Chart1.Series[0].AddXY(DataSource1.DataSet.Fields[0].AsInteger,
         DataSource1.DataSet.Fields[1].AsInteger/10, '', clRed);
    DataSource1.DataSet.next;
end;

procedure TFormWaterControl.TimerControlTimer(Sender: TObject);
var
   ac,au,E, ek, uk, h2_real,h2_hope: Real;
   Elist : array[0..6] of Integer;
   i, k : Integer;
   Ulist : array[0..6] of Real;
   ring2_value : Boolean;
begin
   //以下代码省略了保存到数据库的部分
   ring2_value := False;//
   h2_hope := SEdit_A_HP.Value / 12;   //将期望水位值转换为相对值,10.0
   ac := 1.0/3.0;   //根据实际误差量范围e=-1~1
   au := 5.0/3.0;   //实际控制量范围u=-5~5
   Ulist[0] := 2.59;
   Ulist[1] := 2.0;
   Ulist[2] := 1.26;
   Ulist[3] := 0;
   Ulist[4] := -1.26;
   Ulist[5] := -2.0;
   Ulist[6] := -2.56; //中位数法
   Elist[0] := -3;
   Elist[1] := -2;
   Elist[2] := -1;
   Elist[3] := 0;
   Elist[4] := 1;
   Elist[5] := 2;
   Elist[6] := 3;
   k := 0;
   if (ring2_value = True) then
    begin
		 h2_real := readadc(1);//读入参数
		 //变换
		 h2_real_real :=(h2_real-1.0)*30.0/4.0;
     ek := h2_real_real - h2_hope;
		 //模糊化
     E := ek/ac;
     //查表
		 if (E < Elist[0]) then k := 0
		 else if (E >= Elist[6]) then k := 6
		 else
         begin
		      for i := 0 to 5 do
            begin
		  	       if (E >= Elist[i]) and (E < Elist[i+1]) then
                 begin
		  	           if (E - Elist[i] <= Elist[i+1]-E)  then k := i
                   else
                     begin k := i+1; end;
		  	         end;
		  	    end;
		  	 end;
 	  //控制量化值到实际输出
		uk := 5 + Ulist[k] * au;
		if (uk < 0) then uk := 0.0
		else if (uk > 10) then uk := 9.9;
    //实际输出
  	senddac(uk);
  end;
end;

procedure TFormWaterControl.Action_SettingExecute(Sender: TObject);
begin
  FormSetting.Show;
end;

procedure TFormWaterControl.Action_DataViewExecute(Sender: TObject);
begin
   FormDataView.Show;
end;

procedure TFormWaterControl.Action_AboutExecute(Sender: TObject);
begin
  FormAbout.Show;
end;

procedure TFormWaterControl.Action_HelpExecute(Sender: TObject);
begin
  FormHelp.Show;
end;

procedure TFormWaterControl.Action_ClearExecute(Sender: TObject);
begin
if Application.MessageBox('你确定要清除实验结果吗?',
    '水箱水位模糊控制系统',MB_OKCANCEL+MB_ICONINFORMATION+MB_SYSTEMMODAL
       +MB_DEFBUTTON2) = IDOK then
     begin
       DataSource1.DataSet.Edit;
       DataSource1.DataSet.Refresh;
       if DataSource1.DataSet.RecordCount <=0 then
       begin
         DataSource1.DataSet.First;
         while not DataSource1.DataSet.Eof do
          begin
           DataSource1.DataSet.Delete;
           DataSource1.DataSet.Next;
          end;
        end;
     DataSource1.DataSet.Post;
     DataSource1.DataSet.Close;
     end;
end;

procedure TFormWaterControl.Action_ReDoExecute(Sender: TObject);
begin
if TimerRedo.Enabled = False then
   begin
   TimerRedo.Enabled := True;
   DataSource1.DataSet.First;
   Chart1.Series[0].Clear;
   BTN_ReDo.Caption := '暂停(&R)';
   Menu_Redo.Caption := '暂停(&R)';
   end
else
   begin
   TimerRedo.Enabled := False;
   BTN_ReDo.Caption := '重放(&R)';
   Menu_Redo.Caption := '重放(&R)';
   end;
end;

procedure TFormWaterControl.Action_StartExecute(Sender: TObject);
begin
       DataSource1.DataSet.Edit;
       DataSource1.DataSet.Refresh;
       if DataSource1.DataSet.RecordCount <=0 then
       begin
         DataSource1.DataSet.First;
         while not DataSource1.DataSet.Eof do
          begin
           DataSource1.DataSet.Delete;
           DataSource1.DataSet.Next;
          end;
        end;
     DataSource1.DataSet.Post;
     DataSource1.DataSet.Refresh;
  if TimerControl.Enabled = True then exit
  else
    begin
      TimerControl.Enabled := True;
      Timer_MaxTime.Enabled := True;
      Timer_Stable.Enabled := True;
    end;
end;

procedure TFormWaterControl.Action_StopExecute(Sender: TObject);
begin
 if TimerControl.Enabled = False then exit
 else
   begin
     TimerControl.Enabled := False;
     Timer_MaxTime.Enabled := False;
     Timer_Stable.Enabled := False;
   end;
end;

procedure TFormWaterControl.Timer_MaxTimeTimer(Sender: TObject);
begin
   if Application.MessageBox('达到设定最长时间,但系统未稳定,要终止实验?',
    '水箱水位模糊控制系统',MB_OKCANCEL+MB_ICONINFORMATION+MB_SYSTEMMODAL
       +MB_DEFBUTTON2) = IDOK then
   Action_Stop.Execute;
end;

procedure TFormWaterControl.Timer_StableTimer(Sender: TObject);
begin
 //判断是否在稳定范围
 if ((h2_real_real - StableValue2) <= StableValue2 * (1 - ErrorValue2))
    or ((h2_real_real - StableValue2) >= StableValue2 * (1 + ErrorValue2))
    then Stable_tmp := GetTickCount;  //没有的话,重新刷新稳定时间
 if ((GetTickCount - Stable_tmp) / 1000 > StableTime_HP) then
                                     //判断是否处于稳定状态
  begin
   if Application.MessageBox('已经满足设定要求了,要终止实验?',
    '水箱水位模糊控制系统',MB_OKCANCEL+MB_ICONINFORMATION+MB_SYSTEMMODAL
       +MB_DEFBUTTON2) = IDOK then
      Action_Stop.Execute;
  end;
end;

procedure TFormWaterControl.Menu_SaveAsClick(Sender: TObject);
var FromMDB, DesMDB : String;
begin
SaveDialog1.Title := '请输入新的文件名!';
SaveDialog1.Filter := 'Microsoft Access数据库文件(*.mdb)|*.mdb';
SaveDialog1.DefaultExt:= 'MDB';
if SaveDialog1.Execute then
 begin
   DesMDB := ChangeFileExt(SaveDialog1.FileName,'.MDB');
   if FileExists(DesMDB) then
      Begin
       showmessage('数据库已存在!请重新设定文件名。');
       Menu_SaveAsClick(Sender);
      end
   else
      begin
       FromMDB := ExtractFilePath(ParamStr(0)) + 'water.mdb';
       copyfile(PChar(FromMDB), PChar(DesMDB), False);
      end;
 end;
end;

procedure TFormWaterControl.Menu_OpenClick(Sender: TObject);
var FileTemp, DesMDB : String;
begin
if Application.MessageBox('要打开新的实验结果,将清除当前的实验结果,继续?',
    '水箱水位模糊控制系统',MB_OKCANCEL+MB_ICONINFORMATION+MB_SYSTEMMODAL
       +MB_DEFBUTTON2) = IDOK then
  begin
   OpenDialog1.Title := '请选择原数据库文件!';
   OpenDialog1.Filter := 'Microsoft Access数据库文件(*.mdb)|*.mdb';
   OpenDialog1.DefaultExt:= 'MDB';
   if OpenDialog1.Execute then
   begin
     FileTemp := ChangeFileExt(OpenDialog1.FileName,'.MDB');
     DesMDB := ExtractFilePath(ParamStr(0)) + 'water.MDB';
     DeleteFile(DesMDB);
     copyfile(PChar(FileTemp), PChar(DesMDB), False);
   end;
  end;
end;

procedure TFormWaterControl.Menu_ChartSaveClick(Sender: TObject);
var FileTemp : String;
begin
SaveDialog1.Title := '请输入图像文件名!';
SaveDialog1.Filter := '位图格式图像文件(*.bmp)|*.bmp';
SaveDialog1.DefaultExt:= 'BMP';
  if SaveDialog1.Execute then
     begin
     FileTemp := ChangeFileExt(SaveDialog1.FileName,'.BMP');
     Chart1.SaveToBitmapFile(FileTemp);
     end;
end;

end.

⌨️ 快捷键说明

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