WaitTankContainsMoreThenOp, related Various.TankWithLevelMsrmnt and TankDraining changes, ver. 2.18.1064

This commit is contained in:
Milan Hanajik
2018-11-14 13:07:37 +01:00
parent 7d1d95305f
commit 3ffdf4e2cc
16 changed files with 510 additions and 266 deletions
@@ -124,11 +124,16 @@ namespace TBF.BenchControl.MettlerToledo.Multi
log.FatalFormat("Successfully initialized device {0}", ToString());
}
public bool IsEmpty()
public override bool IsEmpty()
{
return (Mass <= balanceCfg.Empty);
}
public override bool ContainsMoreThen(float thld)
{
return (Mass >= thld);
}
/// <summary>
/// Get a stable mass measurement
/// </summary>
@@ -128,6 +128,11 @@ namespace TBF.BenchControl.MettlerToledo.Standard
return DrainValve.State ? (mass <= balanceCfg.Empty) : (mass <= balanceCfg.EmptyUp);
}
public override bool ContainsMoreThen(float thld)
{
return (mass >= thld);
}
public void ZeroWhenStable()
{
if (balanceCfg.DebugLevel == DebugMode.Simulate) return;
+82 -28
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2017 Sensus Metering Systems
/// Copyright (c) 2017-2018 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
@@ -29,13 +29,18 @@ namespace TBF.BenchControl.MettlerToledo
readonly GenericDevices.ITankDrainingCfg tankDrainingCfg;
private IValve drainValve;
bool hasDrainValve { get { return !string.IsNullOrEmpty(tankDrainingCfg.DrainValve); } } /// Available in UI (unlike 'drainValve')
IValve drainValve;
public GenericDevices.IValve DrainValve { get { return drainValve; } }
private IOperation openTheDrainValveOp;
private IOperation closeTheDrainValveOp;
private IOperation waitTankEmptyOp;
IOperation openTheDrainValveOp;
IOperation closeTheDrainValveOp;
IOperation waitTankIsEmptyOp;
IOperation waitTankContainsMoreThenThld1Op;
IOperation waitTankContainsMoreThenThld2Op;
IOperation waitTankContainsMoreThenThld3Op;
IOperation waitTankContainsMoreThenThld4Op;
DrainState drainState;
@@ -45,8 +50,12 @@ namespace TBF.BenchControl.MettlerToledo
{
openTheDrainValveOp = null;
closeTheDrainValveOp = null;
waitTankEmptyOp = null;
}
waitTankIsEmptyOp = null;
waitTankContainsMoreThenThld1Op = null;
waitTankContainsMoreThenThld2Op = null;
waitTankContainsMoreThenThld3Op = null;
waitTankContainsMoreThenThld4Op = null;
}
public TankDraining(Generic.IComponentCfg cfg)
: base(cfg)
@@ -56,8 +65,12 @@ namespace TBF.BenchControl.MettlerToledo
openTheDrainValveOp = null;
closeTheDrainValveOp = null;
waitTankEmptyOp = null;
}
waitTankIsEmptyOp = null;
waitTankContainsMoreThenThld1Op = null;
waitTankContainsMoreThenThld2Op = null;
waitTankContainsMoreThenThld3Op = null;
waitTankContainsMoreThenThld4Op = null;
}
protected void Initalize()
{
@@ -65,8 +78,17 @@ namespace TBF.BenchControl.MettlerToledo
openTheDrainValveOp = new Elde.SetValvesOp(StateMachine.ControlBoard, drainValve, null);
closeTheDrainValveOp = new Elde.SetValvesOp(StateMachine.ControlBoard, null, drainValve);
waitTankEmptyOp = new WaitTankEmptyOp(this);
}
waitTankIsEmptyOp = new WaitTankEmptyOp(this);
Various.TankWithLevelMsrmnt.TankCfg tankCfg = tankDrainingCfg as Various.TankWithLevelMsrmnt.TankCfg;
if (tankCfg != null)
{
waitTankContainsMoreThenThld1Op = new WaitTankContainsMoreThenOp(this, tankCfg.ThldLevel1);
waitTankContainsMoreThenThld2Op = new WaitTankContainsMoreThenOp(this, tankCfg.ThldLevel2);
waitTankContainsMoreThenThld3Op = new WaitTankContainsMoreThenOp(this, tankCfg.ThldLevel3);
waitTankContainsMoreThenThld4Op = new WaitTankContainsMoreThenOp(this, tankCfg.ThldLevel4);
}
}
protected void RunBefore()
{
@@ -112,33 +134,65 @@ namespace TBF.BenchControl.MettlerToledo
public virtual string GetName() { return string.Empty; }
public virtual bool IsEmpty() { return false; }
public virtual bool ContainsMoreThen(float thld) { return thld == 0; }
public int ConditionsCount { get { return 3; } }
public int ConditionsCount
{
get { return hasDrainValve ? 3 : ((tankDrainingCfg is Various.TankWithLevelMsrmnt.TankCfg) ? 4 : 0); }
}
/// Strings are added to the combo-box for transition sequence condition selection
public string ConditionName(int i)
{
switch (i)
{
case 0: return string.Format(Strings._0_open_the_drain_valve, Name);
case 1: return string.Format(Strings._0_close_the_drain_valve, Name);
case 2: return string.Format(Strings._0_wait_until_the_tank_is_empty, Name);
default: return string.Empty;
}
if (hasDrainValve)
{
switch (i)
{
case 0: return string.Format(Strings._0_open_the_drain_valve, Name);
case 1: return string.Format(Strings._0_close_the_drain_valve, Name);
case 2: return string.Format(Strings._0_wait_until_the_tank_is_empty, Name);
}
}
else if (tankDrainingCfg is Various.TankWithLevelMsrmnt.TankCfg)
{
var tankCfg = tankDrainingCfg as Various.TankWithLevelMsrmnt.TankCfg;
switch (i)
{
case 0: return string.Format(Strings._0_wait_until_tank_contains_more_then_1_l, Name, tankCfg.ThldLevel1);
case 1: return string.Format(Strings._0_wait_until_tank_contains_more_then_1_l, Name, tankCfg.ThldLevel2);
case 2: return string.Format(Strings._0_wait_until_tank_contains_more_then_1_l, Name, tankCfg.ThldLevel3);
case 3: return string.Format(Strings._0_wait_until_tank_contains_more_then_1_l, Name, tankCfg.ThldLevel4);
}
}
return string.Empty; // Default
}
/// Operation to be executed as a part of a transition sequence
public IOperation ConditionOp(int i)
{
switch (i)
{
case 0: return openTheDrainValveOp;
case 1: return closeTheDrainValveOp;
case 2: return waitTankEmptyOp;
default: return null;
}
if (hasDrainValve)
{
switch (i)
{
case 0: return openTheDrainValveOp;
case 1: return closeTheDrainValveOp;
case 2: return waitTankIsEmptyOp;
}
}
else if (tankDrainingCfg is Various.TankWithLevelMsrmnt.TankCfg)
{
switch (i)
{
case 0: return waitTankContainsMoreThenThld1Op;
case 1: return waitTankContainsMoreThenThld2Op;
case 2: return waitTankContainsMoreThenThld3Op;
case 3: return waitTankContainsMoreThenThld4Op;
}
}
return null; /// Default
}
}
}
@@ -0,0 +1,51 @@
///
/// Copyright (c) 2018 Sensus Metering Systems
///
using log4net;
namespace TBF.BenchControl.MettlerToledo
{
public class WaitTankContainsMoreThenOp : IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(WaitTankContainsMoreThenOp));
public override string ToString() { return string.Format("WaitTankFullOp()"); }
readonly GenericDevices.ITankDraining tankDraining;
float threshodLevel;
bool conditionMet;
/// <summary>
/// Events: ConditionMet, ConditionNotMet
/// </summary>
/// <param name="tankDraining">Tank draining (Balance device) instance</param>
public WaitTankContainsMoreThenOp(GenericDevices.ITankDraining tankDraining, float thresholdLevel)
{
this.tankDraining = tankDraining;
this.threshodLevel = thresholdLevel;
log.Debug(this.ToString());
}
/// <summary>Start this operation</summary>
public void Start()
{
conditionMet = tankDraining.ContainsMoreThen(threshodLevel);
}
/// <summary>Run this operation</summary>
/// <returns>
/// Event.ConditionMet . . . tank is empty
/// Event.ConditionNotMet . tank is not empty
/// </returns>
public Event Run()
{
conditionMet = conditionMet || tankDraining.ContainsMoreThen(threshodLevel);
return conditionMet ? Event.ConditionMet : Event.ConditionNotMet;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
}
}
}