schangxiang@126.com
2025-11-04 f5ed29dc26c7cd952d56ec5721a2efc43cd25992
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using DataRWDAL.Base;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XImagingXhandler.XDAL;
using DataRWDAL;
namespace XCore
{
    /// <summary>
    /// 液体精度校准逻辑处理类
    /// </summary>
    public class LiquidAccuracyBll
    {
 
        #region 从数据库获取液体参数校准的数据
        /// <summary>
        /// 从数据库获取液体参数校准的数据
        /// </summary>
        /// <param name="liquidRangeId">液体范围Id</param>
        /// <param name="deviceArmId">臂Id</param>
        /// <returns>液体校准数据实体集合</returns>
        public ObservableCollection<LiquidAccuracy> GetLiquidAccuracyFromdb(int liquidRangeId,int deviceArmId,string liquidTypeId)
        {
            return LiquidAccuracyDB.GetLiquidAccuracyFromdb(liquidRangeId,deviceArmId, liquidTypeId);
        }
        #endregion
 
        #region 从数据库获取液体参数校准的数据根据当前请求的体积
        /// <summary>
        /// 从数据库获取液体参数校准的数据根据当前请求的体积
        /// </summary>
        /// <param name="liquidRangeId">液体范围Id</param>
        /// <param name="deviceArmId">臂Id</param>
        /// <param name="targetVolume">目标体积</param>
        /// <returns>符合条件的液体校准参数数据,最多只有两条</returns>
        public LiquidAccuracy GetLiquidAccuracyFromdb(int liquidRangeId,int deviceArmId, double targetVolume,string liquidTypeid)
        {
            List<LiquidAccuracy> result = null;
            LiquidAccuracy liquidAccuracy = new LiquidAccuracy();
            result= LiquidAccuracyDB.GetLiquidAccuracyFromdb(liquidRangeId,deviceArmId, targetVolume, liquidTypeid);
            //取出两个当前目标体积的区间数据
            //计算K,b值
            double b = 0.0d;
            double k = 1.0d;
            if (result.Count ==2) 
            {
                k = (result[0].liquid_Real_volume - result[1].liquid_Real_volume) / (result[0].liquid_target_volume - result[1].liquid_target_volume);
                b = result[0].liquid_Real_volume - k * result[0].liquid_target_volume;
            }
 
            liquidAccuracy.liquid_target_volume = targetVolume;
            liquidAccuracy.liquid_accuracy_k = k;
            liquidAccuracy.liquid_accuracy_b= b;
            return liquidAccuracy;
        }
        #endregion
 
        #region 计算枪头的吸液体积
        public double CalculateAspirateParamVolume(double targetVolume,LiquidAccuracy liquidAccuracy)
        {
            double dResult = 0.0d;
            dResult = (targetVolume - liquidAccuracy.liquid_accuracy_b) / liquidAccuracy.liquid_accuracy_k;
            return dResult;
        }
        #endregion
 
        #region 添加一条新的液体校准参数数据——通过液体校准参数数据
        /// <summary>
        /// 添加一条新的液体校准参数数据——通过液体校准参数数据
        /// </summary>
        /// <param name="liquidAccuracy">液体校准参数实体</param>
        /// <returns>1:添加成功;其他:不成功</returns>
        public int AddLiquidAccuracyIntodb(LiquidAccuracy liquidAccuracy,out string id)
        {
            return LiquidAccuracyDB.AddLiquidAccuracyIntodb(liquidAccuracy,out id);
        }
        #endregion
 
        #region 修改一条新的液体校准参数数据——通过液体校准参数数据
        /// <summary>
        /// 修改一条新的液体校准参数数据——通过液体校准参数数据
        /// </summary>
        /// <param name="liquidAccuracy">液体校准参数实体</param>
        /// <returns>1:添加成功;其他:不成功</returns>
        public int UpdateLiquidAccuracyIntodb(LiquidAccuracy liquidAccuracy)
        {
            return LiquidAccuracyDB.UpdateLiquidAccuracyIntodb(liquidAccuracy);
        }
        #endregion
 
        #region 删除一条新的液体校准参数数据——通过液体校准参数数据
        /// <summary>
        /// 删除一条新的液体校准参数数据——通过液体校准参数数据
        /// </summary>
        /// <param name="liquidAccuracy">液体校准参数实体对象</param>
        /// <returns></returns>
        public int DeleteLiquidAccuracyIntodb(LiquidAccuracy liquidAccuracy)
        {
            return LiquidAccuracyDB.DeleteLiquidAccuracyIntodb(liquidAccuracy);
        }
        #endregion
    }
}