Modbus.UltrasoundLevelMeter : (1) telegrams with distance==0 are ignored, (2) IVolumeMeter interface removed, ver. 2.18.1078

This commit is contained in:
Milan Hanajik 2018-11-28 11:37:53 +01:00
parent 7576a68651
commit 439f20bc95
6 changed files with 22 additions and 141 deletions

View File

@ -663,8 +663,7 @@ namespace DeviceTest
else if (tbfComponent1forOp is TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter)
{
operation1 = (tbfComponent1forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadLevelOp(ref dblBox1);
operation2 = (tbfComponent1forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadVolumeOp(ref dblBox2);
operation3 = (tbfComponent1forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadTempOp(ref dblBox3);
operation2 = (tbfComponent1forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadTempOp(ref dblBox3);
}
else if (tbfComponent1forOp is TBF.BenchControl.Modbus.TankSelector.TankSelector)
{
@ -696,8 +695,7 @@ namespace DeviceTest
else if (tbfComponent2forOp is TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter)
{
operation21 = (tbfComponent2forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadLevelOp(ref dblBox1);
operation22 = (tbfComponent2forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadVolumeOp(ref dblBox2);
operation23 = (tbfComponent2forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadTempOp(ref dblBox3);
operation22 = (tbfComponent2forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadTempOp(ref dblBox3);
}
else if (tbfComponent2forOp is TBF.BenchControl.Modbus.TankSelector.TankSelector)
{
@ -729,8 +727,7 @@ namespace DeviceTest
else if (tbfComponent3forOp is TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter)
{
operation31 = (tbfComponent3forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadLevelOp(ref dblBox1);
operation32 = (tbfComponent3forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadVolumeOp(ref dblBox2);
operation33 = (tbfComponent3forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadTempOp(ref dblBox3);
operation32 = (tbfComponent3forOp as TBF.BenchControl.Modbus.UltrasoundLevelMeter.LevelMeter).ReadTempOp(ref dblBox3);
}
else if (tbfComponent3forOp is TBF.BenchControl.Modbus.TankSelector.TankSelector)
{

View File

@ -11,7 +11,7 @@ using System.Diagnostics;
namespace TBF.BenchControl.Modbus.UltrasoundLevelMeter
{
public class LevelMeter : ComponentBase, GenericDevices.ILevelMeter, GenericDevices.IVolumeMeter, GenericDevices.ITempMeter, IDevice
public class LevelMeter : ComponentBase, GenericDevices.ILevelMeter, GenericDevices.ITempMeter, IDevice
{
private static readonly ILog log = LogManager.GetLogger(typeof(LevelMeter));
public override string ToString() { return string.Format("LevelMeter({0})", Cfg.ToString(1)); }
@ -28,7 +28,6 @@ namespace TBF.BenchControl.Modbus.UltrasoundLevelMeter
double distance; /// [mm]
double level; /// [mm]
double percentage; /// [%]
double volume; /// [l]
double temperature; /// [°C]
ushort state;
@ -64,7 +63,6 @@ namespace TBF.BenchControl.Modbus.UltrasoundLevelMeter
distance = 200.0;
level = 0;
percentage = 0;
volume = 0;
temperature = 20.0;
state = 0;
@ -80,15 +78,11 @@ namespace TBF.BenchControl.Modbus.UltrasoundLevelMeter
public double ReadLevel() { return level; } /// Returns water level in mm
public double ReadVolume() { return volume; } /// Returns volume in l
public double ReadTemperature() { return temperature; } /// Returns temperature in °C
public IOperation ReadLevelOp(ref DoubleBox level) { return new ReadLevelOp(this, ref level); }
public IOperation ReadStableLevelOp(ref DoubleBox level, double sdev) { return new ReadStableLevelOp(this, ref level, sdev); }
public IOperation ManualReadLevelOp(ref DoubleBox level) { return null; }
public IOperation ReadVolumeOp(ref DoubleBox volume) { return new ReadVolumeOp(this, ref volume); }
public IOperation ReadStableVolumeOp(ref DoubleBox volume, double sdev) { return new ReadStableVolumeOp(this, ref volume, sdev); }
public IOperation ManualReadVolumeOp(ref DoubleBox volume) { return null; }
public IOperation ReadTempOp(ref DoubleBox temperature) { return new ReadTempOp(this, ref temperature); }
public IOperation ReadTempOp(ref DoubleBox temperature, Event eventDone) { return new ReadTempOp(this, ref temperature, eventDone); }
@ -109,15 +103,23 @@ namespace TBF.BenchControl.Modbus.UltrasoundLevelMeter
if (telegram.Length == 15 && telegram[1] == 3 && telegram[2] == 10)
{
distance = (double)(256 * telegram[3] + telegram[4]);
level = (double)(256 * telegram[5] + telegram[6]);
percentage = (double)(256 * telegram[7] + telegram[8]);
temperature = (double)256 * telegram[9] + telegram[10];
state = (ushort)(256 * telegram[11] + telegram[12]);
volume = 0; /// TODO
double _distance = (double)(256 * telegram[3] + telegram[4]); /// [mm]
double _level = (double)(256 * telegram[5] + telegram[6]); /// [mm]
double _percentage = (double)(256 * telegram[7] + telegram[8]); /// [%]
double _temperature = (double)(256 * telegram[9] + telegram[10]); /// [°C]
ushort _state = (ushort)(256 * telegram[11] + telegram[12]);
string line = string.Format("dist={0} mm level={1} mm, %={2} %, temp={3} °C, state={4}",
_distance, _level, _percentage, _temperature, _state);
if (_distance > 0)
{
distance = _distance;
level = _level;
percentage = _percentage;
temperature = _temperature;
state = _state;
}
string line = string.Format("dist={0} mm level={1} mm, %={2} %, temp={3} °C, volume={4} l, state={5}",
distance, level, percentage, temperature, volume, state);
log.Debug(line);
Debug.WriteLine(line);
}

View File

@ -1,58 +0,0 @@
///
/// Copyright (c) 2018 Sensus Slovensko a.s.
///
using System;
using log4net;
using TBF.Boxes;
namespace TBF.BenchControl.Modbus.UltrasoundLevelMeter
{
public class ReadStableVolumeOp : IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(ReadVolumeOp));
public override string ToString() { return string.Format("ReadVolumeOp(.,.)"); }
/// Set by the constructor
readonly LevelMeter levelMeter;
readonly DoubleBox volume;
readonly double sdev;
/// <summary>
/// Events: VolumeDone or Error
/// </summary>
/// <param name="levelMeter">Water volume meter reference</param>
/// <param name="volume">Reference to the measured volume variable, value is in l</param>
/// <param name="eventDone">Event to be returned by Run() when completed OK</param>
public ReadStableVolumeOp(LevelMeter levelMeter, ref DoubleBox volume, double sdev)
{
if (levelMeter == null) throw new ArgumentNullException("levelMeter");
this.levelMeter = levelMeter;
this.volume = volume;
this.sdev = sdev;
log.Debug(this.ToString());
}
/// <summary>Start this operation</summary>
public void Start()
{
volume.Val = levelMeter.ReadVolume();
}
/// <summary>Run this operation</summary>
/// <returns>
/// Event.VolumeDone
/// </returns>
public Event Run()
{
volume.Val = levelMeter.ReadVolume();
return Event.VolumeDone;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
}
}
}

View File

@ -1,58 +0,0 @@
///
/// Copyright (c) 2018 Sensus Slovensko a.s.
///
using System;
using log4net;
using TBF.Boxes;
namespace TBF.BenchControl.Modbus.UltrasoundLevelMeter
{
public class ReadVolumeOp : IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(ReadVolumeOp));
public override string ToString() { return string.Format("ReadVolumeOp(.,.)"); }
/// Set by the constructor
readonly LevelMeter levelMeter;
/// Measured value
DoubleBox volume;
/// <summary>
/// Events: VolumeDone or Error
/// </summary>
/// <param name="levelMeter">Water volume meter reference</param>
/// <param name="volume">Reference to the measured volume variable, value is in l</param>
/// <param name="eventDone">Event to be returned by Run() when completed OK</param>
public ReadVolumeOp(LevelMeter levelMeter, ref DoubleBox volume)
{
if (levelMeter == null) throw new ArgumentNullException("levelMeter");
this.levelMeter = levelMeter;
this.volume = volume;
log.Debug(this.ToString());
}
/// <summary>Start this operation</summary>
public void Start()
{
volume.Val = levelMeter.ReadVolume();
}
/// <summary>Run this operation</summary>
/// <returns>
/// Event.VolumeDone
/// </returns>
public Event Run()
{
volume.Val = levelMeter.ReadVolume();
return Event.VolumeDone;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
}
}
}

View File

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.18.1077.0")]
[assembly: AssemblyFileVersion("2.18.1077.0")]
[assembly: AssemblyVersion("2.18.1078.0")]
[assembly: AssemblyFileVersion("2.18.1078.0")]

View File

@ -669,9 +669,7 @@
<Compile Include="BenchControl\Modbus\UltrasoundLevelMeter\LevelMeterCfg.cs" />
<Compile Include="BenchControl\Modbus\UltrasoundLevelMeter\ReadLevelOp.cs" />
<Compile Include="BenchControl\Modbus\UltrasoundLevelMeter\ReadStableLevelOp.cs" />
<Compile Include="BenchControl\Modbus\UltrasoundLevelMeter\ReadStableVolumeOp.cs" />
<Compile Include="BenchControl\Modbus\UltrasoundLevelMeter\ReadTempOp.cs" />
<Compile Include="BenchControl\Modbus\UltrasoundLevelMeter\ReadVolumeOp.cs" />
<Compile Include="BenchControl\Network\Adapter\AdapterInfo.cs" />
<Compile Include="BenchControl\Network\Adapter\Netadapter.cs" />
<Compile Include="BenchControl\Network\Adapter\Factory.cs" />