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

📄 unt_simulate.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
   //如果是回风巷、运输巷
   if (Task[Task_Index].TaskT_Id=2) //(Task[Task_Index].TaskT_Id=1)
      and((Task[Task_Index].P1_Dis-Task[Task_Index].OneDis)>1e-3) then
   begin
     inc(Task[Task_Index].P1_Id);
     Task[Task_Index].TwoAlfa:=Task[Task_Index].TwoAlfa-Task[Task_Index].OneAlfa;
     Task[Task_index].OneAlfa:=
         Direct(Task[Task_Index].OneSide.Ps[Task[Task_Index].P1_Id],
                Task[Task_Index].OneSide.Ps[Task[Task_Index].P1_Id+1]);
     Task[Task_Index].TwoAlfa:=Task[Task_Index].TwoAlfa+Task[Task_Index].OneAlfa;
     Task[Task_index].OneDis:=
         Distance(Task[Task_Index].OneSide.Ps[Task[Task_Index].P1_Id],
                  Task[Task_Index].OneSide.Ps[Task[Task_Index].P1_Id+1])/TScale;
     Task[Task_Index].P1_Dis:=0;
   end;
   Task[Task_index].P_p1:=DirectXY(Task[Task_index].OneSide.Ps[Task[Task_index].P1_Id],
                  Task[Task_index].OneAlfa,Task[Task_index].P1_Dis*Tscale);
   Task[Task_index].P_p2:=DirectXY(Task[Task_index].P_p1,
                  Task[Task_index].TwoAlfa,Lane[Lane_index].W*Tscale);
   //进行断层处理
   frustrate_deal;
  end;

  //---------计算硬度和计算含煤系数----------------
  s:=Lane[Lane_index].W;
  for i:=0 to Task[Task_Index].TFcou-1 do
    s:=s-Task[Task_Index].TaskFru[i].simlen;

  //计算出煤量
  Task[TasK_index].CoalPaj:=s*Lane[Lane_index].CoalPa/Lane[Lane_index].W;
  Task[TasK_index].Min_Q:=Task[Task_index].CoalPaj*Lane[Lane_index].R
               *DEqu[Task[Task_index].Equ_Id].B*Lane[Lane_Index].Sect;

  //计算硬度
  Task[Task_index].Fj:=s*Lane[Lane_index].F/Lane[Lane_index].W;
  for i:=0 to Task[Task_Index].TFcou-1 do
  begin
   Task[TasK_index].Fj:=Task[TasK_index].Fj
         +Task[Task_Index].TaskFru[i].simlen*Task[Task_Index].TaskFru[i].Rock
         *(1-Task[Task_Index].TaskFru[i].F_Pa)/(0.8*Lane[Lane_index].W)
         +Task[Task_Index].TaskFru[i].simlen*Lane[Lane_index].F
         *(Task[Task_Index].TaskFru[i].F_Pa-0.2)/(0.8*Lane[Lane_index].W);
   Task[TasK_index].CoalPaj:=Task[TasK_index].CoalPaj
         +Task[Task_Index].TaskFru[i].simlen*Lane[Lane_index].CoalPa
         *(Task[Task_Index].TaskFru[i].F_Pa-0.2)/(0.8*Lane[Lane_index].W);
  end;
end;

//每个巷道
procedure TSimulate.BMD_Simu;
var Id:integer;
    CostT:double;
