示例#1
0
 /// <summary>
 /// 创建一个不确定度
 /// </summary>
 /// <param name="validationErrors">返回的错误信息</param>
 /// <param name="db">数据库上下文</param>
 /// <param name="entity">一个不确定度</param>
 /// <returns></returns>
 public bool Create(ref ValidationErrors validationErrors, UNCERTAINTYTABLE entity)
 {
     try
     {
         repository.Create(entity);
         return(true);
     }
     catch (Exception ex)
     {
         validationErrors.Add(ex.Message);
         ExceptionsHander.WriteExceptions(ex);
     }
     return(false);
 }
示例#2
0
 /// <summary>
 /// 编辑计量标准装置检定/校准信息
 /// </summary>
 /// <param name="validationErrors">返回的错误信息</param>
 /// <param name="entity">计量标准装置检定/校准信息 </param>
 /// <returns></returns>
 public bool EditField(ref ValidationErrors validationErrors, UNCERTAINTYTABLE entity)
 {
     try
     {
         repository.EditField(db, entity);
         repository.Save(db);
         return(true);
     }
     catch (Exception ex)
     {
         validationErrors.Add(ex.Message);
         ExceptionsHander.WriteExceptions(ex);
     }
     return(false);
 }
        /// <summary>
        /// 根据ID获取数据模型
        /// </summary>
        /// <param name="id">编号</param>
        /// <returns></returns>
        public UNCERTAINTYTABLE Get(string id)
        {
            UNCERTAINTYTABLE item = m_BLL.GetById(id);

            return(item);
        }
