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