?? 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 + -