TorqueService.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using MathNet.Numerics;
  2. using Prism.Events;
  3. using Prism.Ioc;
  4. using Prism.Mvvm;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using TeamAAS_VP.Core;
  12. using TeamAAS_VP.Core.PLCs;
  13. using TeamAAS_VP.Events;
  14. using TeamAAS_VP.Interfaces;
  15. using TeamAAS_VP.Models;
  16. using TeamAAS_VP.Models.PLC;
  17. using TeamAAS_VP.Models.Torque;
  18. namespace TeamAAS_VP.Services
  19. {
  20. public class TorqueService : BindableBase
  21. {
  22. IEventAggregator _eventAggregator;
  23. IConfigService _configService;
  24. IContainerProvider _container;
  25. IRobotService _robotService;
  26. IPlcService _plcService;
  27. private Management management;
  28. public TorqueService(IEventAggregator ea, IConfigService configService,
  29. IContainerProvider container, IRobotService robotService, IPlcService plcService)
  30. {
  31. _eventAggregator = ea;
  32. _configService = configService;
  33. _container = container;
  34. _robotService = robotService;
  35. _plcService = plcService;
  36. management = _container.Resolve<Management>();
  37. }
  38. public async Task<bool> Throw_Screw_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, TorqueProduceModel PlcPoint)
  39. {
  40. List<bool> result = new List<bool>();
  41. var point = new RPoint()
  42. {
  43. X = PlcPoint.TorquePoints[0].X_Position,
  44. Y = PlcPoint.TorquePoints[0].Y_Position,
  45. Z = PlcPoint.TorquePoints[0].Z_Position_Start,
  46. };
  47. result.Add(await plc.WriteNodeAsync(addressConfig.Manu_ZAxis_Velocity.Address, (float)99.0));
  48. float Z_Distance = -(PlcPoint.TorquePoints[0].Z_Position_Start - PlcPoint.TorquePoints[0].Z_Position_Stop);
  49. result.Add(await Robot.JumpAsync(point, 0));
  50. result.Add(await plc.WriteNodeAsync<bool>(addressConfig.ManuToHome.Address, true));
  51. return !result.Contains(false);
  52. }
  53. public async Task<bool> Pick_Screw_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, TorqueProduceModel PlcPoint)
  54. {
  55. List<bool> result = new List<bool>();
  56. var point = new RPoint()
  57. {
  58. X = PlcPoint.TorquePoints[1].X_Position,
  59. Y = PlcPoint.TorquePoints[1].Y_Position,
  60. Z = PlcPoint.TorquePoints[1].Z_Position_Start,
  61. };
  62. result.Add(await plc.WriteNodeAsync(addressConfig.Screw_Backward.Address, true));
  63. result.Add(await Robot.JumpAsync(point, 0));
  64. result.Add(await plc.WriteNodeAsync(addressConfig.ManuTOWork.Address, true));
  65. result.Add(await plc.WriteNodeAsync(addressConfig.Screw_Backward.Address, false));
  66. result.Add(await BackZero_Async(Robot, point));
  67. result.Add(await Task.Run(() =>
  68. {
  69. return (bool)plc.ReadNode(addressConfig.InWork.Address);
  70. }));
  71. return !result.Contains(false);
  72. }
  73. public async Task<bool> Screw_Torque_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, TorqueProduceModel PlcPoint)
  74. {
  75. List<bool> result = new List<bool>();
  76. var point = new RPoint()
  77. {
  78. X = PlcPoint.TorquePoints[2].X_Position,
  79. Y = PlcPoint.TorquePoints[2].Y_Position,
  80. Z = PlcPoint.TorquePoints[2].Z_Position_Start,
  81. };
  82. //float Z_Distance = -(PlcPoint.TorquePoints[2].Z_Position_Start - PlcPoint.TorquePoints[2].Z_Position_Stop);
  83. result.Add(await plc.WriteNodeAsync(addressConfig.Manu_ZAxis_Velocity.Address, (float)5.0));
  84. result.Add(await Robot.JumpAsync(point, 0));
  85. result.Add(await plc.WriteNodeAsync(addressConfig.Check_ScrewTorque.Address, true));
  86. //result.Add(await Robot.JogAsync("Z", Z_Distance));
  87. point.Z = PlcPoint.TorquePoints[2].Z_Position_Stop;
  88. Robot.Go(point);
  89. result.Add(await plc.WriteNodeAsync(addressConfig.ManuToHome.Address, true));
  90. result.Add(await plc.WriteNodeAsync(addressConfig.Manu_ZAxis_Velocity.Address, (float)100.0));
  91. result.Add(await BackZero_Async(Robot, point));
  92. return !result.Contains(false);
  93. }
  94. public async Task<bool> Safety_Position_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, TorqueProduceModel PlcPoint)
  95. {
  96. List<bool> result = new List<bool>();
  97. var point = new RPoint()
  98. {
  99. X = PlcPoint.TorquePoints[3].X_Position,
  100. Y = PlcPoint.TorquePoints[3].Y_Position,
  101. Z = PlcPoint.TorquePoints[3].Z_Position_Start,
  102. };
  103. result.Add( await Robot.JumpAsync(point, 0));
  104. return !result.Contains(false);
  105. }
  106. public async Task<bool> BackZero_Async(IRobot Robot, RPoint point)
  107. {
  108. point.Z = 0;
  109. return Robot.Go(point);
  110. }
  111. public async Task Signal_Move_Async(IRobot Robot, OpcUaClientPLC plc, PlcAddressConfig addressConfig, PlcPoint_Torque target)
  112. {
  113. var point = new RPoint()
  114. {
  115. X = target.X_Position,
  116. Y = target.Y_Position,
  117. Z = target.Z_Position_Start,
  118. };
  119. await Robot.JumpAsync(point, 0);
  120. }
  121. }
  122. }