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

📄 unt_simulate.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:

{*******************************************}
{本单元包含了采掘过程动态模拟和及其生产成本 }
{模拟及采掘生产结果在开拓平面图上的动态演示 }
{为了加快模拟速度,模拟采用内外存交换的方法 }
{工作面和巷道只模拟一次                     }
{根据模拟出的时间,针对不同计划放案编制计划 }
{*******************************************}

unit Unt_Simulate;

interface
  uses Unt_CAD_Pro_Tool,math,Controls,SysUtils,DB,Classes,
       Graphics,Dialogs,AdoDB,Variants;

type
  TPoint2=record
    x:single;
    y:single;
    z:single;
  end;
 //~~~~~~~~~~~~~~~~~~~设备~~~~~~~~~~~~~~~~~~~~~~~~~~
  //回采设备
  TMEqu=record
      MineE_Id:integer;//采煤机设备索引(回采设备)
      Dors:integer;   //滚筒数
      B:double;       //截深 0.6 m
      R:Double;//钻头直径
      BodyL:double;   //机器长 6
      Wid:double;//液压支架的中心距
      Mine_E:double;   //采煤机功率
      Carr_E:Double; //运输机功率
      CarryP:double; //运输能力
      StanV:double;   //额定速度
      ZhuLin:Double;//租赁费
   end;
   //掘进设备         
   TDEqu=record
      DrilE_Id:integer;
      B:double; //钻眼深度  0.6 m ,切割深度
      R:Double;//钻头直径,切割宽度
      s:Double;//切割面积
      Drill_E:double; //电动机功率
      Load_E:double;//装载机功率
      Carr_E:Double; //运载机功率
      LoadP:double;//转载运载最小能力
      StanV:double;  //额定速度
      ZhuLin:Double;//租赁费
   end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   //材料对象参数
   TMaterial=record    //public
       Mat_Id:integer; //材料索引
       Mat_N:string;   //材料名称
       MatT_Id:integer;
       UntCost:double; //材料单价
   end;
   TWLChMaterial=record      //采掘面材料参数
       MDMat_In:integer;//材料  ~~~~下标~~~~
       CostT_N:String;
       UntCost:double; //单位材料消耗
   end;

   //煤层详细情况
   TCoal=record       //public
       Coal_Id:integer; //煤层索引
       Coal_N:string;   //煤层名称
       Den:double;      //密度
       Hard:double;     //硬度
       CH4:double;      //瓦斯释放量
       MineRate:Double;
       Q:double;
   end;
   TWLChCoal=record   //工序含煤参数   在采掘面中定义
       Coal_In:integer; //含煤下标
       Coal_Pa:double;  //含煤系数
   end;

   //断层的信息记录
   TFrustrate=record         //Public
       Fru_Id:Integer;   //断层名
       FruT_Id:integer;//逆断层 ,正断层
       Dlh:double;     //落差
       Alf:double;     //倾角
       Rock:double;
       Side:TIdSide;   //边
       cal_H:TIdSide;  //牛顿插值
   end;
   TTaskFrustrate=record   //断层模拟对象      在采掘面中生成
      F_Pa:double;   //断层影响系数
      Blen:double;   //断层影响起点距(相对于工作面模拟起点)
      simlen:double; //断层影响长度
      Rock:double;
   end;

   //放顶煤参数,单独形成如果工序涉及综放才形成
   TWorkChMFC=record
      WorkT_In:integer; //工序下标
      MFStep:integer;  //采放(几刀一放)
      MFTC:integer;    //几轮放煤
      MF_TCou:integer; //放煤间距(支架的个数。如果是单轮放煤为0)
   end;

   //工序对象参数 结合图纸确定
   TTask=record //工序对象参数    public
      Area_Id:integer; //采区编号~~~~~这些参数的详细参数使用一位数组表示~~~~~~~~
      Task_Id:integer;//工序编号 工序表中的编号
      Area_N:String; //采区名称
      Task_N:String; //工序名称
      TaskT_Id:integer;//0,1,2,3,4开拓、风巷(轨巷)、开切眼、安装、回采
      WLT_Id:integer;  //特征工作面或特征巷道类型编号
      Equ_Id:integer;//回采或掘进设备配套编号
      WorkDay:integer; //工期
      BTime:TDate;//开始时间
      ETime:TDate;//结束时间
      FDis:Double;//工作面长

      TTSysPara:double;  //系统修正系数

      Dis:double; //工作面走向长
      IsSim:boolean;

      CoalPaj:Double;//含煤系数计算
      Fj:Double;//煤岩坚固性系数计算

      LightP:Double;//照明功率

      Mat_cost:double; // 材料成本
      s_cost:double;   //设备租赁费
      E_cost:double;   //电费

      //模拟和动态演示初始化
      OneSide,TwoSide:TIdSide;//记录工作面两个边
      OneAlfa,TwoAlfa:double; //起终点的矢量角(引导回采走向)对于弯曲工作面是变化值
      OneDis,TwoDis:double;
      Unt_Dis,MinAlfa:double;

      P1_Id,P2_Id:integer;//模拟到当前点的索引, 开始值为-1
      P1_Dis,P2_Dis:Double;//从当前点开始
      P_p1,P_p2:TPoint1;    //模拟当前点P_p1为一刀模拟起点

      TFcou:integer;         //当前工作面断层影响数目
      TaskFru:array of TTaskFrustrate;//根据模拟当前点,直接确定影响模拟的断层情况

      Min_Q:double; //模拟过程中单刀量(万吨)
      Q:double;     //工作面累积产量

      //以下变量是为了计算图中距离
      //Task_Id,TaskT_Id:integer;
      //WorkDay:integer;
      HandleStr1,HandleStr2:string;
      StartP1,EndP1,StartP2,EndP2:TPoint2;
      StartP1_Id,StartP2_Id,EndP1_Id,EndP2_Id:integer;
      GraphDis1,GraphDis2:single;
     //UnitDis:single;
   end;
   //特征工作面
   TWork=record //工作面对象参数
      WorkT_Id:integer;
      H:double;    //工作面采高
      MFH:Double;  //放煤高度,非放煤工作面时为0
      FY_Angle:double;  //倾角
      FDis,FDisT:double; //工作面为面长
      DaoT:integer;
      MineT_Id:integer;//回采工艺
      DayDis:double;//推进度
      M_Unit:string; //推进度单位月、旬、日

      WCCou:integer; //所含煤层数目
      WorkChCoal:array of TWLChCoal;//所含煤层的详细情况
      CoalPa:Double;//含煤系数
      R:double;   //煤的容重(岩巷=0)
      F:double;   //煤岩坚固系数 半煤岩巷加权
      MineRate:double;//回采率

      WMCou:integer; //材料个数
      WorkChMat:array of TWLChMaterial;  //材料索引

      //模拟参数
      MineT:double;   //炮采:打眼时间,机采:采煤机工作时间
      CarryT:Double;  //炮采:装煤运煤时间
      M_dis:double;   //已采长度
      MineP:double;   //当前时刻采煤机位置

      //炮采模拟参数
      MBDis:Double;//一次打眼放炮长度
      Eyss,TEyss:integer;//炮眼个数
      LoadP:double;//装岩生产率
   end;
   //特征巷道
   TLane=record //巷道对象参数
      LaneT_Id:integer;
      Sect:double;   //巷道断面面积
      Ang:double; //倾角
      H:double;   //巷高
      W:double;   //巷宽
      //rock:Double;//围岩硬度
      DrillT_Id:integer;
      DayDis:double;//推进度
      D_Unit:string; //推进度单位月、旬、日

      LCCou:integer; //所含煤层数目
      LaneChCoal:array of TWLChCoal;//所含煤层的详细情况
      CoalPa:Double;//含煤系数
      R:double;   //煤的容重(岩巷=0)
      F:double;   //煤岩坚固系数 半煤岩巷加权

      LMCou:integer; //材料个数
      LaneChMat:array of TWLChMaterial;  //材料索引

      //模拟参数
      DrillT:Double;//炮掘:打眼时间,机械掘进:掘进机工作时间
      CarryT:Double;//炮掘:装岩运岩时间
      Sj:double;
      D_Dis:Double;//已经掘进的长度
      //ACT:integer;    //当前工艺工序 1,2,3,4
      V0:double;
      //炮掘模拟参数
      Eyss,TEyss:integer;//炮眼个数
   end;

   TWorkSystem=record   //模拟时间       public
      W:integer;    //模拟班工作时间
      D:integer;    //模拟日工作时间
      J:integer;    //交接班时间
   end;

  TSimulate=class(tobject) //模拟对象(定义多个变量供后代共享)
   procedure init;
   procedure frustrate_deal; //断层处理,在模拟进刀之时做(位置坐标变化后)
   function GetScale:double;
   //公共调用过程
   procedure Simu;
   //掘进模拟
   procedure BMD_Action;
   procedure BMD_Simu;
   //安装准备模拟
   //procedure Pre_Action;
   procedure Pre_Simu;
   //回采模拟
   procedure Mine_Action; //正常回采过程模拟
   procedure Mine_Simu;
  private
  public
     {按照不同的工艺过程设计模拟采煤过程}
     //图纸标识号
     Graphic_Id:integer;

     IsSimu,stop_mine:boolean;
     TScale:double;//比例尺
     //回采设备
     MEquCou:integer;
     MEqu:array of TMEqu;
     //掘进设备
     DEquCou:integer;
     DEqu:array of TDEqu;

     TaskCou:integer;//工序数目
     Task:array of TTask;//工序详细情况

     FruCou:integer;
     Fru:array of TFrustrate;

     MatCou:integer;//材料个数
     Material:array of TMaterial; //材料详细情况

     CoalCou:integer; //煤层个数
     Coal:array of TCoal; //煤层详细情况


     WFCou,LFCou:integer;//标识特征工作面~巷道总数   工作面,巷道,开切眼,安装
     Work:array of TWork;//工作面情况
     Lane:array of TLane; //巷道情况
     TMFCCou:integer;//放顶煤工作面个数
     TaskMFC:array of TWorkChMFC;//放顶煤工作面工艺参数

     WorkSys:TWorkSystem;//模拟工作时间

     //MSCou,DSCou:integer;//采煤队,掘进队个数
     //M_SGD:array of TSGD;//采煤队资源信息
     //D_SGD:array of TSGD;//掘进队资源信息     //sim_cost:Tsim_cost;

     flag:boolean;  //模拟控制变量
     Task_index,Mine_Index,Lane_Index:integer;
  end;

