WorkRunViewModel.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Prism.Mvvm;
  6. using System.Threading.Tasks;
  7. using Prism.Events;
  8. using Prism.Ioc;
  9. using Prism.Regions;
  10. using LampInspectionMachine.Model;
  11. using System.Threading;
  12. using LampInspectionMachine.Log4xml;
  13. using System.Diagnostics;
  14. using System.IO.Ports;
  15. using LampInspectionMachine.HttpService;
  16. using System.IO;
  17. using System.Net;
  18. using Newtonsoft.Json;
  19. using System.Collections.ObjectModel;
  20. using LampInspectionMachine.Views;
  21. using Microsoft.Xaml.Behaviors;
  22. using System.Collections.Specialized;
  23. using System.Windows.Controls;
  24. using LampInspectionMachine.Core;
  25. using Prism.Commands;
  26. using MvCamCtrl.NET;
  27. using System.Windows;
  28. namespace LampInspectionMachine.ViewModels
  29. {
  30. public class WorkRunViewModel : BindableBase, INavigationAware
  31. {
  32. private AppData _appData;
  33. private IContainerProvider _container;
  34. private IEventAggregator _eventAggregator;
  35. private IRegionManager _regionManager;
  36. private Management management;
  37. private Stopwatch[]IOChecksTime=new Stopwatch[50];
  38. private string CheckOrderCode=string.Empty;
  39. private ObservableCollection<string> _Logs = new ObservableCollection<string>();
  40. public ObservableCollection<string> Logs { get => _Logs; set => _Logs = value; }
  41. private DelegateCommand _ClearViewCommand;
  42. public DelegateCommand ClearViewCommand =>
  43. _ClearViewCommand ?? (_ClearViewCommand = new DelegateCommand(ClearOKAndNGMethod));
  44. public DelegateCommand LoadedCommand { get; set; }
  45. public Management Management { get => management; set { SetProperty(ref management, value); } }
  46. private bool IsLoad=false;
  47. public WorkRunViewModel(IContainerProvider container, IRegionManager regionManager, IEventAggregator eventAggregator)
  48. {
  49. _container = container;
  50. _eventAggregator = eventAggregator;
  51. _regionManager = regionManager;
  52. _appData = _container.Resolve<AppData>();
  53. Management = _container.Resolve<Management>();
  54. LogHelper.logChangHandler += ShowLog;
  55. LoadedCommand = new DelegateCommand(OnLoad);
  56. }
  57. private async void OnLoad()
  58. {
  59. if ( !IsLoad )
  60. {
  61. LogHelper.Info("程序启动");
  62. management.LoadCameraDevice();
  63. management.ConnectPlc();
  64. TipService tipService = new TipService();
  65. await Task.Run(() => { Management.InitTemplates(tipService, Management); });
  66. }
  67. IsLoad = true;
  68. }
  69. private void ShowLog(Log4xml.Log log)
  70. {
  71. System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
  72. {
  73. if (Logs.Count > 100)
  74. {
  75. Logs.Clear();
  76. }
  77. string str = log.Msg.Trim().Replace("相机",Resources.Language.Resources.相机); ;
  78. Logs.Add(str);
  79. }));
  80. }
  81. private void ClearOKAndNGMethod()
  82. {
  83. for (int i = 0; i < management.VisionProManagers.Count; i++)
  84. {
  85. management.VisionProManagers[i].IsOkCount = 0;
  86. management.VisionProManagers[i].IsNgCount = 0;
  87. }
  88. }
  89. public bool IsNavigationTarget(NavigationContext navigationContext)
  90. {
  91. return IsLoad;
  92. }
  93. public void OnNavigatedFrom(NavigationContext navigationContext)
  94. {
  95. //停止运行
  96. }
  97. public void OnNavigatedTo(NavigationContext navigationContext)
  98. {
  99. try
  100. {
  101. //继续运行
  102. for (int i = 0; i < Management.VisionProManagers.Count; i++)
  103. {
  104. if (Management.VisionProManagers[i].Camera != null && Management.VisionProManagers[i].Camera.IsConnected)
  105. {
  106. //Management.VisionProManagers[i].Camera.StopGrabbing();
  107. //if (!Management.VisionProManagers[i].Camera.IsGrabbing)
  108. //{
  109. Management.VisionProManagers[i].Camera.SetTriggerMode(true, 0);
  110. Management.VisionProManagers[i].CameraInfo.TriggerMode = true;
  111. if (!Management.VisionProManagers[i].Camera.CheckGrabImageCallbackEventIsHas(Management.VisionProManagers[i].ImageCallback))
  112. Management.VisionProManagers[i].Camera.GrabImageCallbackEvent += Management.VisionProManagers[i].ImageCallback;
  113. // management.VisionProManagers[i].Camera.StartTriggerGrabbing();
  114. //}
  115. if (Management.VisionProManagers[i].Camera.CheckImageCallbackEventIsHas(Management.VisionProManagers[i].CamCallBack))
  116. {
  117. Management.VisionProManagers[i].Camera.ImageCallbackEvent -= Management.VisionProManagers[i].CamCallBack;
  118. }
  119. }
  120. }
  121. }
  122. catch (Exception ex)
  123. {
  124. LogHelper.Error("切换运行界面出错" + ex.Message);
  125. MessageBox.Show("切换运行界面出错"+ex.Message);
  126. }
  127. }
  128. }
  129. public class AutoScrollBehavior : Behavior<ListBox>
  130. {
  131. protected override void OnAttached()
  132. {
  133. base.OnAttached();
  134. var items = AssociatedObject.Items;
  135. if ( items is INotifyCollectionChanged incc )
  136. {
  137. incc.CollectionChanged += OnCollectionChanged;
  138. }
  139. }
  140. bool isend = true;
  141. private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
  142. {
  143. if ( e.Action == NotifyCollectionChangedAction.Add && AssociatedObject.HasItems )
  144. {
  145. if (isend)
  146. {
  147. isend = false;
  148. AssociatedObject.Dispatcher.BeginInvoke(new Action(() =>
  149. {
  150. AssociatedObject.UpdateLayout();
  151. AssociatedObject.ScrollIntoView(AssociatedObject.Items[AssociatedObject.Items.Count - 1]);
  152. isend = true;
  153. }));
  154. }
  155. }
  156. }
  157. protected override void OnDetaching()
  158. {
  159. if ( AssociatedObject.Items is INotifyCollectionChanged incc )
  160. {
  161. incc.CollectionChanged -= OnCollectionChanged;
  162. }
  163. base.OnDetaching();
  164. }
  165. }
  166. }