186 lines
5.2 KiB
C#
186 lines
5.2 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Xml.Serialization;
|
|
using TBF.BenchControl.Generic;
|
|
using TBF.Resources;
|
|
|
|
namespace TBF.BenchControl.TestMethods.CombinedWithDetection
|
|
{
|
|
public class CombinedWithDetTestParams : IParamsProvider, ITestParams
|
|
{
|
|
public float TargetQ; /// Target=terminal flow durning detection when increasing or decreasing the flow
|
|
public float RelativeQfrom; /// Tested flow low range related to the detected flow
|
|
public float RelativeQto; /// Tested flow high range related to the detected flow
|
|
public float RateOfChange; /// Each step is calculated as (TargetQfrom - Qfrom) * RateOfChange, text form is displayed in % (*100)
|
|
public float DetectionThreshold;/// Drop of frequency for the detection, text form is displayed in % (*100)
|
|
public int SupressTrills;
|
|
|
|
string[] paramNames = new string[]
|
|
{
|
|
Strings.TargetQ,
|
|
Strings.RelativeQfrom,
|
|
Strings.RelativeQto,
|
|
Strings.RateOfChangePct,
|
|
Strings.DetectionThresholdPct,
|
|
Strings.SupressWMTrills,
|
|
};
|
|
public string ParamName(int i) { return paramNames[i]; }
|
|
|
|
public string ToString(int i)
|
|
{
|
|
switch (i)
|
|
{
|
|
case 0: return TargetQ.ToString();
|
|
case 1: return RelativeQfrom.ToString();
|
|
case 2: return RelativeQto.ToString();
|
|
case 3: return (100.0f * RateOfChange).ToString();
|
|
case 4: return (100.0f * DetectionThreshold).ToString();
|
|
case 5: return SupressTrills.ToString();
|
|
default: return string.Empty;
|
|
}
|
|
}
|
|
|
|
public void UpdateParam(int i, string strValue)
|
|
{
|
|
switch (i)
|
|
{
|
|
case 0: TargetQ = Utils.ParseUFloat(strValue); return;
|
|
case 1: RelativeQfrom = Utils.ParseSFloat(strValue); return;
|
|
case 2: RelativeQto = Utils.ParseSFloat(strValue); return;
|
|
case 3: RateOfChange = Utils.ParseUFloat(strValue) / 100.0f; return;
|
|
case 4: DetectionThreshold = Utils.ParseUFloat(strValue) / 100.0f; return;
|
|
case 5: SupressTrills = int.Parse(strValue); return;
|
|
default: return;
|
|
}
|
|
}
|
|
|
|
public bool ValidateParam(int i, string strValue, out string message)
|
|
{
|
|
message = string.Empty;
|
|
|
|
float dummy;
|
|
int idummy;
|
|
switch (i)
|
|
{
|
|
case 0:
|
|
case 3:
|
|
case 4:
|
|
if (Utils.TryParseUFloat(strValue, out dummy)) return true;
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
if (Utils.TryParseSFloat(strValue, out dummy)) return true;
|
|
break;
|
|
case 5:
|
|
if (int.TryParse(strValue, out idummy)) return true;
|
|
break;
|
|
default:
|
|
message = "Invalid index";
|
|
return false;
|
|
}
|
|
|
|
message = ParamName(i) + " is invalid";
|
|
return false;
|
|
}
|
|
|
|
#region Boilerplate code
|
|
|
|
public int ParamsCount() { return paramNames.Length; }
|
|
|
|
public override string ToString()
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < ParamsCount(); i++)
|
|
{
|
|
if (i != 0) sb.Append("; ");
|
|
sb.Append(ParamName(i));
|
|
sb.Append("=");
|
|
sb.Append(ToString(i));
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
|
|
[XmlIgnore]
|
|
public Entities.ComponentTest TestParamsEntity { get { return testParamsEntity; } }
|
|
Entities.ComponentTest testParamsEntity;
|
|
|
|
[XmlIgnore]
|
|
public string ComponentName { get { return componentName; } }
|
|
string componentName;
|
|
|
|
[XmlIgnore]
|
|
public Entities.Test Test { get { return test; } }
|
|
Entities.Test test;
|
|
|
|
/// Parameterless constructor
|
|
public CombinedWithDetTestParams()
|
|
{
|
|
TargetQ = 3.0f;
|
|
RelativeQfrom = -0.4f;
|
|
RelativeQto = -0.2f;
|
|
RateOfChange = 0.05f;
|
|
DetectionThreshold = 0.25f;
|
|
}
|
|
|
|
public CombinedWithDetTestParams(Entities.ComponentTest testParamsEntity, string componentName, Entities.Test test)
|
|
: this()
|
|
{
|
|
this.testParamsEntity = testParamsEntity;
|
|
this.componentName = componentName;
|
|
this.test = test;
|
|
}
|
|
|
|
public TBF.Entities.ComponentTest ToDbEntity(IComponent component, Entities.Test test)
|
|
{
|
|
using (var writer = new StringWriter())
|
|
{
|
|
/// Serialize this class with parameters
|
|
(new XmlSerializer(GetType())).Serialize(writer, this);
|
|
|
|
/// Create and return the ComponentTest entity
|
|
TBF.Entities.ComponentTest entity = new TBF.Entities.ComponentTest();
|
|
entity.CmpntName = component.Cfg.Name;
|
|
entity.Parameters = writer.ToString();
|
|
entity.Test = test;
|
|
return entity;
|
|
}
|
|
}
|
|
|
|
public void UpdateDbEntity()
|
|
{
|
|
using (var writer = new StringWriter())
|
|
{
|
|
/// Serialize this class and update the entity
|
|
(new XmlSerializer(GetType())).Serialize(writer, this);
|
|
testParamsEntity.Parameters = writer.ToString();
|
|
testParamsEntity.CmpntName = componentName;
|
|
testParamsEntity.Test = test;
|
|
|
|
}
|
|
}
|
|
|
|
public static IParamsProvider GetTestParams(Entities.ComponentTest testParamsEntity)
|
|
{
|
|
if (testParamsEntity == null) return new CombinedWithDetTestParams();
|
|
|
|
CombinedWithDetTestParams testParams;
|
|
try
|
|
{
|
|
testParams = (CombinedWithDetTestParams)(new XmlSerializer(typeof(CombinedWithDetTestParams)))
|
|
.Deserialize(new StringReader(testParamsEntity.Parameters));
|
|
}
|
|
catch
|
|
{
|
|
testParams = new CombinedWithDetTestParams();
|
|
}
|
|
testParams.testParamsEntity = testParamsEntity;
|
|
testParams.componentName = testParamsEntity.CmpntName;
|
|
testParams.test = testParamsEntity.Test;
|
|
return testParams;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|