var
 Sim_MD:TSimulate;    //动态演示,使用时Create,用完free ,动态演示继承之

implementation
  uses Unt_data{,Unt_main,Unt_SimAcc};
{ TSimulate }

//获得图纸比例
function TSimulate.GetScale:double;
var str,fz,fm:string;
    i:integer;
begin
 with frm_data.ADOT_Graph do
 begin
  Str:=fieldbyname('Scale').AsString;
  i:=pos(':',str);
  fz:=copy(str,1,i-1);
  fm:=copy(str,i+1,length(str)-i);
  result:=strtoint(fz)/strtoint(fm);
 end;
end;

//断层处理
procedure TSimulate.frustrate_deal;
var i,j,k,len,f_Count,f_Cou:integer;
    pxyz:TPoint1;
    b:boolean;
    fru_strs:Tstrings;//利用它来保存数据起点,长度都保存在str的一个记录里,中间利用','分开
    MDH,MDDis,H,f,l,dis,l1,l2,angla,anglb,anglr,anglbp:double;
    tstr:string;
    str:array[0..3] of string;
    fru_xyz:Tpoints;
    Rockl:Tlistvalue;
begin
 {fru_strs:=tstringlist.Create;
 fru_strs.Clear;
 if Task[Task_Index].TaskT_Id>4 then angla:=Work[Mine_index].FY_Angle;//Task[Task_Index].TaskT_Id>3工作面倾角
 if Task[Task_Index].TaskT_Id<4 then angla:=Lane[Lane_index].Ang;//Task[Task_Index].TaskT_Id<3
 for i:=0 to FruCou-1 do
 begin
  b:=false;
  for j:=0 to Fru[i].Side.PCou-2 do
  begin
   find_insect(Task[Task_Index].P_p1,Task[Task_index].P_p2,Fru[i].side.Ps[j],Fru[i].side.Ps[j+1],pxyz,b);
   if b=true then   //内点
   begin
    if Task[Task_Index].TaskT_Id>4 then //Task[Task_Index].TaskT_Id>3
    begin
     MDH:=Work[Mine_Index].H;
     MDDis:=Task[Task_Index].FDis;
    end;
    if Task[Task_Index].TaskT_Id<4 then //Task[Task_Index].TaskT_Id<3
    begin
     MDH:=Lane[Lane_Index].H;
     MDDis:=Lane[Lane_Index].W;
    end;

    anglb:=Radian(Fru[i].Alf);//断层倾角

⌨️ 快捷键说明

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