diff --git a/Config/Properties/AssemblyInfo.cs b/Config/Properties/AssemblyInfo.cs index 48c280508..e9ea189d1 100644 --- a/Config/Properties/AssemblyInfo.cs +++ b/Config/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.14.595.0")] -[assembly: AssemblyFileVersion("2.14.595.0")] +[assembly: AssemblyVersion("2.15.619.0")] +[assembly: AssemblyFileVersion("2.15.619.0")] diff --git a/Results/Properties/AssemblyInfo.cs b/Results/Properties/AssemblyInfo.cs index c40cc5538..47d6a0e99 100644 --- a/Results/Properties/AssemblyInfo.cs +++ b/Results/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.14.619.0")] -[assembly: AssemblyFileVersion("2.14.619.0")] +[assembly: AssemblyVersion("2.15.619.0")] +[assembly: AssemblyFileVersion("2.15.619.0")] diff --git a/TestBenchFramework/BenchControl/TbfComponents.cs b/TestBenchFramework/BenchControl/TbfComponents.cs index 4ec5e1b01..ccb1bb150 100644 --- a/TestBenchFramework/BenchControl/TbfComponents.cs +++ b/TestBenchFramework/BenchControl/TbfComponents.cs @@ -54,7 +54,8 @@ namespace TBF.BenchControl Factories.Add(new TestMethods.FlyingStartMassCollection.Single.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollection.Compound.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollection.HeatMeters.Factory()); - Factories.Add(new TestMethods.LeakTest.TestMethodFactory()); + Factories.Add(new TestMethods.GrabImage.Factory()); + Factories.Add(new TestMethods.LeakTest.TestMethodFactory()); Factories.Add(new TestMethods.LiveStream.Factory()); Factories.Add(new TestMethods.OuterLoop.Start.Factory()); Factories.Add(new TestMethods.OuterLoop.End.Factory()); diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/Cfg.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Cfg.cs new file mode 100644 index 000000000..e8cfb1d7a --- /dev/null +++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Cfg.cs @@ -0,0 +1,43 @@ +/// +/// Copyright (c) 2017 Sensus Metering Systems +/// +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml.Serialization; +using TBF.BenchControl.Generic; +using TBF.Resources; + +namespace TBF.BenchControl.TestMethods.GrabImage +{ + public class Cfg : ComponentCfgBase, Generic.IComponentCfg + { + public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(Cfg) })[0]; + protected override XmlSerializer GetSerializer() { return Serializer; } + + public IComponentCfgCtrl GetControl() { return new CfgCtrl(); } + + + public bool BlackAndWhite; + public bool LowResolution; + + + /// Private parameterless constructor invoked by all other (public) constructors + Cfg() {} + + public Cfg(IComponentFactory factory, string name) + : this() + { + this.Factory = factory; + Name = name; + ParentName = string.Empty; + BlackAndWhite = false; + LowResolution = false; + } + + public string ToString(int i) + { + return string.Format("Name={0}, B&W={1}, LowRes={2}", Name, BlackAndWhite, LowResolution); + } + } +} diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.cs new file mode 100644 index 000000000..7af31cfba --- /dev/null +++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.cs @@ -0,0 +1,82 @@ +/// +/// Copyright (c) 2017 Sensus Metering Systems +/// +using System; +using System.Windows.Forms; +using log4net; +using TBF.BenchControl.Generic; + +namespace TBF.BenchControl.TestMethods.GrabImage +{ + public partial class CfgCtrl : UserControl, IComponentCfgCtrl + { + static readonly ILog log = LogManager.GetLogger(typeof(CfgCtrl)); + + public bool ShowMore { get { return false; } } + + Cfg config; + public IComponentCfg Config + { + get { return config as IComponentCfg; } + set + { + config = value as Cfg; + Redraw(); + } + } + + public CfgCtrl() + { + InitializeComponent(); + } + + private void EntryFormCfgCtrl_Load(object sender, EventArgs e) + { + Redraw(); + } + + public void Closing() + { + } + + void Redraw() + { + if (config == null) return; /// Control was not loaded, settings were not changed + classNameLabel.Text = config.Factory.ClassName; + nameTextBox.Text = config.Name; + hiResolutionCheckBox.Checked = config.LowResolution; + } + + public void Unlock() + { + nameTextBox.Enabled = true; + hiResolutionCheckBox.Enabled = true; + } + + public CfgUpdateFlags VerifyCfg(ref string message) + { + return CfgUpdateFlags.None; + } + + public CfgUpdateFlags UpdateCfg() + { + CfgUpdateFlags flags = CfgUpdateFlags.None; + + if (config == null) return CfgUpdateFlags.Error; /// Control was not loaded, settings were not changed + + if (config.Name != nameTextBox.Text) + { + config.Name = nameTextBox.Text; + flags |= (CfgUpdateFlags.AnyChange | CfgUpdateFlags.RestartRqrd); + } + + if (config.LowResolution != hiResolutionCheckBox.Checked) + { + config.LowResolution = hiResolutionCheckBox.Checked; + flags |= (CfgUpdateFlags.AnyChange | CfgUpdateFlags.RestartRqrd); + } + + return flags; + } + } +} diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.designer.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.designer.cs new file mode 100644 index 000000000..08903eb25 --- /dev/null +++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.designer.cs @@ -0,0 +1,97 @@ +/// +/// Copyright (c) 2017 Sensus Metering Systems +/// +namespace TBF.BenchControl.TestMethods.GrabImage +{ + partial class CfgCtrl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.nameTextBox = new System.Windows.Forms.TextBox(); + this.nameLabel = new System.Windows.Forms.Label(); + this.classNameLabel = new System.Windows.Forms.Label(); + this.hiResolutionCheckBox = new System.Windows.Forms.CheckBox(); + this.SuspendLayout(); + // + // nameTextBox + // + this.nameTextBox.Enabled = false; + this.nameTextBox.Location = new System.Drawing.Point(134, 69); + this.nameTextBox.Name = "nameTextBox"; + this.nameTextBox.Size = new System.Drawing.Size(130, 20); + this.nameTextBox.TabIndex = 7; + // + // nameLabel + // + this.nameLabel.AutoSize = true; + this.nameLabel.Location = new System.Drawing.Point(24, 72); + this.nameLabel.Name = "nameLabel"; + this.nameLabel.Size = new System.Drawing.Size(35, 13); + this.nameLabel.TabIndex = 6; + this.nameLabel.Text = "Name"; + // + // classNameLabel + // + this.classNameLabel.AutoSize = true; + this.classNameLabel.Location = new System.Drawing.Point(131, 43); + this.classNameLabel.Name = "classNameLabel"; + this.classNameLabel.Size = new System.Drawing.Size(83, 13); + this.classNameLabel.TabIndex = 5; + this.classNameLabel.Text = "ComonentName"; + // + // hiResolutionCheckBox + // + this.hiResolutionCheckBox.AutoSize = true; + this.hiResolutionCheckBox.Enabled = false; + this.hiResolutionCheckBox.Location = new System.Drawing.Point(134, 104); + this.hiResolutionCheckBox.Name = "hiResolutionCheckBox"; + this.hiResolutionCheckBox.Size = new System.Drawing.Size(96, 17); + this.hiResolutionCheckBox.TabIndex = 8; + this.hiResolutionCheckBox.Text = "High resolution"; + this.hiResolutionCheckBox.UseVisualStyleBackColor = true; + // + // CfgCtrl + // + this.Controls.Add(this.hiResolutionCheckBox); + this.Controls.Add(this.nameTextBox); + this.Controls.Add(this.nameLabel); + this.Controls.Add(this.classNameLabel); + this.Name = "CfgCtrl"; + this.Size = new System.Drawing.Size(300, 240); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox nameTextBox; + private System.Windows.Forms.Label nameLabel; + private System.Windows.Forms.Label classNameLabel; + private System.Windows.Forms.CheckBox hiResolutionCheckBox; + } +} diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.resx b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/Component.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Component.cs new file mode 100644 index 000000000..377469ebf --- /dev/null +++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Component.cs @@ -0,0 +1,39 @@ +/// +/// Copyright (c) 2017 Sensus Metering Systems +/// +using System; +using System.Collections.Generic; +using log4net; +using Config.Entities; +using TBF.BenchControl; + +namespace TBF.BenchControl.TestMethods.GrabImage +{ + public class Component : ComponentBase, GenericDevices.ITestMethod + { + private static readonly ILog log = LogManager.GetLogger(typeof(Component)); + public override string ToString() { return string.Format("TestMethods.LiveStream({0})", Cfg.ToString(1)); } + + public bool Evaluate(Test test) { return false; } + public bool Publish(Test test) { return false; } + public bool CanTest(MetersKind meters) { return true; } + + Cfg cfg; + + public Component() + { + } + + public Component(Generic.IComponentCfg cfg) + : base(cfg) + { + log.Debug(this.ToString()); + this.cfg = cfg as Cfg; + } + + public IList Execute(Test test, bool bdummy, int idummy) + { + return (new GrabImageSeq()).Execute(test, cfg.LowResolution); + } + } +} diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/Factory.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Factory.cs new file mode 100644 index 000000000..cfd07f699 --- /dev/null +++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Factory.cs @@ -0,0 +1,26 @@ +/// +/// Copyright (c) 2017 Sensus Metering Systems +/// +using System.Collections.Generic; +using TBF.BenchControl.Generic; + +namespace TBF.BenchControl.TestMethods.GrabImage +{ + public class Factory : IComponentFactory + { + public string ClassName { get { return this.GetType().Namespace.Substring(17); } } + + public void ResetStaticProperties() { Component.ResetStaticProperties(); } + + public IComponent DummyComponent() { return new Component(); } + + public IComponent GetComponent(IComponentCfg cfg, IList components) { return new Component(cfg); } + + public IComponentCfg DefaultConfig() { return new Cfg(this, this.GetType().Namespace.Substring(29)); } + + public IComponentCfg CmpntCfgFromCmpntEntity(Config.Entities.Component component) + { + return ComponentCfgBase.CreateFromDbEntity(Cfg.Serializer, component, this); + } + } +} diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/GrabImageSeq.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/GrabImageSeq.cs new file mode 100644 index 000000000..ca2d562c8 --- /dev/null +++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/GrabImageSeq.cs @@ -0,0 +1,78 @@ +/// +/// Copyright (c) 2017 Sensus Metering Systems +/// +using System.Collections.Generic; +using log4net; +using Config.Entities; +using TBF.UiBridge; + +namespace TBF.BenchControl.TestMethods.GrabImage +{ + public class GrabImageSeq : Sequences.SequenceBase + { + private static readonly ILog log = LogManager.GetLogger(typeof(GrabImageSeq)); + + + public IList Execute(Test test, bool hiResolution) + { + IList e = new List(); /// Events from currently running operations + Event retVal = Event.Done; + + /// Operations + checkUiOp = new Operations.CheckUIOp(true); + + IList cameras = new List(); + IList grabImagesOp = new List(); + + TestProgressEventArgs.SetEstimatedTimes(new int[] { 60, 0, 0, 0, 0, 0, 60, 0 }); + Bridge.OnTestProgress(this, new TestProgressEventArgs(test, 1, Config.Entities.Progress.JustStarted)); + + //------------------------------------------------ + Bridge.OnActivity(this, test.Method); + //------------------------------------------------ + State state = State.Create(string.Format("{0}({1}) : Grabbing images", test.Method, test.Name)) + .AddOperation(checkUiOp); + + foreach (var rr in sensPath.RegisterReaders) + { + if (rr is GenericDevices.IRoi) + { + GenericDevices.ICamera camera = (rr as GenericDevices.IRoi).Camera; + if (!cameras.Contains(camera)) + { + cameras.Add(camera); + grabImagesOp.Add(camera.LiveStreamOp(hiResolution)); + } + } + } + + state.AddOperations(grabImagesOp); + + state.EnterState(); + do + { + e = StateMachine.WaitRunDevsRunOps(); + + Bridge.OnTestProgress(this, new TestProgressEventArgs(test, 1, Config.Entities.Progress.Test)); + + if (e.Contains(Event.Error)) + { + break; + } + + if (TestAndLogUiCmdStop(test,e)) + { + break; + } + } + while (true); + + Bridge.OnTestProgress(this, new TestProgressEventArgs(test, 1, Config.Entities.Progress.Completed)); + + /// Create a list with one item 'retVal' (default is Event.Done) and return it + IList retList = new List(1); + retList.Add(retVal); + return retList; + } + } +} diff --git a/TestBenchFramework/BenchControl/TestMethods/LiveStream/LiveStreamSeq.cs b/TestBenchFramework/BenchControl/TestMethods/LiveStream/LiveStreamSeq.cs index 954dc8b02..a994ffb14 100644 --- a/TestBenchFramework/BenchControl/TestMethods/LiveStream/LiveStreamSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/LiveStream/LiveStreamSeq.cs @@ -41,9 +41,9 @@ namespace TBF.BenchControl.TestMethods.LiveStream Bridge.OnTestProgress(this, new TestProgressEventArgs(test, 1, Config.Entities.Progress.JustStarted)); //------------------------------------------------ - Bridge.OnActivity(this, "Live image"); + Bridge.OnActivity(this, test.Method); //------------------------------------------------ - State.Create("LiveStreamSeq : Live image") + State.Create(string.Format("{0}({1}) : Live stream", test.Method, test.Name)) .AddOperation(checkUiOp) .AddOperations(liveStreamOps) .EnterState(); diff --git a/TestBenchFramework/Properties/AssemblyInfo.cs b/TestBenchFramework/Properties/AssemblyInfo.cs index 93d10c04e..684a91a4c 100644 --- a/TestBenchFramework/Properties/AssemblyInfo.cs +++ b/TestBenchFramework/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.14.619.1")] -[assembly: AssemblyFileVersion("2.14.619.1")] +[assembly: AssemblyVersion("2.15.624.1")] +[assembly: AssemblyFileVersion("2.15.624.1")] diff --git a/TestBenchFramework/TBF.csproj b/TestBenchFramework/TBF.csproj index dc49cfb6e..dc5bb8ac2 100644 --- a/TestBenchFramework/TBF.csproj +++ b/TestBenchFramework/TBF.csproj @@ -843,6 +843,16 @@ + + + UserControl + + + CfgCtrl.cs + + + + @@ -2064,6 +2074,9 @@ CycleDlg.cs + + CfgCtrl.cs + IperlHeadCfgCtrl.cs