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); }
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; }