WaitTankContainsMoreThenOp, related Various.TankWithLevelMsrmnt and TankDraining changes, ver. 2.18.1064
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user