ParameterDialog.xaml.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using Panuon.WPF.UI;
  2. using SWRIS.Core;
  3. using SWRIS.Enums;
  4. using SWRIS.Events;
  5. using SWRIS.Extensions;
  6. using SWRIS.Models;
  7. using SWRIS.Models.ViewModel;
  8. using System;
  9. using System.Linq;
  10. using System.Net.Sockets;
  11. using System.Threading;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. using System.Windows.Input;
  15. namespace SWRIS.Pages
  16. {
  17. /// <summary>
  18. /// ParameterDialog.xaml 的交互逻辑
  19. /// </summary>
  20. public partial class ParameterDialog : WindowX
  21. {
  22. private string _serialNo;
  23. private Socket _clientSocket;
  24. private EquipmentSettingViewModel Equipment { get; set; }
  25. public ParameterDialog(EquipmentModel equipment, Socket clientSocket)
  26. {
  27. InitializeComponent();
  28. _serialNo = equipment.SerialNo;
  29. _clientSocket = clientSocket;
  30. Equipment = equipment.ToEquipmentSettingViewModel();
  31. Equipment.IsConnected = _clientSocket != null && _clientSocket.Connected;
  32. App.TcpServer.SendGetTwistFactorData(_serialNo, _clientSocket);
  33. App.TcpServer.ClockResultReceived += TcpServer_ClockResultReceived;
  34. App.TcpServer.EncoderDirectionResultReceived += TcpServer_EncoderDirectionResultReceived;
  35. DataContext = Equipment;
  36. }
  37. private void TcpServer_EncoderDirectionResultReceived(object sender, EncoderDirectionResultReceivedEventArgs e)
  38. {
  39. Equipment.Parameter.EncoderDirection = e.Direction;
  40. }
  41. private void TcpServer_ClockResultReceived(object sender, ClockResultReceivedEventArgs e)
  42. {
  43. Equipment.Parameter.SystemTime = e.Timestamp.TimestampToDateTime();
  44. }
  45. protected void SetParameter()
  46. {
  47. ThreadPool.QueueUserWorkItem(act =>
  48. {
  49. EquipmentModel equipment = Equipment.ToEquipmentModel();
  50. if (_clientSocket != null && _clientSocket.Connected)
  51. {
  52. EquipmentDataModel equipmentData = App.DataCenter.Equipments.FirstOrDefault(c => c.IpAddress == equipment.IpAddress);
  53. equipment.ToEquipmentDataModel(equipmentData);
  54. StopDetection(equipmentData);
  55. Thread.Sleep(1000);
  56. App.TcpServer.SendSyncParameters(equipment.Parameter, Equipment.SerialNo, _clientSocket);
  57. Thread.Sleep(300);
  58. App.TcpServer.SendTurnLiveStreamData(true, _serialNo, _clientSocket);
  59. Thread.Sleep(1000);
  60. StartDetection(equipmentData);
  61. }
  62. // 更新设备数据
  63. if (ConfigHelper.SetEquipment(equipment))
  64. {
  65. Application.Current.Dispatcher.Invoke(() =>
  66. {
  67. Thread.Sleep(500);
  68. NoticeBox.Show("参数设置成功", "通知", MessageBoxIcon.Success, true, 5000);
  69. DialogResult = true;
  70. });
  71. App.UpdateEquipment(equipment);
  72. }
  73. });
  74. }
  75. private void StopDetection(EquipmentDataModel equipmentData)
  76. {
  77. equipmentData.RunningStatus |= RunningStatus.PreStop;
  78. App.TcpServer.SendStartOrStopDetection(false, _serialNo, _clientSocket);
  79. }
  80. private void StartDetection(EquipmentDataModel equipmentData)
  81. {
  82. equipmentData.RunningStatus |= RunningStatus.PreRunning;
  83. App.TcpServer.SendStartOrStopDetection(true, _serialNo, _clientSocket);
  84. }
  85. protected void GetEncoderDirection()
  86. {
  87. App.TcpServer.SendGetEncoderDirectionData(_serialNo, _clientSocket);
  88. }
  89. protected void SetEncoderDirection(EncoderDirection direction)
  90. {
  91. App.TcpServer.SendSetEncoderDirectionData(direction, _serialNo, _clientSocket);
  92. }
  93. protected string GetSerialNo()
  94. {
  95. return App.Config.GenerateNewSerialNo();
  96. }
  97. private void Save_Click(object sender, RoutedEventArgs e)
  98. {
  99. SetParameter();
  100. }
  101. private void SetClockAndDirection_Click(object sender, RoutedEventArgs e)
  102. {
  103. if (Equipment.Parameter.SystemTime != null)
  104. {
  105. var systemTime = Equipment.Parameter.SystemTime.Value;
  106. App.TcpServer.SendSetClockData(systemTime.DateTimeToTimestamp(), _serialNo, _clientSocket);
  107. }
  108. Task.Delay(20).Wait();
  109. App.TcpServer.SendSetEncoderDirectionData(Equipment.Parameter.EncoderDirection, _serialNo, _clientSocket);
  110. }
  111. private void ReadClockAndDirection_Click(object sender, RoutedEventArgs e)
  112. {
  113. App.TcpServer.SendGetClockData(_serialNo, _clientSocket);
  114. Task.Delay(20).Wait();
  115. App.TcpServer.SendGetEncoderDirectionData(_serialNo, _clientSocket);
  116. }
  117. private void Clock_GotFocus(object sender, RoutedEventArgs e)
  118. {
  119. if (Equipment.Parameter.SystemTime == null)
  120. {
  121. Equipment.Parameter.SystemTime = DateTime.Now;
  122. }
  123. }
  124. private void SerialNo_GotFocus(object sender, RoutedEventArgs e)
  125. {
  126. if (Equipment.SerialNo.IsNullOrEmptyOrWhiteSpace())
  127. {
  128. Equipment.SerialNo = App.Config.GenerateNewSerialNo();
  129. }
  130. }
  131. private void SetSerialNo_Click(object sender, RoutedEventArgs e)
  132. {
  133. App.TcpServer.SendSerialNoRequest(Equipment.SerialNo, _clientSocket);
  134. }
  135. private void Upgrade_MouseDown(object sender, MouseButtonEventArgs e)
  136. {
  137. var result = MessageBoxX.Show(this, "是否确认更新设备固件?此操作将会停止设备工作。", "警告",
  138. MessageBoxButton.YesNo,
  139. MessageBoxIcon.Warning, DefaultButton.YesOK);
  140. if (result == MessageBoxResult.Yes)
  141. {
  142. App.TcpServer.SendUpgradeRequest(_serialNo, _clientSocket);
  143. }
  144. }
  145. }
  146. }