433 lines
18 KiB
C#
433 lines
18 KiB
C#
///
|
|
/// Copyright (c) 2017-2020 Sensus Slovensko a.s.
|
|
///
|
|
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];
|
|
public override XmlSerializer GetSerializer() { return Serializer; }
|
|
|
|
public sbyte E1; ///
|
|
public sbyte E2; ///
|
|
public sbyte E3; ///
|
|
public sbyte E4; ///
|
|
public sbyte E5; ///
|
|
public sbyte E6; ///
|
|
public sbyte E7; ///
|
|
public sbyte E8; ///
|
|
public sbyte E9; /// 0=off, 1=info, 2=evaluate, 3=stop the cycle
|
|
public sbyte E10; ///
|
|
public sbyte E11; ///
|
|
public sbyte E12; ///
|
|
public sbyte E13; ///
|
|
public sbyte E14; ///
|
|
public sbyte E15; ///
|
|
public sbyte E16; ///
|
|
public sbyte E21; ///
|
|
public sbyte E36; ///
|
|
|
|
public double Delta_Q_pct; /// [%] max deviation from the mean flow
|
|
public double Delta_T; /// [°C] max. T_up or T_down deviation from the mean temperature
|
|
public double Delta_Tup_Tdn; /// [°C] max. difference abs(T_up - T_down)
|
|
public double TestTime_min; /// [s]
|
|
public double TestTime_max; /// [s]
|
|
public double AmbTemp_min; /// [°C] min. ambient temperature
|
|
public double AmbTemp_max; /// [°C] max. ambient temperature
|
|
public double Pressure_min; /// [bar] min. water pressure
|
|
public double Pressure_max; /// [bar] max. water pressure
|
|
public double Conductivity_min; /// [uS/cm] min. electrical conductivity of water
|
|
public double Conductivity_max; /// [uS/cm] max. electrical conductivity of water
|
|
|
|
public double Coef_E9; /// Coefficient used in E9, default 0.025
|
|
public double Coef_E10; /// Coefficient used in E10, default 0.04
|
|
public double Coef_E11; /// Coefficient used in E11, default 0.1
|
|
public double Coef_E12; /// Coefficient used in E12, default 1
|
|
public double Offset_E9; /// [s] default 0 (no offset)
|
|
public double Offset_E12; /// [s] default 0 (no offset)
|
|
|
|
#if IPERL
|
|
public sbyte E25; /// MaxProefindex verification
|
|
public sbyte E26; /// Q2 factors verification (saved from production == current)
|
|
public sbyte E27; /// Direction verification
|
|
public sbyte E28; /// Previous workflow step verification
|
|
#endif
|
|
|
|
public override void InitializeAll()
|
|
{
|
|
#if IPERL
|
|
E1 = (sbyte)ErrorFlagsMode.Info;
|
|
E2 = (sbyte)ErrorFlagsMode.Off;
|
|
E3 = (sbyte)ErrorFlagsMode.Info;
|
|
E4 = (sbyte)ErrorFlagsMode.Off;
|
|
E5 = (sbyte)ErrorFlagsMode.Off;
|
|
E6 = (sbyte)ErrorFlagsMode.Off;
|
|
E7 = (sbyte)ErrorFlagsMode.Off;
|
|
E8 = (sbyte)ErrorFlagsMode.Off;
|
|
E9 = (sbyte)ErrorFlagsMode.Off;
|
|
E10 = (sbyte)ErrorFlagsMode.Off;
|
|
E11 = (sbyte)ErrorFlagsMode.Off;
|
|
E12 = (sbyte)ErrorFlagsMode.Off;
|
|
E13 = (sbyte)ErrorFlagsMode.Off;
|
|
E14 = (sbyte)ErrorFlagsMode.Off;
|
|
E15 = (sbyte)ErrorFlagsMode.Off;
|
|
E16 = (sbyte)ErrorFlagsMode.Off;
|
|
E21 = (sbyte)ErrorFlagsMode.Info;
|
|
E36 = (sbyte)ErrorFlagsMode.On;
|
|
#else
|
|
E1 = (sbyte)ErrorFlagsMode.Info;
|
|
E2 = (sbyte)ErrorFlagsMode.Info;
|
|
E3 = (sbyte)ErrorFlagsMode.Info;
|
|
E4 = (sbyte)ErrorFlagsMode.Info;
|
|
E5 = (sbyte)ErrorFlagsMode.Info;
|
|
E6 = (sbyte)ErrorFlagsMode.Info;
|
|
E7 = (sbyte)ErrorFlagsMode.Info;
|
|
E8 = (sbyte)ErrorFlagsMode.Info;
|
|
E9 = (sbyte)ErrorFlagsMode.Info;
|
|
E10 = (sbyte)ErrorFlagsMode.Info;
|
|
E11 = (sbyte)ErrorFlagsMode.Info;
|
|
E12 = (sbyte)ErrorFlagsMode.Info;
|
|
E13 = (sbyte)ErrorFlagsMode.Info;
|
|
E14 = (sbyte)ErrorFlagsMode.Info;
|
|
E15 = (sbyte)ErrorFlagsMode.Info;
|
|
E16 = (sbyte)ErrorFlagsMode.Info;
|
|
E21 = (sbyte)ErrorFlagsMode.Info;
|
|
E36 = (sbyte)ErrorFlagsMode.Off;
|
|
#endif
|
|
Delta_Q_pct = 5.0; /// [%]
|
|
Delta_T = 10.0; /// [°C]
|
|
Delta_Tup_Tdn = 10.0; /// [°C]
|
|
TestTime_min = 0; /// [s]
|
|
TestTime_max = 99999; /// [s]
|
|
AmbTemp_min = 5.0; /// [°C]
|
|
AmbTemp_max = 95.0; /// [°C]
|
|
Pressure_min = 0; /// [bar]
|
|
Pressure_max = 16.0; /// [bar]
|
|
Conductivity_min = 600.0; /// [uS/cm]
|
|
Conductivity_max = 1200.0; /// [uS/cm]
|
|
|
|
Coef_E9 = 0.025;
|
|
Coef_E10 = 0.04;
|
|
Coef_E11 = 0.1;
|
|
Coef_E12 = 1.0;
|
|
Offset_E9 = 0; /// [s]
|
|
Offset_E12 = 0; /// [s]
|
|
#if IPERL
|
|
E25 = (sbyte)ErrorFlagsMode.Info; /// MaxPruefindex verification
|
|
E26 = (sbyte)ErrorFlagsMode.Off; /// Q2 factors verification (saved from production == current)
|
|
E27 = (sbyte)ErrorFlagsMode.Off; /// Direction verification
|
|
E28 = (sbyte)ErrorFlagsMode.Info; /// Previous workflow step verification
|
|
#endif
|
|
}
|
|
|
|
string[] paramNames = new string[]
|
|
{
|
|
"E1",
|
|
"E2",
|
|
"E3",
|
|
"E4",
|
|
"E5",
|
|
"E6",
|
|
"E7",
|
|
"E8",
|
|
"E9",
|
|
"E10",
|
|
"E11",
|
|
"E12",
|
|
"E13",
|
|
"E14",
|
|
"E15",
|
|
"E16",
|
|
"E21",
|
|
"E36",
|
|
|
|
"Delta Q [%]",
|
|
"Delta T [°C]",
|
|
"max. Abs(Tup - Tdn) [°C]",
|
|
string.Format("min. {0}", Strings.Test_time_s_chdr),
|
|
string.Format("max. {0}", Strings.Test_time_s_chdr),
|
|
string.Format("min. {0} [°C]", Strings.Air_temperature),
|
|
string.Format("max. {0} [°C]", Strings.Air_temperature),
|
|
string.Format("min. {0} [bar]", Strings.Pressure),
|
|
string.Format("max. {0} [bar]", Strings.Pressure),
|
|
"min. conductivity [uS/cm]",
|
|
"max. conductivity [uS/cm]",
|
|
|
|
"Coef.E9",
|
|
"Coef.E10",
|
|
"Coef.E11",
|
|
"Coef.E12",
|
|
"Offset E9 [s]",
|
|
"Offset E12 [s]",
|
|
#if IPERL
|
|
"E25",
|
|
"E26",
|
|
"E27",
|
|
"E28",
|
|
#endif
|
|
};
|
|
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 ((ErrorFlagsMode)E1).ToDescription();
|
|
case 1: return ((ErrorFlagsMode)E2).ToDescription();
|
|
case 2: return ((ErrorFlagsMode)E3).ToDescription();
|
|
case 3: return ((ErrorFlagsMode)E4).ToDescription();
|
|
case 4: return ((ErrorFlagsMode)E5).ToDescription();
|
|
case 5: return ((ErrorFlagsMode)E6).ToDescription();
|
|
case 6: return ((ErrorFlagsMode)E7).ToDescription();
|
|
case 7: return ((ErrorFlagsMode)E8).ToDescription();
|
|
case 8: return ((ErrorFlagsMode)E9).ToDescription();
|
|
case 9: return ((ErrorFlagsMode)E10).ToDescription();
|
|
case 10: return ((ErrorFlagsMode)E11).ToDescription();
|
|
case 11: return ((ErrorFlagsMode)E12).ToDescription();
|
|
case 12: return ((ErrorFlagsMode)E13).ToDescription();
|
|
case 13: return ((ErrorFlagsMode)E14).ToDescription();
|
|
case 14: return ((ErrorFlagsMode)E15).ToDescription();
|
|
case 15: return ((ErrorFlagsMode)E16).ToDescription();
|
|
case 16: return ((ErrorFlagsMode)E21).ToDescription();
|
|
case 17: return ((ErrorFlagsMode)E36).ToDescription();
|
|
|
|
case 18: return Delta_Q_pct.ToString();
|
|
case 19: return Delta_T.ToString();
|
|
case 20: return Delta_Tup_Tdn.ToString();
|
|
case 21: return TestTime_min.ToString();
|
|
case 22: return TestTime_max.ToString();
|
|
case 23: return AmbTemp_min.ToString();
|
|
case 24: return AmbTemp_max.ToString();
|
|
case 25: return Pressure_min.ToString();
|
|
case 26: return Pressure_max.ToString();
|
|
case 27: return Conductivity_min.ToString();
|
|
case 28: return Conductivity_max.ToString();
|
|
case 29: return Coef_E9.ToString();
|
|
case 30: return Coef_E10.ToString();
|
|
case 31: return Coef_E11.ToString();
|
|
case 32: return Coef_E12.ToString();
|
|
case 33: return Offset_E9.ToString();
|
|
case 34: return Offset_E12.ToString();
|
|
#if IPERL
|
|
case 35: return ((ErrorFlagsMode)E25).ToDescription();
|
|
case 36: return ((ErrorFlagsMode)E26).ToDescription();
|
|
case 37: return ((ErrorFlagsMode)E27).ToDescription();
|
|
case 38: return ((ErrorFlagsMode)E28).ToDescription();
|
|
#endif
|
|
default: return string.Empty;
|
|
}
|
|
}
|
|
|
|
/// Retrieves parameters from UI controls
|
|
public CfgUpdateFlags UpdateParam(int i, string sVal)
|
|
{
|
|
switch (i)
|
|
{
|
|
case 0: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E1 = (sbyte)m; break; }; break;
|
|
case 1: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E2 = (sbyte)m; break; }; break;
|
|
case 2: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E3 = (sbyte)m; break; }; break;
|
|
case 3: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E4 = (sbyte)m; break; }; break;
|
|
case 4: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E5 = (sbyte)m; break; }; break;
|
|
case 5: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E6 = (sbyte)m; break; }; break;
|
|
case 6: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E7 = (sbyte)m; break; }; break;
|
|
case 7: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E8 = (sbyte)m; break; }; break;
|
|
case 8: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E9 = (sbyte)m; break; }; break;
|
|
case 9: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E10 = (sbyte)m; break; }; break;
|
|
case 10: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E11 = (sbyte)m; break; }; break;
|
|
case 11: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E12 = (sbyte)m; break; }; break;
|
|
case 12: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E13 = (sbyte)m; break; }; break;
|
|
case 13: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E14 = (sbyte)m; break; }; break;
|
|
case 14: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E15 = (sbyte)m; break; }; break;
|
|
case 15: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E16 = (sbyte)m; break; }; break;
|
|
case 16: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E21 = (sbyte)m; break; }; break;
|
|
case 17: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E36 = (sbyte)m; break; }; break;
|
|
|
|
case 18: Delta_Q_pct = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 19: Delta_T = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 20: Delta_Tup_Tdn = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 21: TestTime_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 22: TestTime_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 23: AmbTemp_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 24: AmbTemp_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 25: Pressure_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 26: Pressure_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 27: Conductivity_min = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 28: Conductivity_max = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 29: Coef_E9 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 30: Coef_E10 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 31: Coef_E11 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 32: Coef_E12 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 33: Offset_E9 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
case 34: Offset_E12 = Utils.ParseUDouble(sVal); return CfgUpdateFlags.None;
|
|
#if IPERL
|
|
case 35: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E25 = (sbyte)m; break; }; break;
|
|
case 36: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E26 = (sbyte)m; break; }; break;
|
|
case 37: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E27 = (sbyte)m; break; }; break;
|
|
case 38: for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++) if (m.ToDescription() == sVal) { E28 = (sbyte)m; break; }; break;
|
|
#endif
|
|
}
|
|
|
|
return CfgUpdateFlags.None;
|
|
}
|
|
|
|
/// Verifies whether strings in UI controls represent valid parameters
|
|
public bool ValidateParam(int i, string strValue, out string message)
|
|
{
|
|
message = string.Empty;
|
|
|
|
double dummy;
|
|
switch (i)
|
|
{
|
|
case 0:
|
|
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:
|
|
case 17:
|
|
#if IPERL
|
|
case 35:
|
|
case 36:
|
|
case 37:
|
|
case 38:
|
|
#endif
|
|
for (ErrorFlagsMode m = 0; m < ErrorFlagsMode.Count; m++)
|
|
{
|
|
if (m.ToDescription() == strValue) return true;
|
|
}
|
|
break;
|
|
|
|
case 18:
|
|
case 19:
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
case 23:
|
|
case 24:
|
|
case 25:
|
|
case 26:
|
|
case 27:
|
|
case 28:
|
|
case 29:
|
|
case 30:
|
|
case 31:
|
|
case 32:
|
|
case 33:
|
|
case 34:
|
|
if (Utils.TryParseUDouble(strValue, out dummy)) return true;
|
|
break;
|
|
|
|
default:
|
|
message = "Invalid index";
|
|
return false;
|
|
}
|
|
|
|
message = ParamName(i) + " is invalid";
|
|
return false;
|
|
}
|
|
|
|
void CopyContentTo(TestParams prms)
|
|
{
|
|
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.E21 = this.E21;
|
|
prms.E36 = this.E36;
|
|
|
|
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.Conductivity_min = this.Conductivity_min;
|
|
prms.Conductivity_max = this.Conductivity_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;
|
|
prms.Offset_E9 = this.Offset_E9;
|
|
prms.Offset_E12 = this.Offset_E12;
|
|
#if IPERL
|
|
prms.E25 = this.E25;
|
|
prms.E26 = this.E26;
|
|
prms.E27 = this.E27;
|
|
prms.E28 = this.E28;
|
|
#endif
|
|
}
|
|
|
|
public IParamsProvider Clone()
|
|
{
|
|
TestParams pars = new TestParams();
|
|
CopyContentTo(pars);
|
|
return pars;
|
|
}
|
|
|
|
public override void UpdateFromDbEntity(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;
|
|
}
|
|
}
|
|
}
|