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.Collections.Generic;
|
||||
using System.IO.Ports;
|
||||
using System.Threading;
|
||||
using log4net;
|
||||
using TBF.BenchControl;
|
||||
using TBF.BenchControl.Generic;
|
||||
|
||||
namespace TBF.BenchControl.WaterMeters.iPerl
|
||||
{
|
||||
/// <summary>
|
||||
/// This component = instance of this class is a placeholder for a combined main watermeter
|
||||
/// </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));
|
||||
public override string ToString() { return string.Format("iPerl({0})", Cfg.ToString(1)); }
|
||||
|
||||
|
||||
readonly WaterMeterCfg iPerlCfg;
|
||||
|
||||
|
||||
public float PulsesPerLtr { get { return iPerlCfg.ProcParams.PulsesPerLtr; } }
|
||||
|
||||
/// <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>
|
||||
/// Events: Event.ReadRegisterDone, Event.Error
|
||||
/// </summary>
|
||||
@@ -141,5 +160,50 @@ namespace TBF.BenchControl.WaterMeters.iPerl
|
||||
pulses.Val = 1;
|
||||
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">
|
||||
<DependentUpon>iPerlCommunicationForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="BenchControl\WaterMeters\iPerl\OptoReceivedEventArgs.cs" />
|
||||
<Compile Include="BenchControl\WaterMeters\iPerl\ProcParams.cs" />
|
||||
<Compile Include="BenchControl\WaterMeters\iPerl\WaterMeter.cs" />
|
||||
<Compile Include="BenchControl\WaterMeters\iPerl\WaterMeterCfg.cs" />
|
||||
|
||||
Reference in New Issue
Block a user