begin
  flag:=true;
  Lane[Lane_Index].TEyss:=0;
  Lane[Lane_Index].DrillT:=0;
  Lane[Lane_Index].CarryT:=0;
  Lane[Lane_Index].D_Dis:=0;
  while flag do
  begin
    //巷道向前推进一个截深
    Lane[Lane_index].D_Dis:=Lane[Lane_index].D_Dis+DEqu[Task[Task_Index].Equ_Id].B;
    //每个截深的煤量等计算
    BMD_Action;
    //如果是炮掘
    if Lane[Lane_Index].DrillT_Id=1 then
    begin
     //计算炮眼个数
     Lane[Lane_Index].Eyss:=trunc(3.3*power(Task[Task_Index].Fj*Sqr(Lane[Lane_Index].Sect),0.33))+1;
     Lane[Lane_Index].TEyss:=Lane[Lane_Index].TEyss+Lane[Lane_Index].Eyss;
     //计算打眼时间和装运岩时间
     Lane[Lane_Index].DrillT:=Lane[Lane_Index].DrillT
         +Lane[Lane_Index].Eyss
         *DEqu[Task[Task_Index].Equ_Id].B/DEqu[Task[Task_Index].Equ_Id].StanV;
     Lane[Lane_Index].CarryT:=Lane[Lane_Index].CarryT+Lane[Lane_Index].Sect
          *DEqu[Task[Task_Index].Equ_Id].B/DEqu[Task[Task_Index].Equ_Id].LoadP;
    end;

    //如果是机掘
    if Lane[Lane_Index].DrillT_Id=2
     then Lane[Lane_Index].DrillT:=Lane[Lane_Index].DrillT
            +(Lane[Lane_Index].Sect/DEqu[Task[Task_Index].Equ_Id].s)
            *DEqu[Task[Task_Index].Equ_Id].R/DEqu[Task[Task_Index].Equ_Id].StanV;

    //累计产量
    Task[Task_Index].Q:=Task[Task_Index].Q+Task[Task_Index].Min_Q;
    Task[Task_Index].Min_Q:=0;
    //如果这个工作面模拟结束
    if (Lane[Lane_Index].D_Dis-Task[Task_Index].Dis)>1e-3 then
    begin
     //计算工期        
     if Lane[Lane_Index].D_Unit='天' then Id:=1;
     if Lane[Lane_Index].D_Unit='旬' then Id:=10;
     if Lane[Lane_Index].D_Unit='月' then Id:=30;
     Task[Task_Index].WorkDay:=
      trunc(Task[Task_Index].Dis*Id/(Lane[Lane_Index].DayDis*Task[Task_Index].TTSysPara))+1;
     //计算设备使用费用月租赁费
     Task[Task_Index].s_cost:=DEqu[Task[Task_Index].Equ_Id].ZhuLin
        *Task[Task_Index].WorkDay/30;
     //计算电费消耗+照明
     if Lane[Lane_Index].DrillT_Id=1 then
       Task[Task_Index].E_cost:=(Lane[Lane_Index].DrillT
           *DEqu[Task[Task_Index].Equ_Id].Drill_E
           +(DEqu[Task[Task_Index].Equ_Id].Load_E+DEqu[Task[Task_Index].Equ_Id].Carr_E)
           *Lane[Lane_Index].CarryT)/60;//电费
     if Lane[Lane_Index].DrillT_Id=2 then
       Task[Task_Index].E_cost:=(DEqu[Task[Task_Index].Equ_Id].Drill_E
           +DEqu[Task[Task_Index].Equ_Id].Load_E+DEqu[Task[Task_Index].Equ_Id].Carr_E)
           *Lane[Lane_Index].DrillT/60;
     Task[Task_Index].E_cost:=Task[Task_Index].E_cost
          +Task[Task_Index].LightP*Task[Task_Index].WorkDay*24;
     Task[Task_Index].E_cost:=Task[Task_Index].E_cost*Material[0].UntCost;
      //计算材料消耗
     for Id:=0 to Lane[Lane_Index].LMCou-1 do
     begin
       if Lane[Lane_Index].LaneChMat[Id].CostT_N='电费'
        then continue;
       if Lane[Lane_Index].LaneChMat[Id].CostT_N='米'
        then CostT:=Task[Task_Index].Dis;
       if Lane[Lane_Index].LaneChMat[Id].CostT_N='吨煤'
        then CostT:=Task[Task_Index].Q;
       if Lane[Lane_Index].LaneChMat[Id].CostT_N='万吨煤'
        then CostT:=Task[Task_Index].Q/10000;
       if Lane[Lane_Index].LaneChMat[Id].CostT_N='炮眼'
        then CostT:=Lane[Lane_Index].TEyss;
       if Lane[Lane_Index].LaneChMat[Id].CostT_N='天'
        then CostT:=Task[Task_Index].WorkDay;
       Task[Task_Index].Mat_cost:=Task[Task_Index].Mat_cost+
               CostT*Lane[Lane_Index].LaneChMat[Id].UntCost
               *Material[Lane[Lane_Index].LaneChMat[Id].MDMat_In].UntCost;
     end;
     Task[Task_Index].Q:=Task[Task_Index].Q/10000;
     Task[Task_index].IsSim:=true;
     flag:=false;
    end;
  end;//while flag
  Simu;
