aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2018-10-11 12:17:48 +0300
committerAvi Levkovich <avi@twine-s.com>2018-10-11 12:17:48 +0300
commita74cf2328f7231a465a74abd9bb05a57fa07d78d (patch)
tree255e192586be93656c812f29382c2195c7ba3f29 /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
parent4cf1319552fa1d694262f7bbc41ab4ea9991d457 (diff)
parent37293ed1bf4ca876d9b90a20cfd3e4ead8f4bbf9 (diff)
downloadTango-a74cf2328f7231a465a74abd9bb05a57fa07d78d.tar.gz
Tango-a74cf2328f7231a465a74abd9bb05a57fa07d78d.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs200
1 files changed, 151 insertions, 49 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
index 2ca5aa43b..59cd6fe19 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs
@@ -35,6 +35,9 @@ using Tango.MachineStudio.Technician.Helpers;
using Tango.MachineStudio.Technician.Models;
using Tango.Logging;
using Microsoft.WindowsAPICodePack.Dialogs;
+using RealTimeGraphX;
+using RealTimeGraphX.WPF.DataSeries;
+using RealTimeGraphX.DataPoints;
namespace Tango.MachineStudio.Technician.ViewModels
{
@@ -47,8 +50,8 @@ namespace Tango.MachineStudio.Technician.ViewModels
{
private List<PropertyInfo> _diagnoticsMonitorsDataProperties;
private IDiagnosticsFrameProvider _diagnosticsFrameProvider;
- private Dictionary<SingleGraphItem, GraphController> _singleControllers;
- private Dictionary<MultiGraphItem, GraphMultiController> _multiControllers;
+ private Dictionary<SingleGraphItem, TechGraphController> _singleControllers;
+ private Dictionary<MultiGraphItem, TechGraphController> _multiControllers;
private static object _elementsLock = new object();
private String _lastTechProjectFile;
private INotificationProvider _notification;
@@ -62,6 +65,8 @@ namespace Tango.MachineStudio.Technician.ViewModels
private List<SingleTechRecordingData> _single_monitors_recordings;
private List<MultiTechRecordingData> _multi_monitors_recordings;
+ private DateTime _start_time = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
+ private DateTime _last_time = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
#region Properties
@@ -290,8 +295,8 @@ namespace Tango.MachineStudio.Technician.ViewModels
_notification = notificationProvider;
_eventLogger = eventLogger;
- _singleControllers = new Dictionary<SingleGraphItem, GraphController>();
- _multiControllers = new Dictionary<MultiGraphItem, GraphMultiController>();
+ _singleControllers = new Dictionary<SingleGraphItem, TechGraphController>();
+ _multiControllers = new Dictionary<MultiGraphItem, TechGraphController>();
AvailableTechItems = TechItem.GetAvailableTechItems().ToObservableCollection();
SelectedTechItem = AvailableTechItems.FirstOrDefault();
_diagnoticsMonitorsDataProperties = typeof(DiagnosticsMonitors).GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();
@@ -376,6 +381,10 @@ namespace Tango.MachineStudio.Technician.ViewModels
/// <param name="data">The data.</param>
private void PopulateDiagnosticsData(StartDiagnosticsResponse data)
{
+ TimeSpan delta_base = DateTime.Now - _start_time;
+ double delta_mili = (DateTime.Now - _last_time).TotalMilliseconds;
+ _last_time = DateTime.Now;
+
if (DateTime.Now > _lastDiagnosticsResponseUpdate.AddMilliseconds(MIN_DIAGNOSTICS_UPDATE_MILI))
{
CurrentDiagnosticsResponse = data;
@@ -451,20 +460,21 @@ namespace Tango.MachineStudio.Technician.ViewModels
if (prop != null)
{
- GraphController controller = null;
+ TechGraphController controller = null;
if (_singleControllers.TryGetValue(graphItem, out controller))
{
var points = GetDataArray(graphItem.TechMonitor, prop.GetValue(data.Monitors));
- int maxPoints = (int)(_diagnosticsFrameProvider.FrameRate * GraphsDurationSeconds * points.Count);
+ List<TimeSpanDataPoint> times = new List<TimeSpanDataPoint>();
+ var dPoints = points.Select(x => new DoubleDataPoint(x)).ToList();
- InvokeUI(() =>
+ for (int i = 0; i < points.Count; i++)
{
- graphItem.Editor.InnerGraph.InnerGraph.MaxPoints = maxPoints;
- });
+ times.Add(delta_base.Add(TimeSpan.FromMilliseconds((delta_mili / points.Count) * i)));
+ }
- controller.PushData(points);
+ controller.PushData(times, dPoints);
var _graph_recording = _single_graphs_recordings.SingleOrDefault(x => x.Tag == graphItem);
if (_graph_recording != null)
@@ -482,7 +492,7 @@ namespace Tango.MachineStudio.Technician.ViewModels
if (prop != null)
{
- GraphMultiController controller = null;
+ TechGraphController controller = null;
if (_multiControllers.TryGetValue(graphItem, out controller))
{
@@ -490,15 +500,23 @@ namespace Tango.MachineStudio.Technician.ViewModels
if (points.Count > 0)
{
- int maxPoints = (int)(_diagnosticsFrameProvider.FrameRate * GraphsDurationSeconds * points[0].Count);
+ List<TimeSpanDataPoint> times = new List<TimeSpanDataPoint>();
+ var dPoints = points.Select(x => new List<DoubleDataPoint>(x.Select(y => new DoubleDataPoint(y)))).ToList();
- InvokeUI(() =>
+ for (int i = 0; i < points[0].Count; i++)
{
- graphItem.Editor.InnerGraph.InnerGraph.MaxPoints = maxPoints;
- });
- }
+ times.Add(delta_base.Add(TimeSpan.FromMilliseconds((delta_mili / points[0].Count) * i)));
+ }
- controller.PushData(points);
+ List<List<TimeSpanDataPoint>> timesMat = new List<List<TimeSpanDataPoint>>();
+
+ for (int i = 0; i < controller.DataSeriesCollection.Count; i++)
+ {
+ timesMat.Add(times);
+ }
+
+ controller.PushData(timesMat, dPoints);
+ }
var _graph_recording = _multi_graph_recordings.SingleOrDefault(x => x.Tag == graphItem);
if (_graph_recording != null)
@@ -541,6 +559,17 @@ namespace Tango.MachineStudio.Technician.ViewModels
heaterItem.HeaterState = heaterState;
}
}
+ else if (item.GetType() == typeof(ValveItem))
+ {
+ ValveItem valveItem = item as ValveItem;
+
+ var valveState = data.ValvesStates.SingleOrDefault(x => x.ValveType == (ValveType)valveItem.TechValve.Code);
+
+ if (valveState != null)
+ {
+ valveItem.EffectiveState = valveState.State;
+ }
+ }
else if (item.GetType() == typeof(BlowerItem))
{
BlowerItem blowerItem = item as BlowerItem;
@@ -624,15 +653,15 @@ namespace Tango.MachineStudio.Technician.ViewModels
/// </summary>
protected virtual void OnDisableRenderingChanged()
{
- foreach (var controller in _singleControllers)
- {
- controller.Value.ChangeRenderMode(!DisableRendering);
- }
+ //foreach (var controller in _singleControllers)
+ //{
+ // controller.Value.ChangeRenderMode(!DisableRendering);
+ //}
- foreach (var controller in _multiControllers)
- {
- controller.Value.ChangeRenderMode(!DisableRendering);
- }
+ //foreach (var controller in _multiControllers)
+ //{
+ // controller.Value.ChangeRenderMode(!DisableRendering);
+ //}
}
#endregion
@@ -668,6 +697,11 @@ namespace Tango.MachineStudio.Technician.ViewModels
var editor = CreateElement<HeaterElementEditor, HeaterItem, TechHeater>(bounds, Adapter.TechHeaters.FirstOrDefault());
InitTechHeater(editor.HeaterItem);
}
+ else if (item is ValveItem)
+ {
+ var editor = CreateElement<ValveElementEditor, ValveItem, TechValve>(bounds, Adapter.TechValves.FirstOrDefault());
+ InitTechValveItem(editor.ValveItem);
+ }
else if (item is SingleGraphItem)
{
var editor = CreateElement<SingleGraphElementEditor, SingleGraphItem, TechMonitor>(bounds, Adapter.TechMonitors.Where(x => !x.MultiChannel).FirstOrDefault());
@@ -804,6 +838,11 @@ namespace Tango.MachineStudio.Technician.ViewModels
(item as HeaterItem).TechHeater = Adapter.TechHeaters.FirstOrDefault(x => x.Guid == item.ItemGuid);
CreateElement<HeaterElementEditor>(item);
}
+ else if (item is ValveItem)
+ {
+ (item as ValveItem).TechValve = Adapter.TechValves.FirstOrDefault(x => x.Guid == item.ItemGuid);
+ CreateElement<ValveElementEditor>(item);
+ }
else if (item is MeterItem)
{
(item as MeterItem).TechMonitor = Adapter.TechMonitors.Where(x => !x.MultiChannel).FirstOrDefault(x => x.Guid == item.ItemGuid);
@@ -956,36 +995,38 @@ namespace Tango.MachineStudio.Technician.ViewModels
{
var graphItem = element.HostedElement as SingleGraphItem;
var editor = element as SingleGraphElementEditor;
- graphItem.Editor = editor;
- editor.InnerGraph.InnerGraph.MaxPoints = GraphsHelper.GetMaxPoints(graphItem.TechMonitor.PointsPerFrame);
- GraphController controller = new GraphController();
+ TechGraphController controller = new TechGraphController();
+ controller.AddDataSeries(new WpfDataSeries()
+ {
+ Stroke = Colors.DodgerBlue,
+ });
editor.InnerGraph.Controller = controller;
+ graphItem.Editor = editor;
+
_singleControllers.Add(graphItem, controller);
}
else if (element is MultiGraphElementEditor)
{
var graphItem = element.HostedElement as MultiGraphItem;
var editor = element as MultiGraphElementEditor;
- editor.InnerGraph.InnerGraph.MaxPoints = GraphsHelper.GetMaxPoints(graphItem.TechMonitor.PointsPerFrame);
- graphItem.Editor = editor;
-
- GraphMultiController controller = new GraphMultiController();
+ TechGraphController controller = new TechGraphController(500);
for (int i = 0; i < graphItem.TechMonitor.ChannelCount; i++)
{
- controller.AddSeries(new RealTimeGraphEx.DataSeries.DataYSeries()
+ controller.AddDataSeries(new WpfDataSeries()
{
- UseFillAndStroke = true,
+ Stroke = ColorHelper.GetRandomColor(),
Name = graphItem.TechMonitor.Name.First() + (i + 1).ToString(),
- Stroke = new SolidColorBrush(ColorHelper.GetRandomColor()),
});
}
editor.InnerGraph.Controller = controller;
+ graphItem.Editor = editor;
+
_multiControllers.Add(graphItem, controller);
}
else if (element is MotorElementEditor)
@@ -998,26 +1039,51 @@ namespace Tango.MachineStudio.Technician.ViewModels
var dispenser = element.HostedElement as DispenserItem;
InitDispenserItem(dispenser);
}
- else if (element is DigitalOutItem)
+ else if (element is DigitalOutElementEditor)
{
var ioItem = element.HostedElement as DigitalOutItem;
InitDigitalOutItem(ioItem);
}
- else if (element is ThreadMotionItem)
+ else if (element is ThreadMotionElementEditor)
{
var threadMotionItem = element.HostedElement as ThreadMotionItem;
InitThreadMotionItem(threadMotionItem);
}
- else if (element is MotorGroupItem)
+ else if (element is MotorGroupElementEditor)
{
var motorGroupItem = element.HostedElement as MotorGroupItem;
InitMotorGroupItem(motorGroupItem);
}
- else if (element is ControllerItem)
+ else if (element is ControllerElementEditor)
{
var controllerItem = element.HostedElement as ControllerItem;
InitControllerItem(controllerItem);
}
+ else if (element is MonitorRecorderElementEditor)
+ {
+ var item = element.HostedElement as MonitorRecorderItem;
+ InitMonitorRecorderItem(item);
+ }
+ else if (element is ValveElementEditor)
+ {
+ var item = element.HostedElement as ValveItem;
+ InitTechValveItem(item);
+ }
+ else if (element is BlowerElementEditor)
+ {
+ var item = element.HostedElement as BlowerItem;
+ InitBlowerItem(item);
+ }
+ else if (element is HeaterElementEditor)
+ {
+ var item = element.HostedElement as HeaterItem;
+ InitTechHeater(item);
+ }
+ else if (element is ProcessParametersElementEditor)
+ {
+ var item = element.HostedElement as ProcessParametersItem;
+ InitProcessParameterItem(item);
+ }
}
}
@@ -1025,6 +1091,10 @@ namespace Tango.MachineStudio.Technician.ViewModels
#region Init Tech Items
+ /// <summary>
+ /// Initializes the monitor recorder item.
+ /// </summary>
+ /// <param name="item">The item.</param>
private void InitMonitorRecorderItem(MonitorRecorderItem item)
{
item.RecordingStarted += () =>
@@ -1070,6 +1140,27 @@ namespace Tango.MachineStudio.Technician.ViewModels
}
/// <summary>
+ /// Initializes the tech valve.
+ /// </summary>
+ /// <param name="item">The valve item.</param>
+ private void InitTechValveItem(ValveItem item)
+ {
+ item.StateChanged += async (x, state) =>
+ {
+ try
+ {
+ CheckMachineOperator();
+ await MachineOperator.SetValveState((ValveType)item.TechValve.Code, state);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, String.Format("Error executing technician set valve state command on '{0}'.", item.TechName));
+ _eventLogger.Log(ex, String.Format("Error executing technician set valve state command on '{0}'.", item.TechName));
+ }
+ };
+ }
+
+ /// <summary>
/// Initializes the blower item.
/// </summary>
/// <param name="item">The blower item.</param>
@@ -1300,12 +1391,21 @@ namespace Tango.MachineStudio.Technician.ViewModels
/// <param name="editor">The editor.</param>
private void InitSingleGraphitem(SingleGraphItem item, SingleGraphElementEditor editor)
{
- editor.InnerGraph.InnerGraph.MaxPoints = GraphsHelper.GetMaxPoints(item.TechMonitor.PointsPerFrame);
- item.Editor = editor;
+ TechGraphController controller = new TechGraphController();
+ controller.Range.AutoY = true;
+ controller.Range.MinimumY = item.TechMonitor.Min;
+ controller.Range.MaximumY = item.TechMonitor.Max;
+ controller.Range.MaximumX = TimeSpan.FromSeconds(10);
+
+ controller.AddDataSeries(new WpfDataSeries()
+ {
+ Stroke = Colors.DodgerBlue,
+ });
- GraphController controller = new GraphController();
editor.InnerGraph.Controller = controller;
+ item.Editor = editor;
+
_singleControllers.Add(item, controller);
item.RecordingStarted += () =>
@@ -1350,23 +1450,25 @@ namespace Tango.MachineStudio.Technician.ViewModels
/// <param name="editor">The editor.</param>
private void InitMultiGraphItem(MultiGraphItem item, MultiGraphElementEditor editor)
{
- editor.InnerGraph.InnerGraph.MaxPoints = GraphsHelper.GetMaxPoints(item.TechMonitor.PointsPerFrame);
- item.Editor = editor;
-
- GraphMultiController controller = new GraphMultiController();
+ TechGraphController controller = new TechGraphController(500);
+ controller.Range.AutoY = true;
+ controller.Range.MinimumY = item.TechMonitor.Min;
+ controller.Range.MaximumY = item.TechMonitor.Max;
+ controller.Range.MaximumX = TimeSpan.FromSeconds(10);
for (int i = 0; i < item.TechMonitor.ChannelCount; i++)
{
- controller.AddSeries(new RealTimeGraphEx.DataSeries.DataYSeries()
+ controller.AddDataSeries(new WpfDataSeries()
{
- UseFillAndStroke = true,
+ Stroke = ColorHelper.GetRandomColor(),
Name = item.TechMonitor.Name.First() + (i + 1).ToString(),
- Stroke = new SolidColorBrush(ColorHelper.GetRandomColor()),
});
}
editor.InnerGraph.Controller = controller;
+ item.Editor = editor;
+
_multiControllers.Add(item, controller);
item.RecordingStarted += () =>