本内容为《华体会体育中国首页 》杂志2008年第1期第101页《基于MFC的千斤顶测量不确定度的界面化实现》一文程序部分。
程序实现
程序的主要分成计算测量数据的标准差,以及计算各类不确定度。
double CcalDlg::cal_std()
{// 定义一个临时的数组,将保存测量数据
double x[10]; int n = 0;
// 得到测量数据,并将其转移至数组x[]中
GET_TESTVAL(m11_, m_m11) GET_TESTVAL(m12_, m_m12)GET_TESTVAL(m13_, m_m13) GET_TESTVAL(m14_, m_m14)GET_TESTVAL(m15_, m_m15) GET_TESTVAL(m21_, m_m21)
GET_TESTVAL(m22_, m_m22) GET_TESTVAL(m23_, m_m23)GET_TESTVAL(m24_, m_m24) GET_TESTVAL(m25_, m_m25)
// 判断输入的测量数据是否足够
if ( n < 2 )
{MessageBox(_T("请至少输入两组测量数据!"), _T("错误"), MB_OK|MB_ICONWARNING);
m_m11.SetFocus();m_m11.SetSel(0, -1);return -1.
// 计算测量数据的和与平均值 double sum = 0.0;
for ( int i=0; i
第二部分,计算各类不确定度,遵从流程图。
void CcalDlg::OnOK()
{// 从界面取得输入值
UpdateData(TRUE);bool interrupt = false;
// 首先将原来的计算值清空
{fia_ = _T("");fi1_ = _T("");fi2_ = _T("");fi3_ = _T("");fic_ = _T("");
fb1_ = _T("");fb2_ = _T("");fb3_ = _T("");fbc_ = _T("");output_ = _T("");}
do {// 计算单次测量标准差
double fia = cal_std();if ( fia < 0.0 ) break;fia_.Format(_T("%.2f"), fia);
/ 计算单次测量不确定度
double fi1 = fia / sqrt(3.0);fi1_.Format(_T("%.2f"), fi1);
// 计算标准器准确度不确定度
double fi2;{double input21, input22;GET_SETVAL(input21_, m_input21, input21)
if ( interrupt ) break;GET_SETVAL(input22_, m_input22, input22)
if ( interrupt ) break;fi2 = input21 * input22 / 100 / 3;fi2_.Format(_T("%.2f"), fi2);}
// 计算Fi合成不确定度
double fic = sqrt(fi1*fi1 + fi2*fi2);fic_.Format(_T("%.2f"), fic);
// 计算压力表准确度不确定度
double fb1;{double input11, input31;GET_SETVAL(input11_, m_input11, input11)
if ( interrupt ) break;GET_SETVAL(input31_, m_input31, input31)
if ( interrupt ) break;fb1 = input11 * input31 / 100 / 3;fb1_.Format(_T("%.2f"), fb1);}
// 计算压力表分辨力不确定度
double fb2;{double input41, input22, input32;
GET_SETVAL(input41_, m_input41, input41)if ( interrupt ) break;
GET_SETVAL(input22_, m_input22, input22)if ( interrupt ) break;
GET_SETVAL(input32_, m_input32, input32)if ( interrupt ) break;
fb2 = input41 / 2 / (input22/input32*10) / sqrt(3.0); fb2_.Format(_T("%.3f"), fb2);}
// 计算油缸面积允许误差不确定度
double fb3;{double input42;
GET_SETVAL(input42_, m_input42, input42)if ( interrupt ) break;
fb3 = input42 / sqrt(3.0);fb3_.Format(_T("%.2f"), fb3);}
// 计算Fb合成不确定度
double fbc;{double input22, input32;GET_SETVAL(input22_, m_input22, input22)
if ( interrupt ) break;GET_SETVAL(input32_, m_input32, input32)if ( interrupt ) break;
double tmp1 = (fb1+fb2)*input32/10;double tmp2 = input22/input32*fb3;
fbc = sqrt(tmp1*tmp1 + tmp2*tmp2);fbc_.Format(_T("%.2f"), fbc);}
// 计算液压千斤顶总合成不确定度u
double output; output = sqrt(fic*fic + fbc*fbc);output_.Format(_T("%.2f"), output);}
while (0);UpdateData(FALSE);}
内容推荐
更多>2019-10-18
2019-04-09