diff options
| author | Avi Levkovich <avi@twine-s.com> | 2018-10-11 12:17:48 +0300 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2018-10-11 12:17:48 +0300 |
| commit | a74cf2328f7231a465a74abd9bb05a57fa07d78d (patch) | |
| tree | 255e192586be93656c812f29382c2195c7ba3f29 /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs | |
| parent | 4cf1319552fa1d694262f7bbc41ab4ea9991d457 (diff) | |
| parent | 37293ed1bf4ca876d9b90a20cfd3e4ead8f4bbf9 (diff) | |
| download | Tango-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.cs | 200 |
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 += () => |