示例#4
0
        public static double GetBuQueDingDu(BuQueDingBuInput paras, List <UNCERTAINTYTABLE> data, BuQueDingDu buQueDingDu)
        {
            double result = 0;

            if (paras.K == "√3")
            {
                paras.K = Math.Sqrt(3).ToString();
            }

            switch (buQueDingDu.GongShi)
            {
            case "2":
                /*
                 * 每行算一个不确定度
                 * 根据标准值判定所在范围的指标
                 * 算法=((被试设备分辨力ui)^2+(最大允许误差ui)^2)^0.5*k,小数位数要与【显示值+】位数一致
                 * 被试设备分辨力ui=(10-n/2)/√3  备注:n=【显示值+】的小数位数
                 * 最大允许误差ui=(指标1*10-6*ABS【显示值+】+指标2)/2,备注指标2的单位要换算成和【显示值+】单位一致
                 *
                 */
                var length = 0;
                var split  = paras.ShuChuShiJiZhi.Split('.');
                if (split.Length > 1)
                {
                    length = split[1].Length;    //备注:n =【显示值 +】的小数位数
                }

                var ui = Math.Pow(10, -length) / 2 / Math.Sqrt(3);     //被试设备分辨力ui = (10 - n / 2) /√3
                // 最大允许误差ui=(指标1*10-6*ABS【显示值+】+指标2)/2,备注指标2的单位要换算成和【显示值+】单位一致
                UNCERTAINTYTABLE d = GetUNCERTAINTYTABLE(paras, data, buQueDingDu);
                var uiMax          = (Convert.ToDouble(d.INDEX1) * Math.Pow(10, -6) * Math.Abs(Convert.ToDouble(paras.ShuChuShiJiZhi))
                                      + Convert.ToDouble(d.INDEX2) * Math.Pow(10, DanWeiHuanSuan(d.INDEX2UNIT, paras.ShuChuShiJiZhiDanWei))) / 2;

                // 算法=((被试设备分辨力ui)^2+(最大允许误差ui)^2)^0.5*k,小数位数要与【显示值+】位数一致
                return(Math.Pow((Math.Pow(ui, 2) + Math.Pow(uiMax, 2)), 0.5) * Convert.ToDouble(paras.K));

            case "9":
                /*
                 * 每行算一个不确定度
                 * 根据输出示值判定应该取的量程范围内的指标,一个量程内取指标肯定参考指标表一个量程内的
                 * 算法=((被试设备分辨力ui)^2+(最大允许误差ui)^2)^0.5*k,小数位数要与【输出实际值】位数一致
                 * 被试设备分辨力ui=(10-n/2)/√3  备注:n=【输出实际值】的小数位数
                 * 最大允许误差ui=(指标1*10-6*ABS【输出实际值】+指标2*10-6*量程)/2
                 *
                 * 例如第一个行不确定度U(k=2)=											0.0001              V
                 * 公式为:((10^(-4)/2/SQRT(3))^2+((3*10^(-6)*ABS(S16)+0.2*10^(-6)*20)/2)^2)^0.5*2
                 */
                var length9 = 0;
                var split9  = paras.ShuChuShiJiZhi.Split('.');
                if (split9.Length > 1)
                {
                    length9 = split9[1].Length;    //备注:n =【显示值 +】的小数位数
                }

                var ui9 = Math.Pow(10, -length9) / 2 / Math.Sqrt(3);     //被试设备分辨力ui = (10 - n / 2) /√3

                UNCERTAINTYTABLE d9 = GetUNCERTAINTYTABLE(paras, data, buQueDingDu);
                var uiMax9          = (Convert.ToDouble(d9.INDEX1) * Math.Pow(10, -6) * Math.Abs(Convert.ToDouble(paras.ShuChuShiJiZhi))
                                       + Convert.ToDouble(d9.INDEX2) * Math.Pow(10, -6) * Convert.ToDouble(d9.ENDRANGESCOPE)) / 2;

                // 算法=((被试设备分辨力ui)^2+(最大允许误差ui)^2)^0.5*k,小数位数要与【显示值+】位数一致
                return(Math.Pow((Math.Pow(ui9, 2) + Math.Pow(uiMax9, 2)), 0.5) * Convert.ToDouble(paras.K));

            case "5":
                /*
                 * 算法=((被试设备分辨力ui)^2+(最大允许误差ui)^2)^0.5*k,小数位数要与【显示值】位数一致
                 * 被试设备分辨力ui=(10-n/2)/√3  备注:n=【显示值】的小数位数
                 * 最大允许误差ui=(指标1*10-6*ABS【显示值】+指标2)/2,备注指标2为0
                 */
                var length5 = 0;
                var split5  = paras.ShuChuShiJiZhi.Split('.');
                if (split5.Length > 1)
                {
                    length5 = split5[1].Length;    //备注:n =【显示值 +】的小数位数
                }

                var ui5 = Math.Pow(10, -length5) / 2 / Math.Sqrt(3);     //被试设备分辨力ui = (10 - n / 2) /√3

                UNCERTAINTYTABLE d5 = GetUNCERTAINTYTABLE(paras, data, buQueDingDu);
                var uiMax5          = (Convert.ToDouble(d5.INDEX1) * Math.Pow(10, -6) * Math.Abs(Convert.ToDouble(paras.ShuChuShiJiZhi))
                                       + 0) / 2;

                // 算法=((被试设备分辨力ui)^2+(最大允许误差ui)^2)^0.5*k,小数位数要与【显示值+】位数一致
                return(Math.Pow((Math.Pow(ui5, 2) + Math.Pow(uiMax5, 2)), 0.5) * Convert.ToDouble(paras.K));

            case "6":
                /*
                 * 2、算法,分两种情况
                 * 2.1、如有没有使用变换器参与运算:((被试设备分辨力ui)^2+(最大允许误差ui)^2)^0.5*k,小数位数要与【输出实际值】位数一致
                 * 如果没有使用变换器,参考8508A交流电流并结合当前量程取指标值
                 * 2.2、如有变换器参与运算:((被试设备分辨力ui)^2+(最大允许误差ui)^2+(变换器指标ui)^2)^0.5*k,小数位数要与【输出实际值】位数一致
                 * 如果有变换器,那么参考8508A交流电压,永远取2V量程档的指标85、10
                 * 被试设备分辨力ui=(10-n/2)/√3  备注:n=【输出实际值】的小数位数
                 * 最大允许误差ui=(指标1*10-6*ABS【输出实际值】+指标2*10-6*量程)/2
                 * 变换器指标ui=变换器指标/2,备注:标准电阻指标为0.00005
                 */
                var length6 = 0;
                var split6  = paras.ShuChuShiJiZhi.Split('.');
                if (split6.Length > 1)
                {
                    length6 = split6[1].Length;    //备注:n =【显示值 +】的小数位数
                }

                var ui6 = Math.Pow(10, -length6) / 2 / Math.Sqrt(3);     //被试设备分辨力ui = (10 - n / 2) /√3



                if (paras.XuanYongDianZu == "是")
                {
                    var uiMax6 = (Convert.ToDouble(85) * Math.Pow(10, -6) * Math.Abs(Convert.ToDouble(paras.ShuChuShiJiZhi))
                                  + Convert.ToDouble(10) * Math.Pow(10, -6) * Convert.ToDouble(2)) / 2;

                    return(Math.Pow((Math.Pow(ui6, 2) + Math.Pow(uiMax6, 2) + Math.Pow(0.00005 / 2, 2)), 0.5) * Convert.ToDouble(paras.K));
                }
                else
                {
                    UNCERTAINTYTABLE d6 = GetUNCERTAINTYTABLE(paras, data, buQueDingDu);
                    var uiMax6          = (Convert.ToDouble(d6.INDEX1) * Math.Pow(10, -6) * Math.Abs(Convert.ToDouble(paras.ShuChuShiJiZhi))
                                           + Convert.ToDouble(d6.INDEX2) * Math.Pow(10, -6) * Convert.ToDouble(d6.ENDRANGESCOPE)) / 2;
                    return(Math.Pow((Math.Pow(ui6, 2) + Math.Pow(uiMax6, 2)), 0.5) * Convert.ToDouble(paras.K));
                }

            case "8":
                /*
                 * 1、每行算一个不确定度,根据输出示值判断应该取自哪个量程范围内的指标,一个量程内取指标肯定参考指标表一个量程内的
                 * 2、算法,分两种情况
                 * 2.1、如有无选用电阻参与运算:((被试设备分辨力ui)^2+(最大允许误差ui)^2)^0.5*k,小数位数要与【输出实际值】位数一致
                 * 如果无选用电阻,参考8508A直流电流并结合当前量程取指标值
                 * 2.2、如有有选用电阻参与运算:((被试设备分辨力ui)^2+(最大允许误差ui)^2+(标准电阻指标ui)^2)^0.5*k,小数位数要与【输出实际值】位数一致
                 * 如果有选用电阻,那么参考8508A直流电压,并判定应该取的量程段的指标值
                 * 被试设备分辨力ui=(10-n/2)/√3  备注:n=【输出实际值】的小数位数
                 * 最大允许误差ui=(指标1*10-6*ABS【输出实际值】+指标2*10-6*量程)/2
                 * 标准电阻指标ui=标准电阻/2,备注:如果选用电阻阻值为0.01,那么标准电阻指标为0.00001,如果为0.001,那么标准电阻指标为0.0001,以此类推
                 *
                 * 例如第一个量程有选用电阻参与运算,第一个行不确定度U(k=2)=																				0.001               mA
                 * 公式为:((10^(-3)/2/SQRT(3))^2+((3.0*10^(-6)*ABS(AD36)+0.2*10^(-6)*2)/2)^2+(0.00001/2)^2)^0.5*2
                 *
                 * 例如第二个量程无选用电阻参与运算,第一个行不确定度U(k=2)=																				0.003               μA
                 * 公式为:((10^(-3)/2/SQRT(3))^2+((12*10^(-6)*ABS(AD36)+2*10^(-6)*200)/2)^2)^0.5*2
                 *
                 */
                var length8 = 0;
                var split8  = paras.ShuChuShiJiZhi.Split('.');
                if (split8.Length > 1)
                {
                    length8 = split8[1].Length;    //备注:n =【显示值 +】的小数位数
                }

                var ui8 = Math.Pow(10, -length8) / 2 / Math.Sqrt(3);     //被试设备分辨力ui = (10 - n / 2) /√3



                if (!string.IsNullOrWhiteSpace(paras.XuanYongDianZu))
                {
                    //       var zhi = Convert.ToDouble(paras.XuanYongDianZu) * DanWei(paras.ShuChuShiJiZhiDanWei, paras.ShuChuShiJiZhi) * 0.001 * 0.001;
                    var    zhi = Convert.ToDouble(paras.XuanYongDianZu) * DanWei(paras.LiangChengDanWei, paras.LiangCheng) * 0.001 * 0.001;
                    string str = (((decimal)zhi)).ToString();
                    paras.LiangCheng       = str;
                    paras.LiangChengDanWei = "μV";
                    UNCERTAINTYTABLE d8 = GetUNCERTAINTYTABLE(paras, data, buQueDingDu);
                    var uiMax8          = (Convert.ToDouble(d8.INDEX1) * Math.Pow(10, -6) * Math.Abs(Convert.ToDouble(paras.ShuChuShiJiZhi))
                                           + Convert.ToDouble(d8.INDEX2) * Math.Pow(10, -6) * Convert.ToDouble(d8.ENDRANGESCOPE)) / 2;
                    var dsf = Convert.ToDouble(paras.XuanYongDianZu);
                    var dd  = Convert.ToDecimal(0.0000001 / dsf / 2);
                    return(Math.Pow((Math.Pow(ui8, 2) + Math.Pow(uiMax8, 2) + Math.Pow(Convert.ToDouble(dd), 2)), 0.5) * Convert.ToDouble(paras.K));
                }
                else
                {
                    UNCERTAINTYTABLE d8 = GetUNCERTAINTYTABLE(paras, data, buQueDingDu);
                    var uiMax8          = (Convert.ToDouble(d8.INDEX1) * Math.Pow(10, -6) * Math.Abs(Convert.ToDouble(paras.ShuChuShiJiZhi))
                                           + Convert.ToDouble(d8.INDEX2) * Math.Pow(10, -6) * Convert.ToDouble(d8.ENDRANGESCOPE)) / 2;
                    return(Math.Pow((Math.Pow(ui8, 2) + Math.Pow(uiMax8, 2)), 0.5) * Convert.ToDouble(paras.K));
                }


            default:
                break;
            }

            return(result);
        }