中國計量網(wǎng) http://www.elfin-engr.com/
中國計量網(wǎng)——計量行業(yè)門戶網(wǎng)站
計量資訊速遞
您當(dāng)前的位置: 首頁 > 學(xué)苑 > 儀器使用

中國計量2008年第1期101頁程序部分

發(fā)布時間:2008-01-08 作者:金建廣 來源:www.jlbjb.com 瀏覽:1869

  本內(nèi)容為《中國計量》雜志2008年第1期第101頁《基于MFC的千斤頂測量不確定度的界面化實現(xiàn)》一文程序部分。

 

程序?qū)崿F(xiàn)
程序的主要分成計算測量數(shù)據(jù)的標(biāo)準(zhǔn)差,以及計算各類不確定度。
double CcalDlg::cal_std()
{// 定義一個臨時的數(shù)組,將保存測量數(shù)據(jù)
double x[10]; int n = 0;
// 得到測量數(shù)據(jù),并將其轉(zhuǎn)移至數(shù)組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)
// 判斷輸入的測量數(shù)據(jù)是否足夠
if ( n < 2 )
{MessageBox(_T("請至少輸入兩組測量數(shù)據(jù)!"), _T("錯誤"), MB_OK|MB_ICONWARNING);
m_m11.SetFocus();m_m11.SetSel(0, -1);return -1.
  // 計算測量數(shù)據(jù)的和與平均值  double sum = 0.0;
for ( int i=0; i<n; ++i )sum += x[i];double av = sum / n;// 計算標(biāo)準(zhǔn)差  double sum2 = 0.0;
 for ( int i=0; i<n; ++i ) sum2 += (x[i]-av)*(x[i]-av); double av2 = sum2 / (n-1);
double std = sqrt(av2);return std;}
第二部分,計算各類不確定度,遵從流程圖。
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 {// 計算單次測量標(biāo)準(zhǔn)差
  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);
  // 計算標(biāo)準(zhǔn)器準(zhǔn)確度不確定度
  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);
  // 計算壓力表準(zhǔn)確度不確定度
  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);}

 

分享到:
通知 點擊查看 點擊查看
公告 征訂通知 征訂通知
會員注冊
已有賬號,
會員登陸
完善信息
找回密碼