diff --git a/Config/Utils.cs b/Config/Utils.cs
index 4855b11cc..96c3669e2 100644
--- a/Config/Utils.cs
+++ b/Config/Utils.cs
@@ -5,7 +5,6 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
-using Common;
namespace Config
{
@@ -65,119 +64,5 @@ namespace Config
/// pattern NOT found
return string.Empty;
}
-
- ///
- /// Get either Q1 or Qmin flow for a given Qn and metrological class
- ///
- /// Nominal flow in m3/h
- /// Metrological class ("A" ,"B", "C" or "R#")
- /// NotSpecified, ColdWater or HotWater
- /// Default flow when metrologic does not match pattern
- /// Q1 or Qmin flow in m3/h
- public static double GetQ1Qmin(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
- {
- if (string.IsNullOrEmpty(metroClass)) return Qdflt;
-
- int metroClassRatio;
- if ((metroClass[0] == 'R') && int.TryParse(metroClass.Substring(1), out metroClassRatio) && (metroClassRatio > 0))
- {
- return Qn / (double)metroClassRatio;
- }
- else
- {
- if (medium == Medium.HotWater)
- {
- switch (metroClass)
- {
- case "A": return (Qn < 15) ? (0.04 * Qn) : (0.08 * Qn);
- case "B": return (Qn < 15) ? (0.02 * Qn) : (0.04 * Qn);
- case "C": return (Qn < 15) ? (0.01 * Qn) : (0.02 * Qn);
- case "D": return (Qn < 15) ? (0.01 * Qn) : Qdflt;
- default: break;
- }
- }
- else
- {
- switch (metroClass)
- {
- case "A": return (Qn < 15) ? (0.04 * Qn) : (0.08 * Qn);
- case "B": return (Qn < 15) ? (0.02 * Qn) : (0.03 * Qn);
- case "C": return (Qn < 15) ? (0.01 * Qn) : (0.006 * Qn);
- default: break;
- }
- }
- }
-
- return Qdflt;
- }
-
- ///
- /// Get either Q2 or Qt flow for a given Qn and metrological class
- ///
- /// Nominal flow in m3/h
- /// Metrological class ("A" ,"B", "C" or "R#")
- /// NotSpecified, ColdWater or HotWater
- /// Default flow when metrologic does not match pattern
- /// Q2 or Qt flow in m3/h
- public static double GetQ2Qt(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
- {
- if (string.IsNullOrEmpty(metroClass)) return Qdflt;
-
- int metroClassRatio;
- if ((metroClass[0] == 'R') && int.TryParse(metroClass.Substring(1), out metroClassRatio) && (metroClassRatio > 0))
- {
- return 1.6 * Qn / (double)metroClassRatio;
- }
-
- if (medium == Medium.HotWater)
- {
- switch (metroClass)
- {
- case "A": return (Qn < 15) ? (0.1 * Qn) : (0.2 * Qn);
- case "B": return (Qn < 15) ? (0.08 * Qn) : (0.15 * Qn);
- case "C": return (Qn < 15) ? (0.06 * Qn) : (0.1 * Qn);
- case "D": return (Qn < 15) ? (0.015 * Qn) : Qdflt;
- default: break;
- }
- }
- else
- {
- switch (metroClass)
- {
- case "A": return (Qn < 15) ? (0.1 * Qn) : (0.3 * Qn);
- case "B": return (Qn < 15) ? (0.08 * Qn) : (0.2 * Qn);
- case "C": return (Qn < 15) ? (0.015 * Qn) : (0.015 * Qn);
- default: break;
- }
- }
-
- return Qdflt;
- }
-
- ///
- /// Get either Q4 or Qmax flow for a given Qn and metrological class
- ///
- /// Nominal flow in m3/h
- /// Metrological class ("A" ,"B", "C" or "R#")
- /// NotSpecified, ColdWater or HotWater
- /// Default flow when metrologic does not match pattern
- /// Q4 or Qmax flow in m3/h
- public static double GetQ4Qmax(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
- {
- if (string.IsNullOrEmpty(metroClass)) return Qdflt;
-
- switch (metroClass[0])
- {
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- return 2 * Qn;
- case 'R':
- return 1.25 * Qn;
- default:
- return Qdflt;
- }
- }
}
}
diff --git a/TBF/TBF.csproj b/TBF/TBF.csproj
index b1b8363d2..52138c75d 100644
--- a/TBF/TBF.csproj
+++ b/TBF/TBF.csproj
@@ -2445,6 +2445,7 @@
MainWnd.cs
+
Form
diff --git a/TBF/UI/Procedures/Formulas.cs b/TBF/UI/Procedures/Formulas.cs
new file mode 100644
index 000000000..e23f1ecbc
--- /dev/null
+++ b/TBF/UI/Procedures/Formulas.cs
@@ -0,0 +1,154 @@
+
+using Common;
+
+namespace TBF.UI.Procedures
+{
+ public static class Formulas
+ {
+ public static double GetTargetQ(Config.Entities.PTest ptest, double qN, double qpQiRatio, string metroClass, Medium medium)
+ {
+ if (ptest.Name.ToLower().Contains("q4") || ptest.Name.ToLower().Contains("qmax"))
+ {
+ return Formulas.GetQ4Qmax(qN, metroClass, medium, ptest.CoefQto);
+ }
+ else if (ptest.Name.ToLower().Contains("q3") || ptest.Name.ToLower().Contains("qn") || ptest.Name.ToLower().Equals("qp"))
+ {
+ return qN;
+ }
+ else if (ptest.Name.ToLower().Contains("q2") || ptest.Name.ToLower().Contains("qt"))
+ {
+ return Formulas.GetQ2Qt(qN, metroClass, medium, ptest.CoefQto);
+ }
+ else if (ptest.Name.ToLower().Contains("q1") || ptest.Name.ToLower().Contains("qmin"))
+ {
+ return Formulas.GetQ1Qmin(qN, metroClass, medium, ptest.CoefQto);
+ }
+ else if (ptest.Name.ToLower().Contains("0,1qp") || ptest.Name.ToLower().Contains("0.1qp"))
+ {
+ return 0.1 * qN;
+ }
+ else if (ptest.Name.ToLower().Contains("qi"))
+ {
+ return qN / qpQiRatio;
+ }
+ else
+ {
+ return qN; /// Manual flow selection: CoefQfrom and CoefQto are used to calculate Qfrom and Qto from Qn
+ }
+ }
+
+ ///
+ /// Get either Q1 or Qmin flow for a given Qn and metrological class
+ ///
+ /// Nominal flow in m3/h
+ /// Metrological class ("A" ,"B", "C" or "R#")
+ /// NotSpecified, ColdWater or HotWater
+ /// Default flow when metrologic does not match pattern
+ /// Q1 or Qmin flow in m3/h
+ public static double GetQ1Qmin(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
+ {
+ if (string.IsNullOrEmpty(metroClass)) return Qdflt;
+
+ int metroClassRatio;
+ if ((metroClass[0] == 'R') && int.TryParse(metroClass.Substring(1), out metroClassRatio) && (metroClassRatio > 0))
+ {
+ return Qn / (double)metroClassRatio;
+ }
+ else
+ {
+ if (medium == Medium.HotWater)
+ {
+ switch (metroClass)
+ {
+ case "A": return (Qn < 15) ? (0.04 * Qn) : (0.08 * Qn);
+ case "B": return (Qn < 15) ? (0.02 * Qn) : (0.04 * Qn);
+ case "C": return (Qn < 15) ? (0.01 * Qn) : (0.02 * Qn);
+ case "D": return (Qn < 15) ? (0.01 * Qn) : Qdflt;
+ default: break;
+ }
+ }
+ else
+ {
+ switch (metroClass)
+ {
+ case "A": return (Qn < 15) ? (0.04 * Qn) : (0.08 * Qn);
+ case "B": return (Qn < 15) ? (0.02 * Qn) : (0.03 * Qn);
+ case "C": return (Qn < 15) ? (0.01 * Qn) : (0.006 * Qn);
+ default: break;
+ }
+ }
+ }
+
+ return Qdflt;
+ }
+
+ ///
+ /// Get either Q2 or Qt flow for a given Qn and metrological class
+ ///
+ /// Nominal flow in m3/h
+ /// Metrological class ("A" ,"B", "C" or "R#")
+ /// NotSpecified, ColdWater or HotWater
+ /// Default flow when metrologic does not match pattern
+ /// Q2 or Qt flow in m3/h
+ public static double GetQ2Qt(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
+ {
+ if (string.IsNullOrEmpty(metroClass)) return Qdflt;
+
+ int metroClassRatio;
+ if ((metroClass[0] == 'R') && int.TryParse(metroClass.Substring(1), out metroClassRatio) && (metroClassRatio > 0))
+ {
+ return 1.6 * Qn / (double)metroClassRatio;
+ }
+
+ if (medium == Medium.HotWater)
+ {
+ switch (metroClass)
+ {
+ case "A": return (Qn < 15) ? (0.1 * Qn) : (0.2 * Qn);
+ case "B": return (Qn < 15) ? (0.08 * Qn) : (0.15 * Qn);
+ case "C": return (Qn < 15) ? (0.06 * Qn) : (0.1 * Qn);
+ case "D": return (Qn < 15) ? (0.015 * Qn) : Qdflt;
+ default: break;
+ }
+ }
+ else
+ {
+ switch (metroClass)
+ {
+ case "A": return (Qn < 15) ? (0.1 * Qn) : (0.3 * Qn);
+ case "B": return (Qn < 15) ? (0.08 * Qn) : (0.2 * Qn);
+ case "C": return (Qn < 15) ? (0.015 * Qn) : (0.015 * Qn);
+ default: break;
+ }
+ }
+
+ return Qdflt;
+ }
+
+ ///
+ /// Get either Q4 or Qmax flow for a given Qn and metrological class
+ ///
+ /// Nominal flow in m3/h
+ /// Metrological class ("A" ,"B", "C" or "R#")
+ /// NotSpecified, ColdWater or HotWater
+ /// Default flow when metrologic does not match pattern
+ /// Q4 or Qmax flow in m3/h
+ public static double GetQ4Qmax(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
+ {
+ if (string.IsNullOrEmpty(metroClass)) return Qdflt;
+
+ switch (metroClass[0])
+ {
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ return 2 * Qn;
+ case 'R':
+ return 1.25 * Qn;
+ default:
+ return Qdflt;
+ }
+ }
+ }
+}
diff --git a/TBF/UI/Procedures/ProceduresCtrl.cs b/TBF/UI/Procedures/ProceduresCtrl.cs
index fc0a401d2..1bfafb36b 100644
--- a/TBF/UI/Procedures/ProceduresCtrl.cs
+++ b/TBF/UI/Procedures/ProceduresCtrl.cs
@@ -738,10 +738,10 @@ namespace TBF.UI.Procedures
if (wmParams != null)
{
wmParams.NewQnames = (pt == ProfileType.Q3R);
- wmParams.Qmax = (float)((pt == ProfileType.Manual) ? 0 : Config.Utils.GetQ4Qmax(dlg.Qn, dlg.MetroClass, medium));
+ wmParams.Qmax = (float)((pt == ProfileType.Manual) ? 0 : Formulas.GetQ4Qmax(dlg.Qn, dlg.MetroClass, medium));
wmParams.Qn = (float)dlg.Qn;
- wmParams.Qt = (float)((pt == ProfileType.Manual) ? 0 : (pt == ProfileType.QpQi) ? (0.1 * dlg.Qn) : Config.Utils.GetQ2Qt(dlg.Qn, dlg.MetroClass, medium));
- wmParams.Qmin = (float)((pt == ProfileType.Manual) ? 0 : (pt == ProfileType.QpQi) ? dlg.Qn / dlg.QpQiRatio : Config.Utils.GetQ1Qmin(dlg.Qn, dlg.MetroClass, medium));
+ wmParams.Qt = (float)((pt == ProfileType.Manual) ? 0 : (pt == ProfileType.QpQi) ? (0.1 * dlg.Qn) : Formulas.GetQ2Qt(dlg.Qn, dlg.MetroClass, medium));
+ wmParams.Qmin = (float)((pt == ProfileType.Manual) ? 0 : (pt == ProfileType.QpQi) ? dlg.Qn / dlg.QpQiRatio : Formulas.GetQ1Qmin(dlg.Qn, dlg.MetroClass, medium));
wmParams.MetrologicalClass = dlg.MetroClass;
wmParams.WaterTemp = medium;
}
@@ -754,35 +754,7 @@ namespace TBF.UI.Procedures
int itemNr = 0;
foreach (var ptest in dlg.SelectedProfile.Tests)
{
- double Qtg;
- if (ptest.Name.ToLower().Contains("q4") || ptest.Name.ToLower().Contains("qmax"))
- {
- Qtg = Config.Utils.GetQ4Qmax(dlg.Qn, dlg.MetroClass, medium, ptest.CoefQto);
- }
- else if (ptest.Name.ToLower().Contains("q3") || ptest.Name.ToLower().Contains("qn") || ptest.Name.ToLower().Equals("qp"))
- {
- Qtg = dlg.Qn;
- }
- else if (ptest.Name.ToLower().Contains("q2") || ptest.Name.ToLower().Contains("qt"))
- {
- Qtg = Config.Utils.GetQ2Qt(dlg.Qn, dlg.MetroClass, medium, ptest.CoefQto);
- }
- else if (ptest.Name.ToLower().Contains("q1") || ptest.Name.ToLower().Contains("qmin"))
- {
- Qtg = Config.Utils.GetQ1Qmin(dlg.Qn, dlg.MetroClass, medium, ptest.CoefQto);
- }
- else if (ptest.Name.ToLower().Contains("0,1qp") || ptest.Name.ToLower().Contains("0.1qp"))
- {
- Qtg = 0.1 * dlg.Qn;
- }
- else if (ptest.Name.ToLower().Contains("qi"))
- {
- Qtg = dlg.Qn / dlg.QpQiRatio;
- }
- else
- {
- Qtg = dlg.Qn; /// Manual flow selection: CoefQfrom and CoefQto are used to calculate Qfrom and Qto from Qn
- }
+ double Qtg = Formulas.GetTargetQ(ptest, dlg.Qn, dlg.QpQiRatio, dlg.MetroClass, medium);
Test test = new Test(ptest.Name, itemNr++, newProcedure);
test.Part = ptest.Part;
diff --git a/TBF/UI/Procedures/TestWizard/TestProfileSelection.cs b/TBF/UI/Procedures/TestWizard/TestProfileSelection.cs
index d22f05288..3aca90400 100644
--- a/TBF/UI/Procedures/TestWizard/TestProfileSelection.cs
+++ b/TBF/UI/Procedures/TestWizard/TestProfileSelection.cs
@@ -129,36 +129,7 @@ namespace TBF.UI.Procedures.TestWizard
{
Medium medium = (profile.ProfileType == ProfileType.QnClassHotWater) ? Medium.HotWater : Medium.ColdWater;
- double Qtg;
- if (ptest.Name.ToLower().Contains("q4") || ptest.Name.ToLower().Contains("qmax"))
- {
- Qtg = Config.Utils.GetQ4Qmax(Qn, MetroClass, medium, ptest.CoefQto);
- }
- else if (ptest.Name.ToLower().Contains("q3") || ptest.Name.ToLower().Contains("qn") || ptest.Name.ToLower().Equals("qp"))
- {
- Qtg = Qn;
- }
- else if (ptest.Name.ToLower().Contains("q2") || ptest.Name.ToLower().Contains("qt"))
- {
- Qtg = Config.Utils.GetQ2Qt(Qn, MetroClass, medium, ptest.CoefQto);
- }
- else if (ptest.Name.ToLower().Contains("q1") || ptest.Name.ToLower().Contains("qmin"))
- {
- Qtg = Config.Utils.GetQ1Qmin(Qn, MetroClass, medium, ptest.CoefQto);
- }
- else if (ptest.Name.ToLower().Contains("0,1qp") || ptest.Name.ToLower().Contains("0.1qp"))
- {
- Qtg = 0.1 * Qn;
- }
- else if (ptest.Name.ToLower().Contains("qi"))
- {
- Qtg = Qn / QpQiRatio;
- }
- else
- {
- Qtg = Qn; /// Manual flow selection: CoefQfrom and CoefQto are used to calculate Qfrom and Qto from Qn
- }
-
+ double Qtg = TBF.UI.Procedures.Formulas.GetTargetQ(ptest, Qn, QpQiRatio, MetroClass, medium);
double Qfrom = Qtg * ptest.CoefQfrom;
double Qto = Qtg * ptest.CoefQto;