tbf/TestBenchFramework/BenchControl/Various/ErrorFlags/TestParams.cs

348 lines
9.8 KiB
C#

///
/// Copyright (c) 2017 Sensus Metering Systems
///
using System.IO;
using System.Xml.Serialization;
using Config.Entities;
using TBF.BenchControl.Generic;
using TBF.Resources;
namespace TBF.BenchControl.Various.ErrorFlags
{
public class TestParams : TestParamsBase, IParamsProvider, ITestParams
{
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(TestParams) })[0];
protected override XmlSerializer GetSerializer() { return Serializer; }
public ErrorFlagsMode Mode; /// 0 = Off, 1 = Info (show only), 2 = On (show and evaluate)
public bool E1;
public bool E2;
public bool E3;
public bool E4;
public bool E5;
public bool E6;
public bool E7;
public bool E8;
public bool E9;
public bool E10;
public bool E11;
public bool E12;
public bool E13;
public bool E14;
public bool E15;
public bool E16;
public float Delta_Q_pct; /// [%] max deviation from the mean flow
public float Delta_T; /// [°C] max. T_up or T_down deviation from the mean temperature
public float Delta_Tup_Tdn; /// [°C] max. difference abs(T_up - T_down)
public float TestTime_min; /// [s]
public float TestTime_max; /// [s]
public float AmbTemp_min; /// [°C] min. ambient temperature
public float AmbTemp_max; /// [°C] max. ambient temperature
public float Pressure_min; /// [bar] min. water pressure
public float Pressure_max; /// [bar] max. water pressure
public float Coef_E9; /// Coefficient used in E9, default 0.025
public float Coef_E10; /// Coefficient used in E10, default 0.04
public float Coef_E11; /// Coefficient used in E11, default 0.1
public float Coef_E12; /// Coefficient used in E12, default 1
public override void InitializeAll()
{
Mode = ErrorFlagsMode.On;
E1 = true;
E2 = true;
E3 = true;
E4 = true;
E5 = true;
E6 = true;
E7 = true;
E8 = true;
E9 = true;
E10 = true;
E11 = true;
E12 = true;
E13 = true;
E14 = true;
E15 = true;
E16 = true;
Delta_Q_pct = 2.5f; /// [%]
Delta_T = 10.0f; /// [°C]
Delta_Tup_Tdn = 10.0f; /// [°C]
TestTime_min = 0; /// [s]
TestTime_max = 99999; /// [s]
AmbTemp_min = 5.0f; /// [°C]
AmbTemp_max = 95.0f; /// [°C]
Pressure_min = 0; /// [bar]
Pressure_max = 16.0f; /// [bar]
Coef_E9 = 0.025f;
Coef_E10 = 0.04f;
Coef_E11 = 0.1f;
Coef_E12 = 1.0f;
}
string[] paramNames = new string[]
{
Strings.Mode,
"E1",
"E2",
"E3",
"E4",
"E5",
"E6",
"E7",
"E8",
"E9",
"E10",
"E11",
"E12",
"E13",
"E14",
"E15",
"E16",
"Delta Q [%]",
"Delta T [°C]",
"max. Abs(Tup - Tdn) [°C]",
string.Format("min. {0} [s]", Strings.Test_time_s_chdr),
string.Format("max. {0} [s]", Strings.Test_time_s_chdr),
string.Format("min. {0}", Strings.Ambient_temp_C_),
string.Format("max. {0}", Strings.Ambient_temp_C_),
string.Format("min. {0}", Strings.Pressure_bar),
string.Format("max. {0}", Strings.Pressure_bar),
"Coef.E9",
"Coef.E10",
"Coef.E11",
"Coef.E12"
};
public override string ParamName(int i) { return paramNames[i]; }
public override int ParamsCount() { return paramNames.Length; }
public override string ToString(int i)
{
switch (i)
{
case 0: return Mode.ToDescription();
case 1: return (E1 ? Strings.yes : Strings.no);
case 2: return (E2 ? Strings.yes : Strings.no);
case 3: return (E3 ? Strings.yes : Strings.no);
case 4: return (E4 ? Strings.yes : Strings.no);
case 5: return (E5 ? Strings.yes : Strings.no);
case 6: return (E6 ? Strings.yes : Strings.no);
case 7: return (E7 ? Strings.yes : Strings.no);
case 8: return (E8 ? Strings.yes : Strings.no);
case 9: return (E9 ? Strings.yes : Strings.no);
case 10: return (E10 ? Strings.yes : Strings.no);
case 11: return (E11 ? Strings.yes : Strings.no);
case 12: return (E12 ? Strings.yes : Strings.no);
case 13: return (E13 ? Strings.yes : Strings.no);
case 14: return (E14 ? Strings.yes : Strings.no);
case 15: return (E15 ? Strings.yes : Strings.no);
case 16: return (E16 ? Strings.yes : Strings.no);
case 17: return Delta_Q_pct.ToString();
case 18: return Delta_T.ToString();
case 19: return Delta_Tup_Tdn.ToString();
case 20: return TestTime_min.ToString();
case 21: return TestTime_max.ToString();
case 22: return AmbTemp_min.ToString();
case 23: return AmbTemp_max.ToString();
case 24: return Pressure_min.ToString();
case 25: return Pressure_max.ToString();
case 26: return Coef_E9.ToString();
case 27: return Coef_E10.ToString();
case 28: return Coef_E11.ToString();
case 29: return Coef_E12.ToString();
default: return string.Empty;
}
}
/// Retrieves parameters from UI controls
public void UpdateParam(int i, string strValue)
{
switch (i)
{
case 0:
for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++)
{
if (m.ToDescription() == strValue)
{
Mode = m;
return;
}
}
return;
case 1: E1 = (strValue == Strings.yes); return;
case 2: E2 = (strValue == Strings.yes); return;
case 3: E3 = (strValue == Strings.yes); return;
case 4: E4 = (strValue == Strings.yes); return;
case 5: E5 = (strValue == Strings.yes); return;
case 6: E6 = (strValue == Strings.yes); return;
case 7: E7 = (strValue == Strings.yes); return;
case 8: E8 = (strValue == Strings.yes); return;
case 9: E9 = (strValue == Strings.yes); return;
case 10: E10 = (strValue == Strings.yes); return;
case 11: E11 = (strValue == Strings.yes); return;
case 12: E12 = (strValue == Strings.yes); return;
case 13: E13 = (strValue == Strings.yes); return;
case 14: E14 = (strValue == Strings.yes); return;
case 15: E15 = (strValue == Strings.yes); return;
case 16: E16 = (strValue == Strings.yes); return;
case 17: Delta_Q_pct = Utils.ParseUFloat(strValue); return;
case 18: Delta_T = Utils.ParseUFloat(strValue); return;
case 19: Delta_Tup_Tdn = Utils.ParseUFloat(strValue); return;
case 20: TestTime_min = Utils.ParseUFloat(strValue); return;
case 21: TestTime_max = Utils.ParseUFloat(strValue); return;
case 22: AmbTemp_min = Utils.ParseUFloat(strValue); return;
case 23: AmbTemp_max = Utils.ParseUFloat(strValue); return;
case 24: Pressure_min = Utils.ParseUFloat(strValue); return;
case 25: Pressure_max = Utils.ParseUFloat(strValue); return;
case 26: Coef_E9 = Utils.ParseUFloat(strValue); return;
case 27: Coef_E10 = Utils.ParseUFloat(strValue); return;
case 28: Coef_E11 = Utils.ParseUFloat(strValue); return;
case 29: Coef_E12 = Utils.ParseUFloat(strValue); return;
default: return;
}
}
/// Verifies whether strings in UI controls represent valid parameters
public bool ValidateParam(int i, string strValue, out string message)
{
message = string.Empty;
float fdummy;
switch (i)
{
case 0:
for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++)
{
if (m.ToDescription() == strValue) return true;
}
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
if (strValue == Strings.yes || strValue == Strings.no) return true;
break;
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
if (Utils.TryParseUFloat(strValue, out fdummy)) return true;
break;
default:
message = "Invalid index";
return false;
}
message = ParamName(i) + " is invalid";
return false;
}
void CopyContentTo(TestParams prms)
{
prms.Mode = this.Mode;
prms.E1 = this.E1;
prms.E2 = this.E2;
prms.E3 = this.E3;
prms.E4 = this.E4;
prms.E5 = this.E5;
prms.E6 = this.E6;
prms.E7 = this.E7;
prms.E8 = this.E8;
prms.E9 = this.E9;
prms.E10 = this.E10;
prms.E11 = this.E11;
prms.E12 = this.E12;
prms.E13 = this.E13;
prms.E14 = this.E14;
prms.E15 = this.E15;
prms.E16 = this.E16;
prms.Delta_Q_pct = this.Delta_Q_pct;
prms.Delta_T = this.Delta_T;
prms.Delta_Tup_Tdn = this.Delta_Tup_Tdn;
prms.TestTime_min = this.TestTime_min;
prms.TestTime_max = this.TestTime_max;
prms.AmbTemp_min = this.AmbTemp_min;
prms.AmbTemp_max = this.AmbTemp_max;
prms.Pressure_min = this.Pressure_min;
prms.Pressure_max = this.Pressure_max;
prms.Coef_E9 = this.Coef_E9;
prms.Coef_E10 = this.Coef_E10;
prms.Coef_E11 = this.Coef_E11;
prms.Coef_E12 = this.Coef_E12;
}
public IParamsProvider Clone()
{
TestParams pars = new TestParams();
CopyContentTo(pars);
return pars;
}
public override void UpdateTestParams(ComponentTest dbEntity)
{
if (dbEntity == null) return;
try
{
TestParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as TestParams;
testParamsEntity = dbEntity;
componentName = dbEntity.CmpntName;
test = dbEntity.Test;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
{
}
}
public TestParams() { }
public TestParams(bool initialize)
{
if (initialize) InitializeAll();
}
public TestParams(ComponentProcedure procedureParamsEntity, string componentName, Test test)
{
this.testParamsEntity = testParamsEntity;
this.componentName = componentName;
this.test = test;
}
}
}