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