OptoreeceivedEventArgs added to WaterMeters.iPerl

This commit is contained in:
Milan Hanajik
2015-07-31 19:45:10 +02:00
parent 3665f4d5d0
commit 5997a494bd
3 changed files with 86 additions and 1 deletions
@@ -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;
} }
} }
+1
View File
@@ -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" />