end;

{安装准备模拟}
procedure TSimulate.Pre_Simu;
var ECou:Integer;
    CostT:double;
begin
  //指定安装准备工序工期

  {Frm_SimAcc:=TFrm_SimAcc.Create(nil);
  with Frm_SimAcc,frm_data do
  begin
    ADOT_TaskArea.Locate('Area_Id;Task_Id',vararrayof([Task[Task_Index].Area_Id,Task[Task_Index].Task_Id]),[loCaseInsensitive]);
    caption:=Task[Task_Index].Task_N+'工序参数!';
    setvisible(false,false,true);
    ShowModal;
  end;
  Task[Task_Index].WorkDay:=frm_data.ADOT_TaskArea.fieldbyname('WorkDay').AsInteger;
  //照明
  Task[Task_Index].E_cost:=
    Task[Task_Index].LightP*Task[Task_Index].WorkDay*24*Material[0].UntCost;


  Task[Task_index].IsSim:=true;
  Simu;}
end;

{回采模拟}
//每刀
procedure TSimulate.Mine_Action;
var TS,v0,s,Q:double;
    i,k:integer;
begin
  Task[Task_Index].P1_Dis:=Task[Task_Index].P1_Dis+MEqu[Task[Task_Index].Equ_Id].B;
  Task[Task_Index].P2_Dis:=Task[Task_Index].P2_Dis+MEqu[Task[Task_Index].Equ_Id].B;
  Task[TasK_index].TFcou:=0;
  //对回采工作面进行点处理和断层处理
  Task[Task_Index].FDis:=Work[Mine_Index].FDis;
  if (Task[Task_Index].OneSide.PCou>0)
     and(Task[Task_Index].TwoSide.PCou>0) then
  begin
   if (Task[Task_Index].P1_Dis-Task[Task_Index].OneDis)>1e-3 then
   begin
    dec(Task[Task_Index].P1_Id);
    Task[Task_index].OneAlfa:=
      Direct(Task[Task_Index].OneSide.Ps[Task[Task_Index].P1_Id],
             Task[Task_Index].OneSide.Ps[Task[Task_Index].P1_Id-1]);
    Task[Task_index].OneDis:=
      Distance(Task[Task_Index].OneSide.Ps[Task[Task_Index].P1_Id],
               Task[Task_Index].OneSide.Ps[Task[Task_Index].P1_Id-1])
      *abs(cos(Task[Task_Index].OneAlfa-Task[Task_Index].MinAlfa-pi/2))/TScale;
    Task[Task_Index].P1_Dis:=0;
   end;
   if (Task[Task_Index].P2_Dis-Task[Task_Index].TwoDis)>1e-3 then
   begin
    dec(Task[Task_Index].P2_Id);
    Task[Task_index].TwoAlfa:=
      Direct(Task[Task_Index].TwoSide.Ps[Task[Task_Index].P2_Id],
             Task[Task_Index].TwoSide.Ps[Task[Task_Index].P2_Id-1]);
    Task[Task_index].TwoDis:=
      Distance(Task[Task_Index].TwoSide.Ps[Task[Task_Index].P2_Id],
               Task[Task_Index].TwoSide.Ps[Task[Task_Index].P2_Id-1])
      *abs(cos(Task[Task_Index].TwoAlfa-Task[Task_Index].MinAlfa-pi/2))/TScale;
    Task[Task_Index].P2_Dis:=0;
   end;
   Task[Task_index].P_p1:=DirectXY(Task[Task_index].OneSide.Ps[Task[Task_index].P1_Id],
       Task[Task_index].OneAlfa,Task[Task_index].P1_Dis
       *Tscale/abs(cos(Task[Task_Index].OneAlfa-Task[Task_Index].MinAlfa-pi/2)));

   Task[Task_index].P_p2:=DirectXY(Task[Task_index].TwoSide.Ps[Task[Task_index].P2_Id],
       Task[Task_index].TwoAlfa,Task[Task_index].P2_Dis
       *Tscale/abs(cos(Task[Task_Index].TwoAlfa-Task[Task_Index].MinAlfa-pi/2)));
   //计算回采面的实际长度
   Task[Task_Index].FDis:=Distance(Task[Task_Index].P_p1,Task[Task_Index].P_p2)/TScale;
   //进行断层处理
   frustrate_deal;
  end;
  //工作面面长和刀数之和
  Work[Mine_index].FDisT:=Work[Mine_index].FDisT+Task[Task_Index].FDis;
  Work[Mine_index].DaoT:=Work[Mine_index].DaoT+1;
  //计算没有断层的长度
  s:=Task[Task_Index].FDis;
  for i:=0 to Task[Task_Index].TFcou-1 do
    s:=s-Task[Task_Index].TaskFru[i].simlen;

  //计算煤量和放煤量(过断层时顶煤不放出)
  Q:=0;
  Q:=Q+s*(Work[Mine_index].H+Work[Mine_index].MFH)
     *MEqu[Task[Task_Index].Equ_Id].B*Work[Mine_index].R;
  for i:=0 to Task[Task_Index].TFcou-1 do
    Q:=Q+Task[Task_Index].TaskFru[i].simlen
       *Work[Mine_index].H*MEqu[Task[Task_index].Equ_Id].B
       *(Task[Task_index].TaskFru[i].F_Pa-0.2)/0.8*Work[Mine_index].R;
  Task[Task_Index].Min_Q:=Q*Work[Mine_index].MineRate;

  //计算硬度
  Task[TasK_index].Fj:=s*Work[Mine_index].F/Task[Task_Index].FDis;
  for i:=0 to Task[Task_Index].TFcou-1 do
    Task[TasK_index].Fj:=Task[TasK_index].Fj+
          Task[Task_Index].TaskFru[i].simlen*Task[Task_Index].TaskFru[i].Rock
          *(1-Task[Task_Index].TaskFru[i].F_Pa)/(0.8*Task[Task_Index].FDis)
          +Task[Task_Index].TaskFru[i].simlen*Work[Mine_index].F
          *(Task[Task_Index].TaskFru[i].F_Pa-0.2)/(0.8*Task[Task_Index].FDis);
