?? pressmodel.cpp
字號:
// pressmodel.cpp: implementation of the pressmodel class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "2level.h"
#include "pressmodel.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
pressmodel::pressmodel()
{
}
pressmodel::~pressmodel()
{
}
double pressmodel::KT() //計算張力影響系數(shù)
{
double a;
float a1=0.5;
float a2=0.5;
a=(1-Tb/K)*(a1+a2*((K-Tf)/K)/((K-Tb)/K));
return a;
}
double pressmodel::press(_Application app,int i,global x,double de_drag)
{
f=x.f[i]; //摩擦系數(shù)
B=x.B[0]; //帶鋼寬度
A=0.0000214;
r=x.r[i]; //相對壓下量
R=x.R[i]; //軋輥半徑
H=x.H[i]; //入口厚度
h=x.h[i]; //出口厚度
Tb=x.Tb[i]; //后張力
Tf=x.Tf[i]; //前張力
dh=H-h;
r=dh/H;
K=1.15*de_drag;
num=i+1;
double P;
double ds;
double s;
double m;
double b;
double KT;
double P1=5000; //確定軋制力所在區(qū)間。
double P2=18000;
int JMAX=20;
KT=pressmodel::KT(); //計算張力影響系數(shù)
m=B*K*KT;
//*****
//變量定義
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
Range iCell;
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//*****
//打開c:\\1.xls
books.AttachDispatch(app.GetWorkbooks());
lpDisp = books.Open("D:\\shiyan.xls",
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional );
//*****
//得到Workbook
book.AttachDispatch(lpDisp);
//*****
//得到Worksheets
sheets.AttachDispatch(book.GetWorksheets());
//*****
//得到當(dāng)前活躍sheet
//如果有單元格正處于編輯狀態(tài)中,此操作不能返回,會一直等待
lpDisp=book.GetActiveSheet();
sheet.AttachDispatch(lpDisp);
//算法
P=0.5*(P1+P2); //給軋制力賦值;
for(int j=0;j<JMAX;j++)
{
RR=R*(1+A*P/(B*dh));
lc=sqrt(RR*dh);
Qp=1.08+1.79*f*r*sqrt(1-r)*sqrt(RR/H)-1.02*r;
s=P-m*lc*Qp;
ds=1+0.5*m*Qp*A*R/(sqrt(RR*dh)*B*dh)+0.895*f*r*sqrt(1-r)*A*R/(sqrt(RR/H)*B*dh);
b=P-s/ds;
P=b;
if (ds*ds<1)
{
break;
}
if((b-P1)*(b-P2)>0)
{
//輸出錯誤信息
AfxMessageBox("超出軋制力界限");
P=b;
}
//*****
//數(shù)據(jù)記錄
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)(j+1)),COleVariant((long)num)).pdispVal );
range.SetItem(COleVariant((long)1),COleVariant((long)1),COleVariant(P));
}
P=b;
//保存文件
book.SaveAs(COleVariant("D:\\shiyan.xls"),covOptional,covOptional, covOptional,covOptional,covOptional,0,
covOptional,covOptional,covOptional,covOptional);
book.Close (covOptional,COleVariant("D:\\shiyan.xls"),covOptional);
books.ReleaseDispatch();
books.Close();
return P;
}
double pressmodel::press1(int i,global x,double de_drag)
{
f=x.f[i]; //摩擦系數(shù)
B=x.B[0]; //帶鋼寬度
A=0.0000214;
r=x.r[i]; //相對壓下量
R=x.R[i]; //軋輥半徑
H=x.H[i]; //入口厚度
h=x.h[i]; //出口厚度
Tb=x.Tb[i]; //后張力
Tf=x.Tf[i]; //前張力
dh=H-h;
r=dh/H;
K=1.15*de_drag;
num=i+1;
double P;
double ds;
double s;
double m;
double b;
double KT;
double P1=5000; //確定軋制力所在區(qū)間。
double P2=24000;
int JMAX=20;
KT=pressmodel::KT(); //計算張力影響系數(shù)
m=B*K*KT;
P=0.5*(P1+P2); //給軋制力賦值;
for(int j=0;j<JMAX;j++)
{
RR=R*(1+A*P/(B*dh));
lc=sqrt(RR*dh);
Qp=1.08+1.79*f*r*sqrt(1-r)*sqrt(RR/H)-1.02*r;
s=P-m*lc*Qp;
ds=1+0.5*m*Qp*A*R/(sqrt(RR*dh)*B*dh)+0.895*f*r*sqrt(1-r)*A*R/(sqrt(RR/H)*B*dh);
b=P-s/ds;
P=b;
if (ds*ds<1)
{
//break;
}
if((b-P1)*(b-P2)>0)
{
//輸出錯誤信息
//AfxMessageBox("超出軋制力界限");
P=b;
}
}
P=b;
return P;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -