📄 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() //计算张力影响系数
{
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]; //摩擦系数
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; //确定轧制力所在区间。
double P2=18000;
int JMAX=20;
KT=pressmodel::KT(); //计算张力影响系数
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());
//*****
//得到当前活跃sheet
//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
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;
}
//*****
//数据记录
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]; //摩擦系数
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; //确定轧制力所在区间。
double P2=24000;
int JMAX=20;
KT=pressmodel::KT(); //计算张力影响系数
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -