diff --git a/TestBenchFramework/BenchControl/DataEntry/Munich/EntryForm.cs b/TestBenchFramework/BenchControl/DataEntry/Munich/EntryForm.cs
index 4d86649ad..511a6dc74 100644
--- a/TestBenchFramework/BenchControl/DataEntry/Munich/EntryForm.cs
+++ b/TestBenchFramework/BenchControl/DataEntry/Munich/EntryForm.cs
@@ -27,6 +27,19 @@ namespace TBF.BenchControl.DataEntry.Munich
string protocolTitle;
+ /// Not supported in Munich
+ public string SerialNr(int wmNr)
+ {
+ return string.Empty;
+ }
+
+ /// Not supported in Munich
+ public float WMState(int wmNr)
+ {
+ return 0;
+ }
+
+
System.Windows.Forms.Form modelessDlg;
bool resultSaved;
@@ -50,7 +63,7 @@ namespace TBF.BenchControl.DataEntry.Munich
}
/// Reference to the operation
- public IOperation ShowFormAtCycleBeginningOp(IList waterMeters)
+ public IOperation ShowCycleBeginFormOp(IList waterMeters)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.ShowFormAtCycleBeginning;
@@ -59,7 +72,7 @@ namespace TBF.BenchControl.DataEntry.Munich
}
/// Reference to the operation
- public IOperation ShowFormAtCycleEndOp(IList waterMeters)
+ public IOperation ShowCycleEndFormOp(IList waterMeters)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.ShowFormAtCycleEnd;
@@ -67,6 +80,18 @@ namespace TBF.BenchControl.DataEntry.Munich
return this;
}
+ /// Reference to the operation
+ public IOperation ShowWMSNsAndStatesFormOp()
+ {
+ return null;
+ }
+
+ /// Reference to the operation
+ public IOperation ShowWMStatesFormOp()
+ {
+ return null;
+ }
+
delegate void EntryFormDlgt(EntryForm myRef);
///
void OpenBeginningDlg(EntryForm myRef)
diff --git a/TestBenchFramework/BenchControl/DataEntry/Munich3/EntryForm.cs b/TestBenchFramework/BenchControl/DataEntry/Munich3/EntryForm.cs
index 6d40e118e..a00321a00 100644
--- a/TestBenchFramework/BenchControl/DataEntry/Munich3/EntryForm.cs
+++ b/TestBenchFramework/BenchControl/DataEntry/Munich3/EntryForm.cs
@@ -21,6 +21,19 @@ namespace TBF.BenchControl.DataEntry.Munich3
string protocolTitle;
+ /// Not supported in Munich
+ public string SerialNr(int wmNr)
+ {
+ return string.Empty;
+ }
+
+ /// Not supported in Munich
+ public float WMState(int wmNr)
+ {
+ return 0;
+ }
+
+
System.Windows.Forms.Form modelessDlg;
bool resultSaved;
@@ -44,7 +57,7 @@ namespace TBF.BenchControl.DataEntry.Munich3
}
/// Reference to the operation
- public IOperation ShowFormAtCycleBeginningOp(IList waterMeters)
+ public IOperation ShowCycleBeginFormOp(IList waterMeters)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.ShowFormAtCycleBeginning;
@@ -53,7 +66,7 @@ namespace TBF.BenchControl.DataEntry.Munich3
}
/// Reference to the operation
- public IOperation ShowFormAtCycleEndOp(IList waterMeters)
+ public IOperation ShowCycleEndFormOp(IList waterMeters)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.ShowFormAtCycleEnd;
@@ -61,6 +74,18 @@ namespace TBF.BenchControl.DataEntry.Munich3
return this;
}
+ /// Reference to the operation
+ public IOperation ShowWMSNsAndStatesFormOp()
+ {
+ return null;
+ }
+
+ /// Reference to the operation
+ public IOperation ShowWMStatesFormOp()
+ {
+ return null;
+ }
+
delegate void EntryFormDlgt(EntryForm myRef);
///
void OpenBeginningDlg(EntryForm myRef)
@@ -71,7 +96,7 @@ namespace TBF.BenchControl.DataEntry.Munich3
///
void OpenEndDlg(EntryForm myRef)
{
- CycleEndForm endForm = new CycleEndForm();
+ CycleEndForm endForm = new CycleEndForm(Program.WMsCount);
endForm.ProtocolName1 = entryFormCfg.ProtocolTitle1;
endForm.ProtocolName2 = entryFormCfg.ProtocolTitle2;
endForm.ProtocolName3 = entryFormCfg.ProtocolTitle3;
diff --git a/TestBenchFramework/BenchControl/DataEntry/WMStates/EntryForm.cs b/TestBenchFramework/BenchControl/DataEntry/WMStates/EntryForm.cs
index 8e53362e0..cd9ea0531 100644
--- a/TestBenchFramework/BenchControl/DataEntry/WMStates/EntryForm.cs
+++ b/TestBenchFramework/BenchControl/DataEntry/WMStates/EntryForm.cs
@@ -5,7 +5,7 @@ using TBF.BenchControl.GenericDevices;
namespace TBF.BenchControl.DataEntry.WMStates
{
- public class EntryForm : Generic.IComponent, IOperation, GenericDevices.IDataEntry, GenericDevices.IHasProtocolTitle
+ public class EntryForm : Generic.IComponent, IOperation, GenericDevices.IDataEntry
{
readonly EntryFormCfg entryFormCfg;
public Generic.IComponentCfg Cfg { get { return entryFormCfg; } }
@@ -14,24 +14,44 @@ namespace TBF.BenchControl.DataEntry.WMStates
public string Name { get { return entryFormCfg.Name; } }
+
///
- /// Properties set by the Begin and the End form
+ /// Water meter serial numbers set by forms
///
- public string ProtocolTitle { get { return protocolTitle; } }
- string protocolTitle;
+ string[] serialNr;
+ public string SerialNr(int wmNr)
+ {
+ if (serialNr == null || serialNr.Length <= wmNr) return string.Empty;
+ return serialNr[wmNr];
+ }
+
+
+ ///
+ /// Water meter states set by forms
+ ///
+ float[] wmState;
+ public float WMState(int wmNr)
+ {
+ if (wmState == null || wmState.Length <= wmNr) return 0;
+ return wmState[wmNr];
+ }
+
+
+ /// Not supported
+ public void UpdateTestResults(IList waterMeters, IList results)
+ {
+ }
System.Windows.Forms.Form modelessDlg;
bool resultSaved;
- IList waterMeters;
-
public enum CurrentOp
{
None,
- ShowFormAtCycleBeginning,
- ShowFormAtCycleEnd,
+ EnterWMSNsAndStates,
+ EnterWMStates,
}
CurrentOp currentOp;
@@ -40,24 +60,36 @@ namespace TBF.BenchControl.DataEntry.WMStates
{
if (cfg == null) throw new ArgumentNullException("cfg");
this.entryFormCfg = cfg;
+ serialNr = new string[Program.WMsCount];
+ wmState = new float[Program.WMsCount];
currentOp = CurrentOp.None;
}
+ /// Reference to the operation
+ public IOperation ShowCycleBeginFormOp(IList waterMeters)
+ {
+ return null;
+ }
+
+ /// Reference to the operation
+ public IOperation ShowCycleEndFormOp(IList waterMeters)
+ {
+ return null;
+ }
+
/// Reference to the operation
- public IOperation ShowFormAtCycleBeginningOp(IList waterMeters)
+ public IOperation ShowWMSNsAndStatesFormOp()
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
- currentOp = CurrentOp.ShowFormAtCycleBeginning;
- this.waterMeters = waterMeters;
+ currentOp = CurrentOp.EnterWMSNsAndStates;
return this;
}
/// Reference to the operation
- public IOperation ShowFormAtCycleEndOp(IList waterMeters)
+ public IOperation ShowWMStatesFormOp()
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
- currentOp = CurrentOp.ShowFormAtCycleEnd;
- this.waterMeters = waterMeters;
+ currentOp = CurrentOp.EnterWMStates;
return this;
}
@@ -71,8 +103,7 @@ namespace TBF.BenchControl.DataEntry.WMStates
///
void OpenEndDlg(EntryForm myRef)
{
- WMStatesForm endForm = new WMStatesForm();
- myRef.modelessDlg = endForm;
+ myRef.modelessDlg = new WMStatesForm(Program.WMsCount);
modelessDlg.Show();
}
@@ -82,10 +113,10 @@ namespace TBF.BenchControl.DataEntry.WMStates
resultSaved = false;
switch (currentOp)
{
- case CurrentOp.ShowFormAtCycleBeginning:
+ case CurrentOp.EnterWMSNsAndStates:
Program.MainWnd.Invoke(new EntryFormDlgt(OpenBeginningDlg), this);
break;
- case CurrentOp.ShowFormAtCycleEnd:
+ case CurrentOp.EnterWMStates:
Program.MainWnd.Invoke(new EntryFormDlgt(OpenEndDlg), this);
break;
}
@@ -106,30 +137,30 @@ namespace TBF.BenchControl.DataEntry.WMStates
{
WMSNsAndStatesForm dlg = (modelessDlg as WMSNsAndStatesForm);
- //if (dlg.WaterMetersCount > 0 && waterMeters[0] != null) waterMeters[0].EndState = dlg.WMStateText[0];
- //if (dlg.WaterMetersCount > 1 && waterMeters[1] != null) waterMeters[1].EndState = dlg.WMStateText[1];
- //if (dlg.WaterMetersCount > 2 && waterMeters[2] != null) waterMeters[2].EndState = dlg.WMStateText[2];
- //if (dlg.WaterMetersCount > 3 && waterMeters[3] != null) waterMeters[3].EndState = dlg.WMStateText[3];
- //if (dlg.WaterMetersCount > 4 && waterMeters[4] != null) waterMeters[4].EndState = dlg.WMStateText[4];
- //if (dlg.WaterMetersCount > 5 && waterMeters[5] != null) waterMeters[5].EndState = dlg.WMStateText[5];
+ if (dlg.WaterMetersCount > 0) wmState[0] = dlg.WMState[0];
+ if (dlg.WaterMetersCount > 1) wmState[1] = dlg.WMState[1];
+ if (dlg.WaterMetersCount > 2) wmState[2] = dlg.WMState[2];
+ if (dlg.WaterMetersCount > 3) wmState[3] = dlg.WMState[3];
+ if (dlg.WaterMetersCount > 4) wmState[4] = dlg.WMState[4];
+ if (dlg.WaterMetersCount > 5) wmState[5] = dlg.WMState[5];
- if (dlg.WaterMetersCount > 0 && waterMeters[0] != null) waterMeters[0].SerialNr = dlg.SNText[0];
- if (dlg.WaterMetersCount > 1 && waterMeters[1] != null) waterMeters[1].SerialNr = dlg.SNText[1];
- if (dlg.WaterMetersCount > 2 && waterMeters[2] != null) waterMeters[2].SerialNr = dlg.SNText[2];
- if (dlg.WaterMetersCount > 3 && waterMeters[3] != null) waterMeters[3].SerialNr = dlg.SNText[3];
- if (dlg.WaterMetersCount > 4 && waterMeters[4] != null) waterMeters[4].SerialNr = dlg.SNText[4];
- if (dlg.WaterMetersCount > 5 && waterMeters[5] != null) waterMeters[5].SerialNr = dlg.SNText[5];
+ if (dlg.WaterMetersCount > 0) serialNr[0] = dlg.SNText[0];
+ if (dlg.WaterMetersCount > 1) serialNr[1] = dlg.SNText[1];
+ if (dlg.WaterMetersCount > 2) serialNr[2] = dlg.SNText[2];
+ if (dlg.WaterMetersCount > 3) serialNr[3] = dlg.SNText[3];
+ if (dlg.WaterMetersCount > 4) serialNr[4] = dlg.SNText[4];
+ if (dlg.WaterMetersCount > 5) serialNr[5] = dlg.SNText[5];
}
else if (modelessDlg is WMStatesForm)
{
WMStatesForm dlg = (modelessDlg as WMStatesForm);
- if (dlg.WaterMetersCount > 0 && waterMeters[0] != null) waterMeters[0].EndState = dlg.WMStateText[0];
- if (dlg.WaterMetersCount > 1 && waterMeters[1] != null) waterMeters[1].EndState = dlg.WMStateText[1];
- if (dlg.WaterMetersCount > 2 && waterMeters[2] != null) waterMeters[2].EndState = dlg.WMStateText[2];
- if (dlg.WaterMetersCount > 3 && waterMeters[3] != null) waterMeters[3].EndState = dlg.WMStateText[3];
- if (dlg.WaterMetersCount > 4 && waterMeters[4] != null) waterMeters[4].EndState = dlg.WMStateText[4];
- if (dlg.WaterMetersCount > 5 && waterMeters[5] != null) waterMeters[5].EndState = dlg.WMStateText[5];
+ if (dlg.WaterMetersCount > 0) wmState[0] = dlg.WMState[0];
+ if (dlg.WaterMetersCount > 1) wmState[1] = dlg.WMState[1];
+ if (dlg.WaterMetersCount > 2) wmState[2] = dlg.WMState[2];
+ if (dlg.WaterMetersCount > 3) wmState[3] = dlg.WMState[3];
+ if (dlg.WaterMetersCount > 4) wmState[4] = dlg.WMState[4];
+ if (dlg.WaterMetersCount > 5) wmState[5] = dlg.WMState[5];
}
resultSaved = true;
}
@@ -143,25 +174,5 @@ namespace TBF.BenchControl.DataEntry.WMStates
modelessDlg = null;
currentOp = CurrentOp.None;
}
-
- ///
- /// Updates test results with the information collected in watermeters.
- ///
- /// Watermetes with information entered in the forms
- /// Test results to be updated with the information
- public void UpdateTestResults(IList waterMeters, IList results)
- {
- foreach (var test in results)
- {
- if (test.MetersKind != Entities.MetersKind.Single) continue;
-
- int count = Math.Max(waterMeters.Count, test.Meters.Count);
- for (int i = 0; i < count; i++)
- {
- test.Meters[i].SerialNr = waterMeters[i].SerialNr;
- test.Meters[i].EndState = waterMeters[i].EndState;
- }
- }
- }
}
}
diff --git a/TestBenchFramework/BenchControl/DataEntry/WMStates/WMSNsAndStatesForm.cs b/TestBenchFramework/BenchControl/DataEntry/WMStates/WMSNsAndStatesForm.cs
index ad1039296..d5567b789 100644
--- a/TestBenchFramework/BenchControl/DataEntry/WMStates/WMSNsAndStatesForm.cs
+++ b/TestBenchFramework/BenchControl/DataEntry/WMStates/WMSNsAndStatesForm.cs
@@ -13,7 +13,7 @@ namespace TBF.BenchControl.DataEntry.WMStates
public string[] SNText;
// To be retrieved after the form closes
- public string[] WMStateText;
+ public float[] WMState;
/// Set to 'true' when the form closes
public bool Completed { get { return completed; } }
@@ -28,7 +28,7 @@ namespace TBF.BenchControl.DataEntry.WMStates
this.WaterMetersCount = waterMetersCount;
InitializeComponent();
SNText = new string[WaterMetersCount];
- WMStateText = new string[WaterMetersCount];
+ WMState = new float[WaterMetersCount];
completed = false;
//Height = 55 + WaterMetersCount * 105;
@@ -36,7 +36,7 @@ namespace TBF.BenchControl.DataEntry.WMStates
/// Parameterless constructor for 3 watermeters
public WMSNsAndStatesForm()
- : this(3)
+ : this(Program.WMsCount)
{
}
@@ -78,19 +78,26 @@ namespace TBF.BenchControl.DataEntry.WMStates
private void okButton_Click(object sender, EventArgs e)
{
- if (WaterMetersCount >= 1) SNText[0] = snTextBox1.Text;
- if (WaterMetersCount >= 2) SNText[1] = snTextBox2.Text;
- if (WaterMetersCount >= 3) SNText[2] = snTextBox3.Text;
- if (WaterMetersCount >= 4) SNText[3] = snTextBox4.Text;
- if (WaterMetersCount >= 5) SNText[4] = snTextBox5.Text;
- if (WaterMetersCount >= 6) SNText[5] = snTextBox6.Text;
+ try
+ {
+ if (WaterMetersCount >= 1) SNText[0] = snTextBox1.Text;
+ if (WaterMetersCount >= 2) SNText[1] = snTextBox2.Text;
+ if (WaterMetersCount >= 3) SNText[2] = snTextBox3.Text;
+ if (WaterMetersCount >= 4) SNText[3] = snTextBox4.Text;
+ if (WaterMetersCount >= 5) SNText[4] = snTextBox5.Text;
+ if (WaterMetersCount >= 6) SNText[5] = snTextBox6.Text;
- if (WaterMetersCount >= 1) WMStateText[0] = wmStateTextBox1.Text;
- if (WaterMetersCount >= 2) WMStateText[1] = wmStateTextBox3.Text;
- if (WaterMetersCount >= 3) WMStateText[2] = wmStateTextBox4.Text;
- if (WaterMetersCount >= 4) WMStateText[3] = wmStateTextBox5.Text;
- if (WaterMetersCount >= 5) WMStateText[4] = wmStateTextBox6.Text;
- if (WaterMetersCount >= 6) WMStateText[5] = wmStateTextBox6.Text;
+ if (WaterMetersCount >= 1) WMState[0] = Utils.ParseUFloat(wmStateTextBox1.Text);
+ if (WaterMetersCount >= 2) WMState[1] = Utils.ParseUFloat(wmStateTextBox3.Text);
+ if (WaterMetersCount >= 3) WMState[2] = Utils.ParseUFloat(wmStateTextBox4.Text);
+ if (WaterMetersCount >= 4) WMState[3] = Utils.ParseUFloat(wmStateTextBox5.Text);
+ if (WaterMetersCount >= 5) WMState[4] = Utils.ParseUFloat(wmStateTextBox6.Text);
+ if (WaterMetersCount >= 6) WMState[5] = Utils.ParseUFloat(wmStateTextBox6.Text);
+ }
+ catch
+ {
+ return;
+ }
completed = true;
Close();
diff --git a/TestBenchFramework/BenchControl/DataEntry/WMStates/WMStatesForm.cs b/TestBenchFramework/BenchControl/DataEntry/WMStates/WMStatesForm.cs
index bfd3b9e9e..4a18f8417 100644
--- a/TestBenchFramework/BenchControl/DataEntry/WMStates/WMStatesForm.cs
+++ b/TestBenchFramework/BenchControl/DataEntry/WMStates/WMStatesForm.cs
@@ -10,7 +10,7 @@ namespace TBF.BenchControl.DataEntry.WMStates
public readonly int WaterMetersCount;
// To be retrieved after the form closes
- public string[] WMStateText;
+ public float[] WMState;
// Set to 'true' when the form closes
public bool Completed { get { return completed; } }
@@ -24,13 +24,13 @@ namespace TBF.BenchControl.DataEntry.WMStates
{
this.WaterMetersCount = waterMetersCount;
InitializeComponent();
- WMStateText = new string[WaterMetersCount];
+ WMState = new float[WaterMetersCount];
completed = false;
}
/// Parameterless constructor for 3 watermeters
public WMStatesForm()
- : this(3)
+ : this(Program.WMsCount)
{
}
@@ -68,12 +68,19 @@ namespace TBF.BenchControl.DataEntry.WMStates
private void okButton_Click(object sender, EventArgs e)
{
- if (WaterMetersCount >= 1) WMStateText[0] = wmStateTextBox1.Text;
- if (WaterMetersCount >= 2) WMStateText[1] = wmStateTextBox3.Text;
- if (WaterMetersCount >= 3) WMStateText[2] = wmStateTextBox4.Text;
- if (WaterMetersCount >= 4) WMStateText[3] = wmStateTextBox5.Text;
- if (WaterMetersCount >= 5) WMStateText[4] = wmStateTextBox6.Text;
- if (WaterMetersCount >= 6) WMStateText[5] = wmStateTextBox6.Text;
+ try
+ {
+ if (WaterMetersCount >= 1) WMState[0] = Utils.ParseUFloat(wmStateTextBox1.Text);
+ if (WaterMetersCount >= 2) WMState[1] = Utils.ParseUFloat(wmStateTextBox3.Text);
+ if (WaterMetersCount >= 3) WMState[2] = Utils.ParseUFloat(wmStateTextBox4.Text);
+ if (WaterMetersCount >= 4) WMState[3] = Utils.ParseUFloat(wmStateTextBox5.Text);
+ if (WaterMetersCount >= 5) WMState[4] = Utils.ParseUFloat(wmStateTextBox6.Text);
+ if (WaterMetersCount >= 6) WMState[5] = Utils.ParseUFloat(wmStateTextBox6.Text);
+ }
+ catch
+ {
+ return;
+ }
completed = true;
Close();
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RRProcedureParams.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RRProcedureParams.cs
new file mode 100644
index 000000000..1e5638e7d
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RRProcedureParams.cs
@@ -0,0 +1,155 @@
+using System;
+using System.IO;
+using System.Text;
+using System.Xml.Serialization;
+using TBF.BenchControl.Generic;
+using TBF.Resources;
+
+namespace TBF.BenchControl.Elde.FixedStartRegisterReader
+{
+ public class RRProcedureParams : IParamsProvider, IProcedureParams
+ {
+ public float PulsesPerLtr; /// Target low limit of the flow increase or decrease
+
+ string[] paramNames = new string[]
+ {
+ Strings.PulsesPerLtr,
+ };
+ public string ParamName(int i) { return paramNames[i]; }
+
+ public string ToString(int i)
+ {
+ switch (i)
+ {
+ case 0: return PulsesPerLtr.ToString();
+ default: return string.Empty;
+ }
+ }
+
+ ///
+ /// Parameterless constructor - sets default values of parameters.
+ ///
+ public RRProcedureParams()
+ {
+ PulsesPerLtr = 1.0f;
+ }
+
+ /// Retrieves parameters from UI controls
+ public void UpdateParam(int i, string strValue)
+ {
+ switch (i)
+ {
+ case 0: PulsesPerLtr = 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 dummy;
+ switch (i)
+ {
+ case 0:
+ if (Utils.TryParseUFloat(strValue, out dummy)) 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.ComponentProcedure ProcedureParamsEntity { get { return procedureParamsEntity; } }
+ Entities.ComponentProcedure procedureParamsEntity;
+
+ [XmlIgnore]
+ public string ComponentName { get { return componentName; } }
+ string componentName;
+
+ [XmlIgnore]
+ public Entities.Procedure Procedure { get { return procedure; } }
+ Entities.Procedure procedure;
+
+ public RRProcedureParams(Entities.ComponentProcedure procedureParamsEntity, string componentName, Entities.Procedure procedure)
+ : this()
+ {
+ this.procedureParamsEntity = procedureParamsEntity;
+ this.componentName = componentName;
+ this.procedure = procedure;
+ }
+
+ public TBF.Entities.ComponentProcedure ToDbEntity(IComponent component, Entities.Procedure procedure)
+ {
+ using (var writer = new StringWriter())
+ {
+ /// Serialize this class with parameters
+ (new XmlSerializer(GetType())).Serialize(writer, this);
+
+ /// Create and return the ComponentProcedure entity
+ TBF.Entities.ComponentProcedure entity = new TBF.Entities.ComponentProcedure();
+ entity.CmpntName = component.Cfg.Name;
+ entity.Parameters = writer.ToString();
+ entity.Procedure = procedure;
+ return entity;
+ }
+ }
+
+ public void UpdateDbEntity()
+ {
+ using (var writer = new StringWriter())
+ {
+ /// Serialize this class and update the entity
+ (new XmlSerializer(GetType())).Serialize(writer, this);
+ procedureParamsEntity.Parameters = writer.ToString();
+ procedureParamsEntity.CmpntName = componentName;
+ procedureParamsEntity.Procedure = procedure;
+
+ }
+ }
+
+ public static IParamsProvider GetProcedureParams(Entities.ComponentProcedure procedureParamsEntity)
+ {
+ if (procedureParamsEntity == null) return new RRProcedureParams();
+
+ RRProcedureParams procedureParams;
+ try
+ {
+ procedureParams = (RRProcedureParams)(new XmlSerializer(typeof(RRProcedureParams)))
+ .Deserialize(new StringReader(procedureParamsEntity.Parameters));
+ }
+ catch
+ {
+ procedureParams = new RRProcedureParams();
+ }
+ procedureParams.procedureParamsEntity = procedureParamsEntity;
+ procedureParams.componentName = procedureParamsEntity.CmpntName;
+ procedureParams.procedure = procedureParamsEntity.Procedure;
+ return procedureParams;
+ }
+
+ #endregion
+ }
+}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadReferenceForRegisterOp.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadReferenceForRegisterOp.cs
new file mode 100644
index 000000000..a9a7120cb
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadReferenceForRegisterOp.cs
@@ -0,0 +1,57 @@
+using System;
+using log4net;
+using TBF.Boxes;
+
+namespace TBF.BenchControl.Elde.FixedStartRegisterReader
+{
+ public class ReadReferenceForRegisterOp : IOperation
+ {
+ private static readonly ILog log = LogManager.GetLogger(typeof(ReadReferenceForRegisterOp));
+ public override string ToString() { return string.Format("ReadWaterMeterOp(.,{0},.)", eventDone); }
+
+ /// Set by the constructor
+ readonly ControlBoardDev controlBoard;
+ readonly Event eventDone;
+ IntBox pulses;
+
+ ///
+ /// Events: or Error
+ ///
+ /// Flow meter reference
+ /// Reference to the measured flow variable, value is in bar
+ /// Event to be returned by Run() when completed OK
+ public ReadReferenceForRegisterOp(RegisterReader register, ref IntBox pulses, Event eventDone)
+ {
+ if (register == null) throw new ArgumentNullException("register");
+ this.controlBoard = register.ControlBoard;
+ this.eventDone = eventDone;
+ this.pulses = pulses;
+
+ log.Debug(this.ToString());
+ }
+ public ReadReferenceForRegisterOp(RegisterReader register, ref IntBox pulses)
+ : this(register, ref pulses, Event.ReadReferenceDone)
+ {
+ }
+
+ /// Start this operation
+ public void Start()
+ {
+ }
+
+ /// Run this operation
+ ///
+ /// Event.FlowInDone or Event.FlowOutDone
+ ///
+ public Event Run()
+ {
+ pulses.Val = (int)controlBoard.EtPulses(0);
+ return eventDone;
+ }
+
+ /// Stop this operation
+ public void Stop()
+ {
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadRegisterOp.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadRegisterOp.cs
new file mode 100644
index 000000000..34ee090fd
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/ReadRegisterOp.cs
@@ -0,0 +1,72 @@
+using System;
+using log4net;
+using TBF.Boxes;
+
+namespace TBF.BenchControl.Elde.FixedStartRegisterReader
+{
+ public class ReadRegisterOp : IOperation
+ {
+ private static readonly ILog log = LogManager.GetLogger(typeof(ReadRegisterOp));
+ public override string ToString() { return string.Format("ReadRegisterOp({0})", reader.Name); }
+
+ /// Set by the constructor
+ readonly RegisterReader reader;
+ IntBox pulses;
+ IntBox refPulses;
+
+ ///
+ /// Events: Event.ReadRegisterDone or Event.Error
+ ///
+ /// Register reader reference
+ /// Reference to a field with the water meter pulses
+ public ReadRegisterOp(GenericDevices.IRegisterReader reader, ref IntBox pulses)
+ {
+ this.reader = reader as RegisterReader;
+ if (reader == null) throw new ArgumentNullException("reader is null or it is not Elde");
+
+ this.pulses = pulses;
+ log.Debug(this.ToString());
+ }
+
+ ///
+ /// Events: Event.ReadRegisterDone or Event.Error
+ ///
+ /// Register reader reference
+ /// Reference to a Box with the water meter pulses
+ /// Reference to a Box with the reference flow meter pulses synchronized with the water meter
+ public ReadRegisterOp(GenericDevices.IRegisterReader reader, ref IntBox pulses, ref IntBox refPulses)
+ : this(reader, ref pulses)
+ {
+ this.refPulses = refPulses;
+ log.Debug(this.ToString());
+ }
+
+ private void ReadPulses()
+ {
+ pulses.Val = (int)(reader.EndWMState - reader.BeginWMState); /// TODO: replace 0
+ if (refPulses != null)
+ {
+ refPulses.Val = (int)reader.ControlBoard.EtPulses(0);
+ }
+ }
+
+ /// Start this operation
+ public void Start()
+ {
+ ReadPulses();
+ }
+
+ /// Run this operation
+ /// eventDone
+ public Event Run()
+ {
+ ReadPulses();
+ return Event.ReadRegisterDone;
+ }
+
+ /// Stop this operation
+ public void Stop()
+ {
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReader.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReader.cs
new file mode 100644
index 000000000..38a925ec1
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReader.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using log4net;
+using TBF.Boxes;
+
+namespace TBF.BenchControl.Elde.FixedStartRegisterReader
+{
+ public class RegisterReader : ComponentBase, GenericDevices.IRegisterReader
+ {
+ ///
+ /// Info: StartMassMeasurement() and "Balance response = .., Mass = ..."
+ /// Warn: Start measurement when busy is true
+ ///
+ private static readonly ILog log = LogManager.GetLogger(typeof(RegisterReader));
+ public override string ToString()
+ {
+ return string.Format("Register({0})", Name);
+ }
+
+ public float BeginWMState;
+ public float EndWMState;
+
+ public static void ResetStaticProperties() { }
+
+ public float PulsesPerLtr
+ {
+ get
+ {
+ return (ProcedureParams is RRProcedureParams) ? (ProcedureParams as RRProcedureParams).PulsesPerLtr : 0;
+ }
+ }
+
+ public readonly ControlBoardDev ControlBoard;
+
+ public RegisterReader(RegisterReaderCfg cfg, IList components)
+ : base(cfg)
+ {
+ if (cfg == null) throw new ArgumentNullException("cfg");
+
+ ControlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
+ if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent");
+
+ /// Prepare data for SendCalibData() control board component method
+
+ log.Debug(this.ToString());
+ }
+
+ ///
+ /// Events: Event.ReadRegisterDone, Event.Error
+ ///
+ /// Reference to a variable for the water meter pulses
+ /// ReadWaterMeter instance reference casted to IOperaton
+ public IOperation ReadRegisterOp(ref IntBox pulses)
+ {
+ return new ReadRegisterOp(this, ref pulses);
+ }
+
+ ///
+ /// Events: Event.ReadRegisterDone, Event.Error
+ ///
+ /// Reference to a variable for the water meter pulses
+ /// Reference to a variable for the related reference flowmeter pulses
+ /// Reference to operation object instance
+ public IOperation ReadRegisterOp(ref IntBox pulses, ref IntBox refPulses)
+ {
+ return new ReadRegisterOp(this, ref pulses, ref refPulses);
+ }
+
+ ///
+ /// Events: ReadReferenceDone, Error
+ ///
+ /// Reference to a variable for the water meter pulses
+ /// Reference to operation object instance
+ public IOperation ReadReferenceForRegisterOp(ref IntBox pulses, ref IntBox refPulses)
+ {
+ return new ReadReferenceForRegisterOp(this, ref pulses);
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfg.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfg.cs
new file mode 100644
index 000000000..ab935d04b
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfg.cs
@@ -0,0 +1,53 @@
+using System;
+using System.IO;
+using System.Xml.Serialization;
+using TBF.BenchControl.Generic;
+
+namespace TBF.BenchControl.Elde.FixedStartRegisterReader
+{
+ public class RegisterReaderCfg : ComponentCfgBase, Generic.IChildComponentCfg
+ {
+ /// Parameterless constructor
+ public RegisterReaderCfg()
+ {
+ }
+ ///
+ /// Regulation valve configuration parameters
+ ///
+ /// Regulation valve name
+ /// Position on the control board 1 .. nrWaterMeters
+ public RegisterReaderCfg(IComponentFactory factory, string name, string parentName)
+ : base(factory, name, parentName)
+ {
+ }
+
+ public IComponentCfg Clone()
+ {
+ return new RegisterReaderCfg(Factory, Name, ParentName);
+ }
+
+ public string ToString(int i)
+ {
+ return "";
+ }
+
+ public TBF.Entities.Component CreateDbEntity()
+ {
+ using (var writer = new StringWriter())
+ {
+ (new XmlSerializer(GetType())).Serialize(writer, this);
+ return Entities.Component.CreateFromCfg(Name, Factory.ClassName, ParentName, ItemNr, DebugLevel, LogLevel, writer.ToString());
+ }
+ }
+
+ public static IComponentCfg CreateFromDbEntity(Entities.Component component, IComponentFactory factory)
+ {
+ using (var reader = new StringReader(component.Parameters))
+ {
+ RegisterReaderCfg config = (RegisterReaderCfg)(new XmlSerializer(typeof(RegisterReaderCfg))).Deserialize(reader);
+ config.InitCfgBaseFromEntity(component, factory);
+ return config;
+ }
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.Designer.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.Designer.cs
new file mode 100644
index 000000000..4a0e63a23
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.Designer.cs
@@ -0,0 +1,107 @@
+namespace TBF.BenchControl.Elde.FixedStartRegisterReader
+{
+ partial class RegisterReaderCfgCtrl
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.parentNameLabel = new System.Windows.Forms.Label();
+ this.nameTextBox = new System.Windows.Forms.TextBox();
+ this.nameLabel = new System.Windows.Forms.Label();
+ this.componentNameLabel = new System.Windows.Forms.Label();
+ this.parentNameComboBox = new System.Windows.Forms.ComboBox();
+ this.SuspendLayout();
+ //
+ // parentNameLabel
+ //
+ this.parentNameLabel.AutoSize = true;
+ this.parentNameLabel.Location = new System.Drawing.Point(26, 96);
+ this.parentNameLabel.Name = "parentNameLabel";
+ this.parentNameLabel.Size = new System.Drawing.Size(69, 13);
+ this.parentNameLabel.TabIndex = 3;
+ this.parentNameLabel.Text = "Parent Name";
+ //
+ // nameTextBox
+ //
+ this.nameTextBox.Enabled = false;
+ this.nameTextBox.Location = new System.Drawing.Point(136, 67);
+ this.nameTextBox.Name = "nameTextBox";
+ this.nameTextBox.Size = new System.Drawing.Size(130, 20);
+ this.nameTextBox.TabIndex = 2;
+ //
+ // nameLabel
+ //
+ this.nameLabel.AutoSize = true;
+ this.nameLabel.Location = new System.Drawing.Point(26, 70);
+ this.nameLabel.Name = "nameLabel";
+ this.nameLabel.Size = new System.Drawing.Size(35, 13);
+ this.nameLabel.TabIndex = 1;
+ this.nameLabel.Text = "Name";
+ //
+ // componentNameLabel
+ //
+ this.componentNameLabel.AutoSize = true;
+ this.componentNameLabel.Location = new System.Drawing.Point(133, 43);
+ this.componentNameLabel.Name = "componentNameLabel";
+ this.componentNameLabel.Size = new System.Drawing.Size(83, 13);
+ this.componentNameLabel.TabIndex = 0;
+ this.componentNameLabel.Text = "ComonentName";
+ //
+ // parentNameComboBox
+ //
+ this.parentNameComboBox.Enabled = false;
+ this.parentNameComboBox.FormattingEnabled = true;
+ this.parentNameComboBox.Location = new System.Drawing.Point(136, 93);
+ this.parentNameComboBox.Name = "parentNameComboBox";
+ this.parentNameComboBox.Size = new System.Drawing.Size(130, 21);
+ this.parentNameComboBox.TabIndex = 4;
+ //
+ // RegisterReaderCfgCtrl
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.parentNameComboBox);
+ this.Controls.Add(this.parentNameLabel);
+ this.Controls.Add(this.nameTextBox);
+ this.Controls.Add(this.nameLabel);
+ this.Controls.Add(this.componentNameLabel);
+ this.Name = "RegisterReaderCfgCtrl";
+ this.Size = new System.Drawing.Size(300, 200);
+ this.Load += new System.EventHandler(this.RegisterReaderCfgCtrl_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label parentNameLabel;
+ private System.Windows.Forms.TextBox nameTextBox;
+ private System.Windows.Forms.Label nameLabel;
+ private System.Windows.Forms.Label componentNameLabel;
+ private System.Windows.Forms.ComboBox parentNameComboBox;
+ }
+}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.cs
new file mode 100644
index 000000000..756a7f102
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Windows.Forms;
+using log4net;
+using TBF.BenchControl.Generic;
+
+namespace TBF.BenchControl.Elde.FixedStartRegisterReader
+{
+ public partial class RegisterReaderCfgCtrl : UserControl, IComponentCfgCtrl
+ {
+ static readonly ILog log = LogManager.GetLogger(typeof(RegisterReaderCfgCtrl));
+
+ ComponentParametersDlg parent;
+ RegisterReaderCfg config;
+ public IComponentCfg Config
+ {
+ get { return config as IComponentCfg; }
+ set
+ {
+ config = value as RegisterReaderCfg;
+ Redraw();
+ }
+ }
+
+ public RegisterReaderCfgCtrl()
+ {
+ InitializeComponent();
+ }
+
+ private void RegisterReaderCfgCtrl_Load(object sender, EventArgs e)
+ {
+ parent = ParentForm as ComponentParametersDlg;
+ if (parent == null) return;
+
+ if (parent.TbfComponents != null)
+ {
+ foreach (var cmpnt in parent.TbfComponents)
+ {
+ if (TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName) is Elde.ControlBoardFactory)
+ {
+ parentNameComboBox.Items.Add(cmpnt.Name);
+ }
+ }
+ }
+
+ Redraw();
+ }
+
+ void Redraw()
+ {
+ if (config == null) return; /// Control was not loaded, settings were not changed
+
+ componentNameLabel.Text = config.Factory.ClassName;
+ nameTextBox.Text = config.Name;
+ parentNameComboBox.Text = string.IsNullOrEmpty(config.ParentName) ? "---" : config.ParentName;
+ }
+
+ public void Unlock()
+ {
+ nameTextBox.Enabled = true;
+ parentNameComboBox.Enabled = true;
+ }
+
+ public CfgVerifyFlags VerifyCfg(ref string message)
+ {
+ CfgVerifyFlags flags = CfgVerifyFlags.None;
+
+ int dummy;
+ if (!parentNameComboBox.Items.Contains(parentNameComboBox.Text))
+ {
+ flags |= CfgVerifyFlags.Error;
+ message += Environment.NewLine + "Invalid 'Parent Name'";
+ }
+ return flags;
+ }
+
+ public void UpdateCfg()
+ {
+ if (config == null) return; /// Control was not loaded, settings were not changed
+
+ config.Name = nameTextBox.Text;
+ config.ParentName = parentNameComboBox.Text.Equals("---") ? string.Empty : parentNameComboBox.Text;
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.resx b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderCfgCtrl.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderFactory.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderFactory.cs
new file mode 100644
index 000000000..8815bb2ea
--- /dev/null
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderFactory.cs
@@ -0,0 +1,46 @@
+using System.Collections.Generic;
+using TBF.BenchControl.Generic;
+
+namespace TBF.BenchControl.Elde.FixedStartRegisterReader
+{
+ public class RegisterReaderFactory : IComponentFactory
+ {
+ public string ClassName { get { return "Fixed-Start-Register-Reader"; } }
+
+ /// Max. number of components of this class in the system
+ public int MaxCount { get { return Program.WMsCount; } }
+
+ public IComponentCfg DefaultConfig(IList components)
+ {
+ return new RegisterReaderCfg(this, "Dummy", "CB");
+ }
+
+ public IComponentCfgCtrl CreateCfgCtrl()
+ {
+ return new RegisterReaderCfgCtrl();
+ }
+
+ public IComponent ComponentFromCmpntCfg(IComponentCfg config, IList components)
+ {
+ return new RegisterReader((RegisterReaderCfg)config, components);
+ }
+
+ public IComponentCfg CmpntCfgFromCmpntEntity(Entities.Component component)
+ {
+ return RegisterReaderCfg.CreateFromDbEntity(component, this);
+ }
+
+ public bool HasProcedureParams { get { return true; } }
+ ///
+ public IParamsProvider GetProcedureParams(Entities.ComponentProcedure procedureParams)
+ {
+ return RRProcedureParams.GetProcedureParams(procedureParams);
+ }
+
+ public bool HasTestParams { get { return false; } }
+ ///
+ public IParamsProvider GetTestParams(Entities.ComponentTest testParams) { return null; }
+
+ public void ResetStaticProperties() { RegisterReader.ResetStaticProperties(); }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadReferenceForRegisterOp.cs b/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadReferenceForRegisterOp.cs
index 07404f0d2..2aa3c642c 100644
--- a/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadReferenceForRegisterOp.cs
+++ b/TestBenchFramework/BenchControl/Elde/RegisterReader/ReadReferenceForRegisterOp.cs
@@ -21,7 +21,7 @@ namespace TBF.BenchControl.Elde.RegisterReader
/// Flow meter reference
/// Reference to the measured flow variable, value is in bar
/// Event to be returned by Run() when completed OK
- public ReadReferenceForRegisterOp(Elde.RegisterReader.RegisterReader register, ref IntBox pulses, Event eventDone)
+ public ReadReferenceForRegisterOp(RegisterReader register, ref IntBox pulses, Event eventDone)
{
if (register == null) throw new ArgumentNullException("register");
this.controlBoard = register.ControlBoard;
@@ -31,7 +31,7 @@ namespace TBF.BenchControl.Elde.RegisterReader
log.Debug(this.ToString());
}
- public ReadReferenceForRegisterOp(Elde.RegisterReader.RegisterReader register, ref IntBox pulses)
+ public ReadReferenceForRegisterOp(RegisterReader register, ref IntBox pulses)
: this(register, ref pulses, Event.ReadReferenceDone)
{
}
diff --git a/TestBenchFramework/BenchControl/GenericDevices/IDataEntry.cs b/TestBenchFramework/BenchControl/GenericDevices/IDataEntry.cs
index 84d0cc74f..001e852d4 100644
--- a/TestBenchFramework/BenchControl/GenericDevices/IDataEntry.cs
+++ b/TestBenchFramework/BenchControl/GenericDevices/IDataEntry.cs
@@ -5,19 +5,45 @@ namespace TBF.BenchControl.GenericDevices
{
public interface IDataEntry : IComponent
{
+ ///
+ /// Water meter serial numbers set by forms
+ ///
+ string SerialNr(int wmNr);
+
+ ///
+ /// Water meter states set by forms
+ ///
+ float WMState(int wmNr);
+
+
///
/// Displays form at the beginning of the cycle (usually to enter S/N).
///
/// Watermetes to be updated by the operation
/// Operation to be used in the sequence
- IOperation ShowFormAtCycleBeginningOp(IList waterMeters);
+ IOperation ShowCycleBeginFormOp(IList waterMeters);
///
/// Displays form at the end of the cycle (usually to enter the end state).
///
/// Watermetes to be updated by the operation
/// Operation to be used in the sequence
- IOperation ShowFormAtCycleEndOp(IList waterMeters);
+ IOperation ShowCycleEndFormOp(IList waterMeters);
+
+ ///
+ /// Displays form at the beginning of the cycle (usually to enter S/N).
+ ///
+ /// Watermetes to be updated by the operation
+ /// Operation to be used in the sequence
+ IOperation ShowWMSNsAndStatesFormOp();
+
+ ///
+ /// Displays form at the beginning of the cycle (usually to enter S/N).
+ ///
+ /// Watermetes to be updated by the operation
+ /// Operation to be used in the sequence
+ IOperation ShowWMStatesFormOp();
+
///
/// Updates test results with the information collected in watermeters.
diff --git a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
index 0965d1e78..4d55ee0b8 100644
--- a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
+++ b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
@@ -143,7 +143,7 @@ namespace TBF.BenchControl.Sequences
{
Bridge.OnActivity(this, "Enter the water meter data");
State.Create("MainSeq : Enter begin data")
- .AddPermanentOperation(dataEntryCmpnt.ShowFormAtCycleBeginningOp(WaterMeters))
+ .AddPermanentOperation(dataEntryCmpnt.ShowCycleBeginFormOp(WaterMeters))
.AddOperation(checkUiOp)
.EnterState();
e = StateMachine.WaitRunDevsRunOps();
@@ -297,7 +297,7 @@ namespace TBF.BenchControl.Sequences
/// Open the modeless form for the end of the cycle
State.Create("MainSeq : Enter end data")
- .AddOperation((dataEntryCmpnt as GenericDevices.IDataEntry).ShowFormAtCycleEndOp(WaterMeters))
+ .AddOperation((dataEntryCmpnt as GenericDevices.IDataEntry).ShowCycleEndFormOp(WaterMeters))
.AddOperation(checkUiOp)
.EnterState();
do
diff --git a/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs b/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs
index 777049ae3..c99cb2138 100644
--- a/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs
+++ b/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs
@@ -611,7 +611,7 @@ namespace TBF.BenchControl.Sequences
data.TestResult = tstRslt;
//float ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse]
- float refPulsesPerLtr = 1.0f / outPath.FlowMeter.LtrPerPulse; /// [pulse/ltr]
+ float refPulsesPerLtr = 1.0f / outPath.FlowMeter.LtrPerPulseCorrected(refFlow.Val); /// [pulse/ltr]
data.RefPulses = cBrd.EtPulses(0);
diff --git a/TestBenchFramework/BenchControl/TbfComponents.cs b/TestBenchFramework/BenchControl/TbfComponents.cs
index 51c8dd58a..f90457eb7 100644
--- a/TestBenchFramework/BenchControl/TbfComponents.cs
+++ b/TestBenchFramework/BenchControl/TbfComponents.cs
@@ -19,7 +19,8 @@ namespace TBF.BenchControl
Factories.Add(new DataEntry.WMStates.EntryFormFactory());
Factories.Add(new Elde.ControlBoardFactory());
Factories.Add(new Elde.Diverter.DiverterFactory());
- Factories.Add(new Elde.FlowMeter.FlowMeterFactory());
+ Factories.Add(new Elde.FixedStartRegisterReader.RegisterReaderFactory());
+ Factories.Add(new Elde.FlowMeter.FlowMeterFactory());
Factories.Add(new Elde.FlowMeterTwins.FlowMeterFactory());
Factories.Add(new Elde.PressureMeter.PressureMeterFactory());
Factories.Add(new Elde.Pump.PumpFactory());
diff --git a/TestBenchFramework/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs
index 88bb831fd..dcc39da1a 100644
--- a/TestBenchFramework/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs
@@ -42,6 +42,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
int totalPulses = (int)(test.Volume / ltrPerRefPulse);
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
+
+ float[] wmBeginStates = new float[Program.WMsCount];
+ float[] wmEndStates = new float[Program.WMsCount];
int repetitionNr = 1; /// First test: repetitionNr=1
@@ -171,8 +174,36 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
///
- /// Enter the watermeter states here
+ /// Enter watermeter begin states here
///
+ GenericDevices.IDataEntry dataEntryCmpnt =
+ TbfComponents.FindComponent(StateMachine.Procedure.DataEntry) as GenericDevices.IDataEntry;
+ if (dataEntryCmpnt != null)
+ {
+ IOperation showFormOp = dataEntryCmpnt.ShowWMStatesFormOp();
+ if (showFormOp != null)
+ {
+ Bridge.OnActivity(this, "Enter the water meter data");
+ State.Create("FixedStartMassCollection : Enter begin-state")
+ .AddOperation(showFormOp)
+ .AddOperation(checkUiOp)
+ .EnterState();
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ if (e.Contains(Event.UiCmdStop)) { retVal = Event.Error; goto stopTest; }
+ }
+ while (!e.Contains(Event.ModelessFormClosed));
+
+ for (int i = 0; i < Program.WMsCount; i++)
+ {
+ BenchControl.Elde.FixedStartRegisterReader.RegisterReader registerReader =
+ sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
+ registerReader.BeginWMState = dataEntryCmpnt.WMState(i);
+ registerReader.EndWMState = dataEntryCmpnt.WMState(i);
+ }
+ }
+ }
//------------------------------------------------
@@ -337,8 +368,34 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
///
- /// Enter the watermeter states here
+ /// Enter watermeter end states here
///
+ if (dataEntryCmpnt != null)
+ {
+ IOperation showFormOp = dataEntryCmpnt.ShowWMStatesFormOp();
+ if (showFormOp != null)
+ {
+ Bridge.OnActivity(this, "Enter the water meter data");
+ State.Create("FixedStartMassCollection : Enter end-state")
+ .AddOperation(showFormOp)
+ .AddOperation(checkUiOp)
+ .EnterState();
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+ if (e.Contains(Event.UiCmdStop)) { retVal = Event.Error; goto stopTest; }
+ }
+ while (!e.Contains(Event.ModelessFormClosed));
+
+
+ for (int i = 0; i < Program.WMsCount; i++)
+ {
+ BenchControl.Elde.FixedStartRegisterReader.RegisterReader registerReader =
+ sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
+ registerReader.EndWMState = dataEntryCmpnt.WMState(i);
+ }
+ }
+ }
//------------------------------------------------
diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
index f09bb5fae..7a6c2b5b7 100644
--- a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
@@ -249,10 +249,9 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
- /// TODO: tuto pokracovat
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
- tstRslt.ConstMaster = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume);
- tstRslt.VolumeCTV = tstRslt.ConstMaster * tstRslt.PulsesMaster; /// [l] 1000.0f is because density is in [kg/m3]
+ tstRslt.ConstMaster = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume / 1000.0f); /// Convert the flow to [m3/h]
+ tstRslt.VolumeCTV = tstRslt.ConstMaster * tstRslt.PulsesMaster; /// [l] 1000.0f is because density is in [kg/m3]
/// Corrected master pulses per liter
if (tstRslt.VolumeCTV <= float.Epsilon)
{
diff --git a/TestBenchFramework/Forms/ResultsConfig.cs b/TestBenchFramework/Forms/ResultsConfig.cs
index 03b540c95..35adef60d 100644
--- a/TestBenchFramework/Forms/ResultsConfig.cs
+++ b/TestBenchFramework/Forms/ResultsConfig.cs
@@ -31,8 +31,8 @@ namespace TBF.Forms
/// Results items to be selected in the configuration
public enum ResultsItem
{
- Hovno,
- Makove,
+ Abc,
+ Def,
Count
}
//
diff --git a/TestBenchFramework/Screens/ResultsTabPageCtrl.cs b/TestBenchFramework/Screens/ResultsTabPageCtrl.cs
index 3acc75a5c..b3ab59fe6 100644
--- a/TestBenchFramework/Screens/ResultsTabPageCtrl.cs
+++ b/TestBenchFramework/Screens/ResultsTabPageCtrl.cs
@@ -170,7 +170,7 @@ namespace TBF.Screens
{
foreach (var testRslt in testResults)
{
- if (testRslt.TestId.Equals(test.Id) && (testRslt.RepetitionNr == rpt) && !testRslt.DoNotPublish)
+ if ((testRslt.TestId == test.Id) && (testRslt.RepetitionNr == rpt) && !testRslt.DoNotPublish)
{
rslts.Add(testRslt);
added = true;
@@ -407,7 +407,8 @@ namespace TBF.Screens
try
{
Entities.TestResult tr = testResults
- .First(x => x.Name.Equals(args.TestResult.Name));
+ .First(x => (x.TestId == args.TestResult.TestId) &&
+ (x.RepetitionNr == args.TestResult.RepetitionNr));
testResults.Remove(tr);
}
catch { };
diff --git a/TestBenchFramework/TBF.csproj b/TestBenchFramework/TBF.csproj
index bc3f1e4d3..2b52b6e8a 100644
--- a/TestBenchFramework/TBF.csproj
+++ b/TestBenchFramework/TBF.csproj
@@ -224,6 +224,18 @@
EntryFormCfgCtrl.cs
+
+
+
+
+
+ UserControl
+
+
+ RegisterReaderCfgCtrl.cs
+
+
+
@@ -955,6 +967,9 @@
DiverterCfgCtrl.cs
+
+ RegisterReaderCfgCtrl.cs
+
FlowMeterCfgCtrl.cs