167 lines
4.0 KiB
C++
167 lines
4.0 KiB
C++
// DecompressBoardCalcDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "DecompressBoardCalcDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDecompressBoardCalcDlg dialog
|
|
|
|
void DecompressBoardCalc()
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
CDecompressBoardCalcDlg dlg;
|
|
dlg.DoModal();
|
|
}
|
|
|
|
CDecompressBoardCalcDlg::CDecompressBoardCalcDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CDecompressBoardCalcDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CDecompressBoardCalcDlg)
|
|
m_bChange = FALSE;
|
|
m_csD1 = _T("150");
|
|
m_csD2 = _T("150");
|
|
m_csDn = _T("");
|
|
m_csPress = _T("10");
|
|
m_nQ = 25;
|
|
m_iUnit = 0;
|
|
m_iWant = 0;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CDecompressBoardCalcDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDecompressBoardCalcDlg)
|
|
DDX_Check(pDX, IDC_CHECK_CHANGE, m_bChange);
|
|
DDX_CBString(pDX, IDC_COMBO_D1, m_csD1);
|
|
DDX_CBString(pDX, IDC_COMBO_D2, m_csD2);
|
|
DDX_Text(pDX, IDC_EDIT_DN, m_csDn);
|
|
DDX_Text(pDX, IDC_EDIT_PRESS, m_csPress);
|
|
DDX_Text(pDX, IDC_EDIT_Q, m_nQ);
|
|
DDX_Radio(pDX, IDC_RADIO_UNIT1, m_iUnit);
|
|
DDX_Radio(pDX, IDC_RADIO_WANT_DN, m_iWant);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDecompressBoardCalcDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CDecompressBoardCalcDlg)
|
|
ON_BN_CLICKED(IDC_CHECK_CHANGE, OnCheckChange)
|
|
ON_BN_CLICKED(IDC_RADIO_WANT_DN, OnRadioWantDn)
|
|
ON_BN_CLICKED(IDC_RADIO_WANT_PRESS, OnRadioWantPress)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDecompressBoardCalcDlg message handlers
|
|
|
|
BOOL CDecompressBoardCalcDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
CWnd *pWnd = GetDlgItem(IDC_COMBO_D2);
|
|
pWnd->EnableWindow(FALSE);
|
|
OnRadioWantDn();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CDecompressBoardCalcDlg::OnOK()
|
|
{
|
|
UpdateData();
|
|
double v(0), nBackDn(0), nFrontDn(0), nQ(0), nTmp(0)/*ξ*/, nDn(0);
|
|
if(m_bChange)
|
|
nBackDn = _tstof(m_csD2)/1000;
|
|
else
|
|
nBackDn = _tstof(m_csD1)/1000;
|
|
nFrontDn = _tstof(m_csD1);
|
|
if(m_iUnit == 0)
|
|
nQ = m_nQ/1000;
|
|
else
|
|
nQ = m_nQ / 3600;
|
|
v = nQ / (0.25*PI*nBackDn*nBackDn); //流速m/s
|
|
nDn = _tstof(m_csDn);
|
|
|
|
if(m_iWant == 0){
|
|
// H = 10*ξ×v^2/2*g
|
|
double nH = _tstof(m_csPress); //得到水流通过孔板的水头损失 把mH2O转换为kPa
|
|
nTmp = nH*2*9.8/v/v; //得到ξ
|
|
nTmp = sqrt(nTmp) + 1;
|
|
nTmp = nTmp / 1.75;
|
|
//解一元二次方程 ax2+bx+c=0 x=(-b+-sqrt(b^2-4ac))/2a
|
|
double a(0), b(0), c(0), x1(0), x2(0);
|
|
a = -nTmp;
|
|
b = 1.175*nTmp + 1;
|
|
c = -1.1;
|
|
x1 = (-b+sqrt(b*b-4*a*c))/2/a;
|
|
x2 = (-b-sqrt(b*b-4*a*c))/2/a;
|
|
|
|
x1 = sqrt(nFrontDn*nFrontDn*x1);
|
|
x2 = sqrt(nFrontDn*nFrontDn*x2);
|
|
if(x1 > 0 && x1 < nFrontDn) //2个解,取DN小于管径的
|
|
m_csDn.Format(_T("%.2f"), x1);
|
|
else
|
|
m_csDn.Format(_T("%.2f"), x2);
|
|
}
|
|
else{
|
|
double n(0), n2(0);
|
|
n = nFrontDn*nFrontDn/(nDn*nDn);
|
|
n2 = (nDn*nDn)/(nFrontDn*nFrontDn);
|
|
nTmp = (1.75*n*(1.1-n2)/(1.175-n2) -1);
|
|
nTmp = nTmp*nTmp;
|
|
double nH = 10*nTmp*v*v/2/9.8;
|
|
nH = nH /9.8;
|
|
m_csPress.Format(_T("%.2f"), nH);
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CDecompressBoardCalcDlg::OnCheckChange()
|
|
{
|
|
UpdateData();
|
|
CWnd *pWnd = GetDlgItem(IDC_COMBO_D2);
|
|
if(m_bChange)
|
|
pWnd->EnableWindow(TRUE);
|
|
else
|
|
pWnd->EnableWindow(FALSE);
|
|
}
|
|
|
|
void CDecompressBoardCalcDlg::OnRadioWantDn()
|
|
{
|
|
UpdateData();
|
|
CWnd *pWnd1 = GetDlgItem(IDC_EDIT_PRESS);
|
|
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_DN);
|
|
if(m_iWant == 0){
|
|
pWnd1->EnableWindow(TRUE);
|
|
pWnd2->EnableWindow(FALSE);
|
|
}
|
|
else{
|
|
pWnd1->EnableWindow(FALSE);
|
|
pWnd2->EnableWindow(TRUE);
|
|
}
|
|
|
|
}
|
|
|
|
void CDecompressBoardCalcDlg::OnRadioWantPress()
|
|
{
|
|
UpdateData();
|
|
CWnd *pWnd1 = GetDlgItem(IDC_EDIT_PRESS);
|
|
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_DN);
|
|
if(m_iWant == 0){
|
|
pWnd1->EnableWindow(TRUE);
|
|
pWnd2->EnableWindow(FALSE);
|
|
}
|
|
else{
|
|
pWnd1->EnableWindow(FALSE);
|
|
pWnd2->EnableWindow(TRUE);
|
|
}
|
|
}
|