⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pressmodel.cpp

📁 连轧过程控制仿真程序
💻 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 + -