BoatRobotViewModel.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. using Aitex.Core.Util;
  2. using Caliburn.Micro.Core;
  3. using Caliburn.Micro;
  4. using FurnaceUI.Models;
  5. using FurnaceUI.Views.Operations;
  6. using MECF.Framework.Common.DataCenter;
  7. using MECF.Framework.Common.Equipment;
  8. using MECF.Framework.Common.OperationCenter;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows.Controls;
  15. namespace FurnaceUI.Views.Maintenances
  16. {
  17. public class BoatRobotViewModel : FurnaceUIViewModelBase
  18. {
  19. [Subscription("Rt.Status")]
  20. public string RtStatus { get; set; }
  21. [Subscription("PM1.IsProcessing")]
  22. public bool IsProcessing { get; set; }
  23. [Subscription("PM1.RunningMode")]
  24. public bool RunningModeIsDebug { get; set; }
  25. public bool IsSystemStaus => (RtStatus != "AutoRunning");
  26. #region ZAxis Data
  27. [Subscription("PM1.BoatElevatorServo.CurrentPosition")]
  28. public float BoatZAxisCurrentPosition { get; set; }
  29. [Subscription("PM1.BoatElevatorServo.CurrentSpeed")]
  30. public float BoatZAxisCurrentSpeed { get; set; }
  31. [Subscription("PM1.BoatElevatorServo.TargetPosition")]
  32. public float BoatZAxisTargetPosition { get; set; }
  33. [Subscription("PM1.BoatElevatorServo.IsReady")]
  34. public bool BoatZAxisIsReady { get; set; }
  35. [Subscription("PM1.AlarmSignaBoatZAxisWarning.Value")]
  36. public bool BoatZAxisIsWarning { get; set; }
  37. [Subscription("PM1.AlarmSignaBoatZAxisAlarm.Value")]
  38. public bool BoatZAxisIsAlarm { get; set; }
  39. [Subscription("PM1.BoatElevatorServo.AtPosition1")]
  40. public bool BoatZAxisAtPosition1 { get; set; }
  41. [Subscription("PM1.BoatElevatorServo.AtPosition2")]
  42. public bool BoatZAxisAtPosition2 { get; set; }
  43. [Subscription("PM1.BoatElevatorServo.AtPosition3")]
  44. public bool BoatZAxisAtPosition3 { get; set; }
  45. [Subscription("PM1.BoatElevatorServo.AtHomePosition")]
  46. public bool BoatZAxisAtHomePosition { get; set; }
  47. [Subscription("PM1.BoatElevatorServo.IsServoOn")]
  48. public bool BoatZAxisIsServoOn { get; set; }
  49. [Subscription("PM1.BoatElevatorServo.ErrorCode")]
  50. public string BoatZAxisErrorCode { get; set; }
  51. [Subscription("PM1.BoatElevatorServo.Status")]
  52. public string BoatZAxisStatus { get; set; }
  53. [Subscription("PM1.BoatElevatorServo.IsActionEnable")]
  54. public bool BoatZAxisIsActionEnable { get; set; }
  55. [Subscription("PM1.BoatElevatorServo.IsMoving")]
  56. public bool BoatZAxisIsMoving { get; set; }
  57. public double ZAxisProcessPosition { get; set; }
  58. public double ZAxisPosition5 { get; set; }
  59. public double ZAxisPosition4 { get; set; }
  60. public double ZAxisPosition3 { get; set; }
  61. public double ZAxisPosition2 { get; set; }
  62. public double ZAxisPosition1 { get; set; }
  63. public double ZAxisHomePosition { get; set; }
  64. public double ZAxisPositiveLimit { get; set; }
  65. public double ZAxisNegativeLimit { get; set; }
  66. public double ZAxisMoveSpeed { get; set; }
  67. public double ZAxisAcc { get; set; }
  68. public double ZAxisDec { get; set; }
  69. public double ZAxisJogSpeed { get; set; }
  70. public double ZAxisAccTime { get; set; }
  71. public double ZAxisDecTime { get; set; }
  72. /// <summary>
  73. /// 修改对应位置转换,Position1->在2位置,Position2->在1位置
  74. /// </summary>
  75. private Dictionary<string, string> zPositionTranslate = new Dictionary<string, string>()
  76. {{"Position1","Position2" }, {"Position2","Position1" },{"Position3","Position3" }};
  77. #endregion
  78. #region RAxis Data
  79. [Subscription("PM1.BoatRotationServo.CurrentPosition")]
  80. public float BoatRAxisCurrentPosition { get; set; }
  81. [Subscription("PM1.BoatRotationServo.CurrentSpeed")]
  82. public float BoatRAxisCurrentSpeed { get; set; }
  83. [Subscription("PM1.BoatRotationServo.TargetPosition")]
  84. public float BoatRAxisTargetPosition { get; set; }
  85. [Subscription("PM1.BoatRotationServo.IsReady")]
  86. public bool BoatRAxisIsReady { get; set; }
  87. [Subscription("PM1.BoatRotationServo.IsMoving")]
  88. public bool BoatRAxisIsMoving { get; set; }
  89. [Subscription("PM1.BoatRotationServo.IsInitDone")]
  90. public bool BoatRAxisIsInitDone { get; set; }
  91. [Subscription("PM1.BoatRotationServo.IsHomeDone")]
  92. public bool BoatRAxisIsHomeDone { get; set; }
  93. [Subscription("PM1.BoatRotationServo.IsHoming")]
  94. public bool BoatRAxisIsHoming { get; set; }
  95. [Subscription("PM1.BoatRotationServo.IsInitializing")]
  96. public bool BoatRAxisIsInitializing { get; set; }
  97. [Subscription("PM1.AlarmSignaBoatRAxisWarning.Value")]
  98. public bool BoatRAxisIsWarning { get; set; }
  99. [Subscription("PM1.AlarmSignaBoatRAxisAlarm.Value")]
  100. public bool BoatRAxisIsAlarm { get; set; }
  101. [Subscription("PM1.BoatRotationServo.IsServoOn")]
  102. public bool BoatRAxisIsServoOn { get; set; }
  103. [Subscription("PM1.BoatRotationServo.ErrorCode")]
  104. public string BoatRAxisErrorCode { get; set; }
  105. [Subscription("PM1.BoatRotationServo.Status")]
  106. public string BoatRAxisStatus { get; set; }
  107. [Subscription("PM1.BoatRotationServo.Direction")]
  108. public string BoatRAxisDirection { get; set; }
  109. [Subscription("PM1.BoatRotationServo.IsActionEnable")]
  110. public bool BoatRAxisIsActionEnable { get; set; }
  111. [Subscription("PM1.BoatRotationServo.IsMotorRun")]
  112. public bool BoatRAxisIsMotorRun { get; set; }
  113. public double RAxisLoadPosition { get; set; }
  114. public double RAxisPosition180 { get; set; }
  115. public double RAxisPosition90 { get; set; }
  116. public double RAxisPosition45 { get; set; }
  117. public double RAxisHomePosition { get; set; }
  118. public double RAxisPositiveLimit { get; set; }
  119. public double RAxisNegativeLimit { get; set; }
  120. public double RAxisMoveSpeed { get; set; }
  121. public double RAxisJogSpeed { get; set; }
  122. public double RAxisAccTime { get; set; }
  123. public double RAxisDecTime { get; set; }
  124. #endregion
  125. #region Shutter Data
  126. [Subscription("PM1.Shutter.OpenCloseStatus")]
  127. public string AutoDoorOpenCloseStatus { get; set; }
  128. #endregion
  129. [Subscription("Boat.BoatTestCycledCount")]
  130. public int BoatTestCycledCount { get; set; }
  131. private int _boatCycleCountSetPoint;
  132. public string BoatCycleDisplay => $" {BoatTestCycledCount} / {_boatCycleCountSetPoint}";
  133. [Subscription("Boat.ShutterCycledCount")]
  134. public int ShutterCycledCount { get; set; }
  135. private int _ShutterCycleCountSetPoint;
  136. public string ShutterCycleDisplay => $" {ShutterCycledCount} / {_ShutterCycleCountSetPoint}";
  137. private List<string> _ZPositions;
  138. public List<string> ZPositions
  139. {
  140. get { return _ZPositions; }
  141. set { _ZPositions = value; NotifyOfPropertyChange("ZPositions"); }
  142. }
  143. private List<string> _RPositions;
  144. public List<string> RPositions
  145. {
  146. get { return _RPositions; }
  147. set { _RPositions = value; NotifyOfPropertyChange("RPositions"); }
  148. }
  149. public string ZAxisTestStartPosition { get; set; }
  150. public string ZAxisTestEndPosition { get; set; }
  151. public string RAxisTestDirection { get; set; }
  152. //public bool IsPermission { get => this.Permission >= 3 && ClientApp.Instance.UserContext.RoleName == "Service"; }
  153. public bool IsPermission { get => this.Permission >= 3; }
  154. public BoatRobotViewModel()
  155. {
  156. _ZPositions = new List<string>()
  157. {
  158. "Position1",
  159. "Position2",
  160. "Position3",
  161. };
  162. RPositions = new List<string>()
  163. {
  164. "CW",
  165. "CCW",
  166. };
  167. }
  168. public void BoatModify()
  169. {
  170. var windowManager = IoC.Get<IWindowManager>();
  171. BoatModifyViewModel boatModifyViewModel = new BoatModifyViewModel(ModuleName.PM1.ToString());
  172. (windowManager as WindowManager)?.ShowDialogWithTitle(boatModifyViewModel, null, "Boat Wafer");
  173. }
  174. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  175. {
  176. InitData();
  177. }
  178. private void InitData()
  179. {
  180. ZAxisPosition1 = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.Position1");
  181. ZAxisPosition2 = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.Position2");
  182. ZAxisHomePosition = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.Position6");
  183. ZAxisProcessPosition = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.Position7");
  184. ZAxisPositiveLimit = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.Position8");
  185. ZAxisNegativeLimit = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.Position9");
  186. ZAxisMoveSpeed = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.MoveSpeed");
  187. ZAxisAcc = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.Acc");
  188. ZAxisDec = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatElevatorServo.Dec");
  189. _boatCycleCountSetPoint = (int)QueryDataClient.Instance.Service.GetConfig($"Boat.CycleCount");
  190. _ShutterCycleCountSetPoint = (int)QueryDataClient.Instance.Service.GetConfig($"Boat.AutoShutter.CycleCount");
  191. RAxisPosition45 = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatRotationServo.Position1");
  192. RAxisPosition90 = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatRotationServo.Position2");
  193. RAxisPosition180 = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatRotationServo.Position3");
  194. RAxisLoadPosition = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatRotationServo.Position4");
  195. RAxisMoveSpeed = (double)QueryDataClient.Instance.Service.GetConfig($"Boat.BoatRotationServo.MoveSpeed");
  196. }
  197. public void BoatZSaveValue(object obj, object tb)
  198. {
  199. switch (obj)
  200. {
  201. case "Position1":
  202. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  203. break;
  204. case "Position2":
  205. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  206. break;
  207. case "Position3":
  208. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  209. break;
  210. case "Position4":
  211. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  212. break;
  213. case "Position5":
  214. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  215. break;
  216. case "Position6":
  217. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  218. break;
  219. case "Position7":
  220. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  221. break;
  222. case "Position8":
  223. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  224. break;
  225. case "Position9":
  226. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  227. break;
  228. case "MoveSpeed":
  229. case "Acc":
  230. case "Dec":
  231. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatElevatorServo.{obj}", (tb as TextBox)?.Text);
  232. break;
  233. }
  234. }
  235. public void BoatRSaveValue(object obj, object tb)
  236. {
  237. switch (obj)
  238. {
  239. case "Position1":
  240. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatRotationServo.{obj}", (tb as TextBox)?.Text);
  241. break;
  242. case "Position2":
  243. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatRotationServo.{obj}", (tb as TextBox)?.Text);
  244. break;
  245. case "Position3":
  246. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatRotationServo.{obj}", (tb as TextBox)?.Text);
  247. break;
  248. case "Position4":
  249. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatRotationServo.{obj}", (tb as TextBox)?.Text);
  250. break;
  251. case "MoveSpeed":
  252. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"Boat.BoatRotationServo.{obj}", (tb as TextBox)?.Text);
  253. break;
  254. }
  255. }
  256. public void MoveTo(object targetPosition)
  257. {
  258. switch (targetPosition)
  259. {
  260. case "Position1":
  261. InvokeClient.Instance.Service.DoOperation($"PM1.BoatElevatorServo.ServoMoveTo", targetPosition);
  262. break;
  263. case "Position2":
  264. InvokeClient.Instance.Service.DoOperation($"PM1.BoatElevatorServo.ServoMoveTo", targetPosition);
  265. break;
  266. case "Position3":
  267. InvokeClient.Instance.Service.DoOperation($"PM1.BoatElevatorServo.ServoMoveTo", targetPosition);
  268. break;
  269. case "Position4":
  270. InvokeClient.Instance.Service.DoOperation($"PM1.BoatElevatorServo.ServoMoveTo", targetPosition);
  271. break;
  272. case "Position5":
  273. InvokeClient.Instance.Service.DoOperation($"PM1.BoatElevatorServo.ServoMoveTo", targetPosition);
  274. break;
  275. case "Position6":
  276. InvokeClient.Instance.Service.DoOperation($"PM1.BoatElevatorServo.ServoMoveTo", targetPosition);
  277. break;
  278. case "Position7":
  279. InvokeClient.Instance.Service.DoOperation($"PM1.BoatElevatorServo.ServoMoveTo", targetPosition);
  280. break;
  281. }
  282. }
  283. public void RAxisMoveTo(object targetPosition)
  284. {
  285. switch (targetPosition)
  286. {
  287. case "Position1":
  288. InvokeClient.Instance.Service.DoOperation($"PM1.BoatRotationServo.ServoMoveTo", targetPosition);
  289. break;
  290. case "Position2":
  291. InvokeClient.Instance.Service.DoOperation($"PM1.BoatRotationServo.ServoMoveTo", targetPosition);
  292. break;
  293. case "Position3":
  294. InvokeClient.Instance.Service.DoOperation($"PM1.BoatRotationServo.ServoMoveTo", targetPosition);
  295. break;
  296. case "Position4":
  297. InvokeClient.Instance.Service.DoOperation($"PM1.BoatRotationServo.ServoMoveTo", targetPosition);
  298. break;
  299. default:
  300. InvokeClient.Instance.Service.DoOperation($"PM1.BoatRotationServo.ServoMoveTo", targetPosition);
  301. break;
  302. }
  303. }
  304. public void BoatZServoTest()
  305. {
  306. if (string.IsNullOrEmpty(ZAxisTestStartPosition))
  307. {
  308. return;
  309. }
  310. if (zPositionTranslate.Keys.Contains(ZAxisTestStartPosition) && zPositionTranslate.Keys.Contains(ZAxisTestStartPosition))
  311. {
  312. InvokeClient.Instance.Service.DoOperation($"Boat.ZAxisMovingTest", zPositionTranslate[ZAxisTestStartPosition], zPositionTranslate[ZAxisTestEndPosition]);
  313. }
  314. else
  315. {
  316. InvokeClient.Instance.Service.DoOperation($"Boat.ZAxisMovingTest", ZAxisTestStartPosition, ZAxisTestEndPosition);
  317. }
  318. }
  319. public void BoatRotationServoTest(object targetPosition)
  320. {
  321. InvokeClient.Instance.Service.DoOperation($"Boat.RAxisMovingTest", targetPosition);
  322. }
  323. public void BoatTestStart()
  324. {
  325. if (zPositionTranslate.Keys.Contains(ZAxisTestStartPosition) && zPositionTranslate.Keys.Contains(ZAxisTestStartPosition))
  326. {
  327. InvokeClient.Instance.Service.DoOperation($"Boat.MovingTest", zPositionTranslate[ZAxisTestStartPosition], zPositionTranslate[ZAxisTestEndPosition], RAxisTestDirection);
  328. }
  329. else
  330. {
  331. InvokeClient.Instance.Service.DoOperation($"Boat.MovingTest", ZAxisTestStartPosition, ZAxisTestEndPosition, RAxisTestDirection);
  332. }
  333. }
  334. public void BoatTestStop()
  335. {
  336. InvokeClient.Instance.Service.DoOperation($"Boat.Abort");
  337. }
  338. public void ShutterTestStart()
  339. {
  340. InvokeClient.Instance.Service.DoOperation($"Boat.ShutterCycleTest");
  341. }
  342. public void ShutterTestStop()
  343. {
  344. InvokeClient.Instance.Service.DoOperation($"Boat.Abort");
  345. }
  346. public void BoatRotationServoStopTest()
  347. {
  348. InvokeClient.Instance.Service.DoOperation($"Boat.Abort");
  349. }
  350. public void Home(object target)
  351. {
  352. InvokeClient.Instance.Service.DoOperation($"{target}.ServoHome");
  353. }
  354. public void SetServoOn(object target, object isOn)
  355. {
  356. InvokeClient.Instance.Service.DoOperation($"{target}", $"{isOn}");
  357. }
  358. public void Continue(object target)
  359. {
  360. InvokeClient.Instance.Service.DoOperation($"{target}.Continue");
  361. }
  362. public void Stop(object target)
  363. {
  364. InvokeClient.Instance.Service.DoOperation($"{target}.ServoStop");
  365. }
  366. public void Reset(object target)
  367. {
  368. InvokeClient.Instance.Service.DoOperation($"{target}.ServoResetAlarm");
  369. }
  370. public void SetOpen(object target, bool open)
  371. {
  372. // IsAutoDoorEnableManualOperation
  373. InvokeClient.Instance.Service.DoOperation($"{target}", open);
  374. }
  375. }
  376. }