IOWalkingAxisHH.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. using Aitex.Core.Common.DeviceData;
  2. using Aitex.Core.RT.DataCenter;
  3. using Aitex.Core.RT.Device;
  4. using Aitex.Core.RT.Device.Unit;
  5. using Aitex.Core.RT.Fsm;
  6. using Aitex.Core.RT.Log;
  7. using Aitex.Core.Util;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading;
  13. using System.Threading.Tasks;
  14. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.WalkingAixs
  15. {
  16. public class IOWalkingAxisHH :WalkingAxisBaseDevice
  17. {
  18. private R_TRIG _trigMonitorError = new R_TRIG();
  19. public IOWalkingAxisHH(string module,string name,IoSensor[] dis,IoTrigger[] dos):base(module,name)
  20. {
  21. _diPosFeedback0 = dis[0];
  22. _diPosFeedback1 = dis[1];
  23. _diPosFeedback2 = dis[2];
  24. _diReady = dis[3];
  25. _diOnTarget = dis[4];
  26. _diOnError = dis[5];
  27. _diOnLeftLimit = dis[6];
  28. _diOnRightLimit = dis[7];
  29. _diHomeSensor = dis[8];
  30. _doStartMoving = dos[0];
  31. _doPosSet0 = dos[1];
  32. _doPosSet1 = dos[2];
  33. _doPosSet2 = dos[3];
  34. _doHome = dos[4];
  35. _doSetFree = dos[5];
  36. _doStop = dos[6];
  37. _doResetAlarm = dos[7];
  38. _doJogFwd = dos[8];
  39. _doJogRev = dos[9];
  40. DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData);
  41. }
  42. private readonly IoSensor _diPosFeedback0;
  43. private readonly IoSensor _diPosFeedback1;
  44. private readonly IoSensor _diPosFeedback2;
  45. private readonly IoSensor _diReady;
  46. private readonly IoSensor _diOnTarget;
  47. private readonly IoSensor _diOnError;
  48. private readonly IoSensor _diOnLeftLimit;
  49. private readonly IoSensor _diOnRightLimit;
  50. private readonly IoSensor _diHomeSensor;
  51. private readonly IoTrigger _doStartMoving;
  52. private readonly IoTrigger _doPosSet0;
  53. private readonly IoTrigger _doPosSet1;
  54. private readonly IoTrigger _doPosSet2;
  55. private readonly IoTrigger _doHome;
  56. private readonly IoTrigger _doSetFree;
  57. private readonly IoTrigger _doStop;
  58. private readonly IoTrigger _doResetAlarm;
  59. private readonly IoTrigger _doJogFwd;
  60. private readonly IoTrigger _doJogRev;
  61. public override void Monitor()
  62. {
  63. _trigMonitorError.CLK = _diOnError.Value;
  64. if (_trigMonitorError.Q)
  65. OnError(null);
  66. }
  67. protected override bool fStop(object[] param)
  68. {
  69. _doStartMoving.SetTrigger(false, out _);
  70. _doPosSet0.SetTrigger(false, out _);
  71. _doPosSet1.SetTrigger(false, out _);
  72. _doPosSet2.SetTrigger(false, out _);
  73. _doHome.SetTrigger(false, out _);
  74. _doSetFree.SetTrigger(false, out _);
  75. _doStop.SetTrigger(true, out _);
  76. _doResetAlarm.SetTrigger(false, out _);
  77. _doJogFwd.SetTrigger(false, out _);
  78. _doJogRev.SetTrigger(false, out _);
  79. return base.fStop(param);
  80. }
  81. protected override bool fMonitorInit(object[] param)
  82. {
  83. if(_diHomeSensor.Value && _diOnTarget.Value && _diHomeSensor.Value && _diReady.Value)
  84. OnActionDone(param);
  85. return true;
  86. }
  87. protected override bool fMonitorMove(object[] param)
  88. {
  89. if (_diOnTarget.Value && _diReady.Value && GetCurrentStation() == TargetStation)
  90. OnActionDone(param);
  91. return true; ;
  92. }
  93. protected override bool fStartInit(object[] param)
  94. {
  95. _doStop.SetTrigger(false, out _);
  96. _doJogRev.SetTrigger(false, out _);
  97. _doJogFwd.SetTrigger(false, out _);
  98. _doSetFree.SetTrigger(false, out _);
  99. _doResetAlarm.SetTrigger(false, out _);
  100. _doStartMoving.SetTrigger(false, out _);
  101. _doHome.SetTrigger(true,out _);
  102. return true;
  103. }
  104. protected override bool fInitComplete(object[] param)
  105. {
  106. _doHome.SetTrigger(false, out _);
  107. return true;
  108. }
  109. protected override bool fStartMove(object[] param)
  110. {
  111. int stationIndex = (int)param[0];
  112. if (stationIndex > 7 || stationIndex <0) return false;
  113. _doPosSet0.SetTrigger((stationIndex & 0x1) == 0x1, out _);
  114. _doPosSet1.SetTrigger((stationIndex & 0x2) == 0x2, out _);
  115. _doPosSet2.SetTrigger((stationIndex & 0x4) == 0x4, out _);
  116. Thread.Sleep(200);
  117. _doStartMoving.SetTrigger(true, out _);
  118. Thread.Sleep(500);
  119. return true;
  120. }
  121. protected override bool fMoveComplete(object[] param)
  122. {
  123. _doStartMoving.SetTrigger(false, out _);
  124. _doPosSet0.SetTrigger(false, out _);
  125. _doPosSet1.SetTrigger(false, out _);
  126. _doPosSet2.SetTrigger(false, out _);
  127. return true;
  128. }
  129. protected override bool fStartReset(object[] param)
  130. {
  131. _doStartMoving.SetTrigger(false, out _);
  132. _doPosSet0.SetTrigger(false, out _);
  133. _doPosSet1.SetTrigger(false, out _);
  134. _doPosSet2.SetTrigger(false, out _);
  135. _doHome.SetTrigger(false, out _);
  136. _doSetFree.SetTrigger(false, out _);
  137. _doStop.SetTrigger(false, out _);
  138. //_doResetAlarm.SetTrigger(false, out _);
  139. _doJogFwd.SetTrigger(false, out _);
  140. _doJogRev.SetTrigger(false, out _);
  141. _doResetAlarm.SetTrigger(true, out _);
  142. Thread.Sleep(1000);
  143. _doResetAlarm.SetTrigger(false, out _);
  144. return true;
  145. }
  146. public override bool IsReady()
  147. {
  148. if (_diOnError.Value) return false;
  149. if (_diOnLeftLimit.Value) return false;
  150. if (_diOnRightLimit.Value) return false;
  151. return base.IsReady();
  152. }
  153. public override int GetCurrentStation()
  154. {
  155. return (_diPosFeedback0.Value ? 1 : 0) + (_diPosFeedback1.Value ? 2 : 0) +
  156. (_diPosFeedback2.Value ? 4 : 0);
  157. }
  158. private AITServoMotorData DeviceData
  159. {
  160. get
  161. {
  162. return new AITServoMotorData()
  163. {
  164. DiPosFeedBack1 = _diPosFeedback0.Value,
  165. DiPosFeedBack2 = _diPosFeedback1.Value,
  166. DiPosFeedBack3 = _diPosFeedback2.Value,
  167. DiReady = _diReady.Value,
  168. DiOnTarget = _diOnTarget.Value,
  169. DiOnError = _diOnError.Value,
  170. DiOnLeftLimit = _diOnLeftLimit.Value,
  171. DiOnRightLimit = _diOnRightLimit.Value,
  172. DiOnHomeSensor = _diHomeSensor.Value,
  173. DoStart = _doStartMoving.Value,
  174. DoPos1 = _doPosSet0.Value,
  175. DoPos2 = _doPosSet1.Value,
  176. DoPos3 = _doPosSet2.Value,
  177. DoHomeOn = _doHome.Value,
  178. DoFreeOn = _doSetFree.Value,
  179. DoStop = _doStop.Value,
  180. DoReset = _doResetAlarm.Value,
  181. DoJogFwd = _doJogFwd.Value,
  182. DoJogRev = _doJogRev.Value,
  183. CurrentStatus = DeviceState.ToString(),
  184. //State = _state,
  185. };
  186. }
  187. }
  188. }
  189. }