📄 unt_simulate.pas
字号:
//如果是回风巷、运输巷
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 + -