end;

procedure TSimulate.Mine_Simu;
var Id:integer;
    CostT:Double;
begin
 flag:=true;
 Work[Mine_Index].TEyss:=0;
 Work[Mine_Index].MineT:=0;
 Work[Mine_Index].CarryT:=0;
 Work[Mine_index].M_dis:=0;
 Work[Mine_index].FDisT:=0;
 Work[Mine_index].DaoT:=0;
 while flag=true do
 begin
   //回采面向前推进一刀
   Work[Mine_index].M_dis:=Work[Mine_index].M_dis+MEqu[Task[Task_index].Equ_Id].B;
   //计算回采出煤量
   Mine_Action;

   //如果是炮采
   if Work[Mine_Index].MineT_Id=1 then
   begin
    //计算炮眼个数
    Work[Mine_Index].Eyss:=trunc(3.3*power(Task[Task_Index].Fj*Sqr(Task[Task_Index].FDis*Work[Mine_Index].H),0.33))+1;
    Work[Mine_Index].TEyss:=Work[Mine_Index].TEyss+Work[Mine_Index].Eyss;
    //计算
    Work[Mine_Index].MineT:=Work[Mine_Index].MineT
          +Work[Mine_Index].Eyss
          *MEqu[Task[Task_Index].Equ_Id].B/MEqu[Task[Task_Index].Equ_Id].StanV;
    Work[Mine_Index].CarryT:=Work[Mine_Index].CarryT+Task[Task_Index].FDis
          *Work[Mine_Index].H
          *MEqu[Task[Task_Index].Equ_Id].B/MEqu[Task[Task_Index].Equ_Id].CarryP;
   end;

   //如果是机采
   if Work[Mine_Index].MineT_Id>1 then
   begin
    if MEqu[Task[Task_Index].Equ_Id].Dors=1
     then Work[Mine_Index].MineT:=2*Work[Mine_Index].MineT
            +Task[Task_Index].FDis/MEqu[Task[Task_Index].Equ_Id].StanV;
    if MEqu[Task[Task_Index].Equ_Id].Dors=2
     then Work[Mine_Index].MineT:=Work[Mine_Index].MineT
            +Task[Task_Index].FDis/MEqu[Task[Task_Index].Equ_Id].StanV;
   end;

   //累计产量
   Task[Task_Index].Q:=Task[Task_Index].Q+Task[Task_Index].Min_Q;
   Task[Task_Index].Min_Q:=0;
   //如果这个工作面模拟结束
   if (Work[Mine_Index].M_dis-Task[Task_Index].Dis)>1e-3 then
   begin
     //计算工期
     if Work[Mine_Index].M_Unit='天' then Id:=1;
     if Work[Mine_Index].M_Unit='旬' then Id:=10;
     if Work[Mine_Index].M_Unit='月' then Id:=30;
     Task[Task_Index].FDis:=Work[Mine_Index].FDisT/Work[Mine_Index].DaoT;
     Task[Task_Index].WorkDay:=
        trunc(Task[Task_Index].Dis*Id*Task[Task_Index].FDis/(Work[Mine_Index].DayDis*Work[Mine_Index].FDis*Task[Task_Index].TTSysPara))+1;
     //计算设备使用费用月租赁费
     Task[Task_Index].s_cost:=DEqu[Task[Task_Index].Equ_Id].ZhuLin
        *Task[Task_Index].WorkDay/30;
     //计算电费消耗
     if Work[Mine_Index].MineT_Id=1 then
      Task[Task_Index].E_cost:=(Work[Mine_Index].MineT
         *MEqu[Task[Task_Index].Equ_Id].Mine_E
         +MEqu[Task[Task_Index].Equ_Id].Carr_E*Work[Mine_Index].CarryT)/60;
     if Work[Mine_Index].MineT_Id>1 then
       Task[Task_Index].E_cost:=Work[Mine_Index].MineT
         *(MEqu[Task[Task_Index].Equ_Id].Mine_E    //Ecou同时工作采煤设备套数
         +MEqu[Task[Task_Index].Equ_Id].Carr_E)/60;//电费
     //照明
     Task[Task_Index].E_cost:=Task[Task_Index].E_cost
          +Task[Task_Index].LightP*Task[Task_Index].WorkDay*24;
     Task[Task_Index].E_cost:=Task[Task_Index].E_cost*Material[0].UntCost;
         //计算材料消耗
     for Id:=0 to Work[Mine_index].WMCou-1 do
     begin
      if Work[Mine_index].WorkChMat[Id].CostT_N='电费'
       then continue;
      if Work[Mine_index].WorkChMat[Id].CostT_N='米'
       then CostT:=Task[Task_Index].Dis;
      if Work[Mine_index].WorkChMat[Id].CostT_N='吨煤'
       then CostT:=Task[Task_Index].Q;
      if Work[Mine_index].WorkChMat[Id].CostT_N='万吨煤'
       then CostT:=Task[Task_Index].Q/10000;
      if Work[Mine_index].WorkChMat[Id].CostT_N='炮眼'
       then CostT:=Lane[Lane_Index].TEyss;
      if Work[Mine_index].WorkChMat[Id].CostT_N='天'
       then CostT:=Task[Task_Index].WorkDay;
      Task[Task_Index].Mat_cost:=Task[Task_Index].Mat_cost+
              CostT*Work[Mine_index].WorkChMat[Id].UntCost
              *Material[Work[Mine_index].WorkChMat[Id].MDMat_In].UntCost;
     end;
     Task[Task_Index].Q:=Task[Task_Index].Q/10000;
     Task[Task_index].IsSim:=true;
     flag:=false;
   end;
 end;//while flag
 Simu;
end;

end.

⌨️ 快捷键说明

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