OptoreeceivedEventArgs added to WaterMeters.iPerl
This commit is contained in:
@@ -0,0 +1,20 @@
|
|||||||
|
///
|
||||||
|
/// Copyright (c) 2015 Sensus Metering Systems
|
||||||
|
///
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace TBF.BenchControl.WaterMeters.iPerl
|
||||||
|
{
|
||||||
|
public class OptoReceivedEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public string Data;
|
||||||
|
|
||||||
|
public OptoReceivedEventArgs(string data)
|
||||||
|
{
|
||||||
|
this.Data = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,21 +3,26 @@
|
|||||||
///
|
///
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO.Ports;
|
||||||
|
using System.Threading;
|
||||||
using log4net;
|
using log4net;
|
||||||
using TBF.BenchControl;
|
using TBF.BenchControl;
|
||||||
|
using TBF.BenchControl.Generic;
|
||||||
|
|
||||||
namespace TBF.BenchControl.WaterMeters.iPerl
|
namespace TBF.BenchControl.WaterMeters.iPerl
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This component = instance of this class is a placeholder for a combined main watermeter
|
/// This component = instance of this class is a placeholder for a combined main watermeter
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class WaterMeter : ComponentBase, GenericDevices.IWaterMeter, GenericDevices.IRegisterReader, IOperation
|
public class WaterMeter : ComponentBase, IDevice, GenericDevices.IWaterMeter, GenericDevices.IRegisterReader, IOperation
|
||||||
{
|
{
|
||||||
private static readonly ILog log = LogManager.GetLogger(typeof(WaterMeter));
|
private static readonly ILog log = LogManager.GetLogger(typeof(WaterMeter));
|
||||||
public override string ToString() { return string.Format("iPerl({0})", Cfg.ToString(1)); }
|
public override string ToString() { return string.Format("iPerl({0})", Cfg.ToString(1)); }
|
||||||
|
|
||||||
|
|
||||||
readonly WaterMeterCfg iPerlCfg;
|
readonly WaterMeterCfg iPerlCfg;
|
||||||
|
|
||||||
|
|
||||||
public float PulsesPerLtr { get { return iPerlCfg.ProcParams.PulsesPerLtr; } }
|
public float PulsesPerLtr { get { return iPerlCfg.ProcParams.PulsesPerLtr; } }
|
||||||
|
|
||||||
/// <summary>WaterMeter producer</summary>
|
/// <summary>WaterMeter producer</summary>
|
||||||
@@ -78,6 +83,20 @@ namespace TBF.BenchControl.WaterMeters.iPerl
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void Initialize()
|
||||||
|
{
|
||||||
|
optoSerialPort = new SerialPort(string.Format("COM{0}", iPerlCfg.OptoComPortNr),
|
||||||
|
9600, Parity.None, 8, StopBits.One);
|
||||||
|
optoSerialPort.Handshake = Handshake.None;
|
||||||
|
optoSerialPort.Open();
|
||||||
|
optoPortOpen = true;
|
||||||
|
|
||||||
|
stopWorkerThread = false;
|
||||||
|
workerThread = new Thread(Worker);
|
||||||
|
workerThread.Start();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Events: Event.ReadRegisterDone, Event.Error
|
/// Events: Event.ReadRegisterDone, Event.Error
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -141,5 +160,50 @@ namespace TBF.BenchControl.WaterMeters.iPerl
|
|||||||
pulses.Val = 1;
|
pulses.Val = 1;
|
||||||
refPulses.Val = 2;
|
refPulses.Val = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Measurement serial port and worker thread related private variables
|
||||||
|
///
|
||||||
|
private SerialPort optoSerialPort;
|
||||||
|
private bool optoPortOpen;
|
||||||
|
private Thread workerThread;
|
||||||
|
private bool stopWorkerThread;
|
||||||
|
|
||||||
|
|
||||||
|
void Worker()
|
||||||
|
{
|
||||||
|
while (!stopWorkerThread)
|
||||||
|
{
|
||||||
|
Thread.Sleep(250);
|
||||||
|
if (stopWorkerThread) break;
|
||||||
|
int nrBytes = optoSerialPort.BytesToRead;
|
||||||
|
if (nrBytes > 0)
|
||||||
|
{
|
||||||
|
char[] buffer = new char[nrBytes];
|
||||||
|
optoSerialPort.Read(buffer, 0, nrBytes);
|
||||||
|
string s = new string(buffer);
|
||||||
|
OnOptoReceived(this, new OptoReceivedEventArgs(s));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OnOptoReceived(this, new OptoReceivedEventArgs("."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called from the state machine when a test is selected and UI needs to be updated.
|
||||||
|
/// </summary>
|
||||||
|
public void OnOptoReceived(object sender, OptoReceivedEventArgs args)
|
||||||
|
{
|
||||||
|
if (OptoReceivedHandler == null) return;
|
||||||
|
try { OptoReceivedHandler(sender, args); }
|
||||||
|
catch (Exception) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public event EventHandler<OptoReceivedEventArgs> OptoReceivedHandler;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -302,6 +302,7 @@
|
|||||||
<Compile Include="BenchControl\TestMethods\iPerlAdjustment\iPerlCommunicationForm.designer.cs">
|
<Compile Include="BenchControl\TestMethods\iPerlAdjustment\iPerlCommunicationForm.designer.cs">
|
||||||
<DependentUpon>iPerlCommunicationForm.cs</DependentUpon>
|
<DependentUpon>iPerlCommunicationForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="BenchControl\WaterMeters\iPerl\OptoReceivedEventArgs.cs" />
|
||||||
<Compile Include="BenchControl\WaterMeters\iPerl\ProcParams.cs" />
|
<Compile Include="BenchControl\WaterMeters\iPerl\ProcParams.cs" />
|
||||||
<Compile Include="BenchControl\WaterMeters\iPerl\WaterMeter.cs" />
|
<Compile Include="BenchControl\WaterMeters\iPerl\WaterMeter.cs" />
|
||||||
<Compile Include="BenchControl\WaterMeters\iPerl\WaterMeterCfg.cs" />
|
<Compile Include="BenchControl\WaterMeters\iPerl\WaterMeterCfg.cs" />
|
||||||
|
|||||||
Reference in New Issue
Block a user