ningshuxia
2025-04-22 1519533649b43337d214523f7cd075edf237b3f7
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
using System;
using System.Collections.Generic;
 
namespace IStation.Algorithm.Source
{
    public class Pump
    {
        public string PumpNum { get; private set; }
        public PumpRatedParam RatedParam { get; private set; }
        /// <summary>
        /// 转速
        /// </summary>
        public double CurrentSpeed { get; set; }
        /// <summary>
        /// 当前电机功率,理论上与转速比例的三次方成正比,实际可能小一些
        /// </summary>
        public double CurrentEMPower
        {
            get
            {
                return RatedParam.EMPower * Math.Pow(CurrentSpeed / RatedParam.RatedSpeed, 3.00);
            }
        }
        /// <summary>
        /// 是否变频水泵
        /// </summary>
        public bool IsVarFrequency
        {
            get
            {
                return RatedParam.MaxSpeed >= RatedParam.RatedSpeed
                    && RatedParam.RatedSpeed >= RatedParam.MinSpeed
                    && RatedParam.MaxSpeed != RatedParam.MinSpeed;
            }
        }
        /// <summary>
        /// 启停状态
        /// </summary>
        public bool IsOpen { get; set; }
        /// <summary>
        /// 运行状态,是否正常运行
        /// </summary>
        public bool RunStatus { get; set; } = true;
 
        public Pump(string pump_num, PumpRatedParam rated_param, bool isopen)
        {
            PumpNum = pump_num;
            RatedParam = rated_param;
            CurrentSpeed = RatedParam.RatedSpeed;
            IsOpen = isopen;
        }
 
        public double GetCurrentHeadByFlow(double flow)
        {
            double speed_rate = CurrentSpeed / RatedParam.RatedSpeed;
 
            //流量工况点,与转速比例成正比
            double flow_rate = RatedParam.RatedFlow * speed_rate;
            //扬程工况点,与转速比例平方成正比
            double head_rate = RatedParam.RatedHead * Math.Pow(speed_rate, 2.0);
 
            List<CurvePoint> curvepoints = new List<CurvePoint>();
            curvepoints.Add(new CurvePoint() { X = flow_rate, Y = head_rate });
 
            PumpCurve pump_curve = new PumpCurve(curvepoints);
 
            return pump_curve.CalcHeadByFlow(flow);
        }
 
        public double GetCurrentFlowByHead(double head)
        {
            double speed_rate = CurrentSpeed / RatedParam.RatedSpeed;
 
            //流量工况点,与转速比例成正比
            double flow_rate = RatedParam.RatedFlow * speed_rate;
            //扬程工况点,与转速比例平方成正比
            double head_rate = RatedParam.RatedHead * Math.Pow(speed_rate, 2.0);
 
            List<CurvePoint> curvepoints = new List<CurvePoint>();
            curvepoints.Add(new CurvePoint() { X = flow_rate, Y = head_rate });
 
            PumpCurve pump_curve = new PumpCurve(curvepoints);
 
            return pump_curve.CalcFlowByHead(head);
        }
        public double GetCurrentEfficiencyByFlow(double flow)
        {
            return RatedParam.PumpEfficiencyCurve.GetEfficiencyByFlow(flow);
        }
    }
 
    /// <summary>
    /// 水泵额定参数
    /// </summary>
    public class PumpRatedParam
    {
        /// <summary>
        /// 额定流量,单位:跟随系统设置
        /// </summary>
        public double RatedFlow { get; set; }
        /// <summary>
        /// 额定扬程,单位:米
        /// </summary>
        public double RatedHead { get; set; }
        /// <summary>
        /// 额定转速
        /// </summary>
        public double RatedSpeed { get; set; }
        /// <summary>
        /// 最小转速
        /// </summary>
        public double MinSpeed { get; set; }
        /// <summary>
        /// 最大转速
        /// </summary>
        public double MaxSpeed { get; set; }
        /// <summary>
        /// 最小功率
        /// </summary>
        public double MinPower { get; set; }
        /// <summary>
        /// 最大功率
        /// </summary>
        public double MaxPower { get; set; }
        /// <summary>
        /// 电机额定功率,单位:kW
        /// </summary>
        public double EMPower { get; set; }
        /// <summary>
        /// 电机额定效率,百分比
        /// </summary>
        public double EMEfficiency { get; set; } = 0.85;
        /// <summary>
        /// 水泵效率曲线
        /// </summary>
        public PumpEfficiencyCurve PumpEfficiencyCurve { get; set; }
        /// <summary>
        /// 变频器效率,定频泵默认为1
        /// </summary>
        public double VFDEfficency { get; set; } = 1.0;
    }
 
    public class CopyPump
    {
        public static Pump Copy(Pump pump_in)
        {
            List<CurvePoint> curve_points_out = new List<CurvePoint>();
            foreach (CurvePoint cp in pump_in.RatedParam.PumpEfficiencyCurve.CurvePoints)
            {
                curve_points_out.Add(new CurvePoint() { X = cp.X, Y = cp.Y });
            }
            PumpEfficiencyCurve eff_curve_out = new PumpEfficiencyCurve(pump_in.RatedParam.PumpEfficiencyCurve.Efficiency_Global,
                curve_points_out);
            PumpRatedParam rated_param = new PumpRatedParam()
            {
                RatedFlow = pump_in.RatedParam.RatedFlow,
                RatedHead = pump_in.RatedParam.RatedHead,
                RatedSpeed = pump_in.RatedParam.RatedSpeed,
                MinSpeed = pump_in.RatedParam.MinSpeed,
                MaxSpeed = pump_in.RatedParam.MaxSpeed,
                MinPower = pump_in.RatedParam.MinPower,
                MaxPower = pump_in.RatedParam.MaxPower,
                EMPower = pump_in.RatedParam.EMPower,
                EMEfficiency = pump_in.RatedParam.EMEfficiency,
                PumpEfficiencyCurve = eff_curve_out,
                VFDEfficency = pump_in.RatedParam.VFDEfficency
            };
            return new Pump(pump_in.PumpNum, rated_param, pump_in.IsOpen)
            {
                CurrentSpeed = pump_in.CurrentSpeed,
                IsOpen = pump_in.IsOpen,
                RunStatus = pump_in.RunStatus
            };
        }
    }
 
    public class CopyPumps
    {
        public static List<Pump> Copy(List<Pump> pumps_in)
        {
            List<Pump> pumps = new List<Pump>();
            foreach (Pump p in pumps_in)
            {
                pumps.Add(CopyPump.Copy(p));
            }
            return pumps;
        }
    }
}