Esempio n. 1
0
void TripWhitInertia::IneriaTripSpeed(PumpTransModelMgr &mgr,int nSet)
{
	EndListRef &jun = mgr.GetEndList();
	MOCPumpInertia &Inertia = mgr.GetInertia();
	MOCPumpModel &Model = mgr.GetModel();
	MOCPumpConfig &config = mgr.GetConfig();
	double dSpeedR = Inertia.Speed();
	double dSpeedOld = mgr.GetCurSpeedRatio()*dSpeedR;
	double dMass = Model.MassFlow();
	double dRisePress = Model.RisePress();
	double dTorqueOld = Model.GetTorque(config,dSpeedR,dSpeedOld,dMass,dRisePress);
	double dTorqueNew = dTorqueOld;
	double dTorque1 = 0;
	double dSpeed1 = 0;
	double dSpeed2 = 0;
	double dSpeedNew = 0;
	double dSpeedNew1 = 0;
	int i=0;
	do 
	{//斯蒂芬森法计算(AitKen加速迭代)
		dSpeedNew1 = dSpeedNew;
		dSpeed1 = CalcSpeed(mgr,dSpeedOld,dTorqueOld,dTorqueNew);//计算泵转速
		Model.CalcQH(jun,config,dSpeed1/dSpeedR,nSet,dMass,dMass,dRisePress);//根据计算的转速计算流量和压力上升
		dTorque1 = Model.GetTorque(config,dSpeedR,dSpeed1,dMass,dRisePress);//根据流量得到功率计算出转矩
		dSpeed2 = CalcSpeed(mgr,dSpeedOld,dTorqueOld,dTorque1);
		if(fabs(dSpeed2-2*dSpeed1+dSpeedOld)<1E-8)
		{
			dSpeedNew = dSpeedOld;
		}
		else
		{
			dSpeedNew = dSpeedOld - pow(dSpeed1-dSpeedOld,2)/(dSpeed2-2*dSpeed1+dSpeedOld);
		}
		Model.CalcQH(jun,config,dSpeedNew/dSpeedR,nSet,dMass,dMass,dRisePress);
		dTorqueNew = Model.GetTorque(config,dSpeedR,dSpeedNew,dMass,dRisePress);
		i++;
	} while(fabs(dSpeedNew-dSpeedNew1)>1E-6&&i<100);
	if(i>90)
	{
		ASSERT(FALSE);
		return;
	}
	mgr.SetCurSpeedRatio(dSpeedNew/dSpeedR);
}
Esempio n. 2
0
LRESULT CFilesHashDlg::OnThreadMsg(WPARAM wParam, LPARAM lParam)
{
	switch(wParam)
	{
	case WP_WORKING:
		SetCtrls(TRUE);
		break;
	case WP_REFRESH_TEXT:
		RefreshMainText();
		break;
	case WP_PROG:
		m_prog.SetPos((int)lParam);
		break;
	case WP_PROG_WHOLE:
		SetWholeProgPos((int)lParam);
		break;
	case WP_FINISHED:
		// 停止主界面计时器 计算读取速度
		CalcSpeed(m_thrdData.totalSize);
		// 停止主界面计时器 计算读取速度

		// 界面设置 - 开始
		SetCtrls(FALSE);
		// 界面设置 - 结束	

		m_prog.SetPos(99);
		SetWholeProgPos(99);
		break;
	case WP_STOPPED:
		KillTimer(1);

		m_calculateTime = 0.0;
		CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC_TIME);
		pWnd->SetWindowText(_T(""));

		//界面设置 - 开始
		SetCtrls(FALSE);
		//界面设置 - 结束
		
		EnterCriticalSection(&g_criticalSection);
		{
			m_thrdData.strAll.Append(_T("\r\n"));
			m_thrdData.strAll.Append(MAINDLG_CALCU_TERMINAL);
			m_thrdData.strAll.Append(_T("\r\n\r\n"));

			m_editMain.SetWindowText(m_thrdData.strAll);
		}
		LeaveCriticalSection(&g_criticalSection);
			
		m_editMain.LineScroll(m_editMain.GetLineCount()); // 将文本框滚动到结尾

		m_prog.SetPos(0);
		//m_progWhole.SetPos(0);
		SetWholeProgPos(0);
		
		if(m_waitingExit)
		{
			PostMessage(WM_CLOSE);//OnCancel();
		}
		break;
	}

	return 0;
}