SystemSimulator.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using Aitex.Common.Util;
  2. using Aitex.Core.RT.DataCenter;
  3. using Aitex.Core.Util;
  4. using athosSimulator.Robot;
  5. using athosSimulator.IO;
  6. using athosSimulator.LoadPort;
  7. using athosSimulator.PreAligner;
  8. using IOs = Aitex.Core.RT.IOCore.IO;
  9. namespace athosSimulator
  10. {
  11. public class SystemSimulator : Singleton<SystemSimulator>
  12. {
  13. private RorzeRobot751Simulator _robotSimulator;
  14. private Hirata _lp1Simulator;
  15. private Hirata _lp2Simulator;
  16. private Hirata _lp3Simulator;
  17. private PeriodicJob _task;
  18. public SimulatorPlc Plc { get; set; }
  19. public RorzeRobot751Simulator RobotSimulator { get { return _robotSimulator; } }
  20. public Hirata LP1Simulator { get { return _lp1Simulator; } }
  21. public Hirata LP2Simulator { get { return _lp2Simulator; } }
  22. public Hirata LP3Simulator { get { return _lp3Simulator; } }
  23. public SystemSimulator()
  24. {
  25. //Robot
  26. _robotSimulator = new RorzeRobot751Simulator(10110);
  27. _robotSimulator.Enable();//打开port
  28. //LP1
  29. _lp1Simulator = new Hirata("COM12");
  30. _lp1Simulator.Enable();//打开port
  31. //LP2
  32. _lp2Simulator = new Hirata("COM14");
  33. _lp2Simulator.Enable();//打开port
  34. //_lp3Simulator = new Hirata("COM16");
  35. //_lp3Simulator.Enable();//打开port
  36. //PA
  37. //Rorze _rorzePASimulator1 = new Rorze(10118);
  38. //_rorzePASimulator1.Enable();//打开port
  39. //Rorze _rorzePASimulator2 = new Rorze(10119);
  40. //_rorzePASimulator2.Enable();//打开port
  41. //IO
  42. Plc = new SimulatorPlc(16731, "Simulator->IO", PathManager.GetCfgDir() + "_ioDefineCardNew.xml", "IO");
  43. }
  44. public void Initialize()
  45. {
  46. SetDefaultValue();
  47. Singleton<DataManager>.Instance.Initialize(false);
  48. _task = new PeriodicJob(50, onMonitor, "Simulator", true);
  49. }
  50. private bool onMonitor()
  51. {
  52. //控制Flipper
  53. //控制Flipper TurnOver
  54. if (IOs.DO["IO.DO_FlipperTurnOverMotorModeSW"].Value)
  55. {
  56. if (IOs.DO["IO.DO_FlipperTurnOverStartStop/HOME"].Value &&
  57. (IOs.DO["IO.DO_FlipperTurnOverSEL0/JOGP"].Value ||
  58. IOs.DO["IO.DO_FlipperTurnOverSEL1/JOGN"].Value ||
  59. IOs.DO["IO.DO_FlipperTurnOverSEL2/JOG0"].Value))
  60. {
  61. IOs.DI["IO.DI_FlipperTurnOverMotorPosCompleted"].Value = true;
  62. }
  63. }
  64. //控制Flipper Clamp
  65. if (IOs.DO["IO.DO_FlipperClampMotorModeSW"].Value)
  66. {
  67. if (IOs.DO["IO.DO_FlipperClampSTART-STOP/HOME"].Value &&
  68. (IOs.DO["IO.DO_FlipperClampSEL0/JOGP"].Value ||
  69. IOs.DO["IO.DO_FlipperClampSEL1/JOGN"].Value ||
  70. IOs.DO["IO.DO_FlipperClampSEL2/JOG0"].Value))
  71. {
  72. IOs.DI["IO.DI_FlipperClampMotorPosCompleted"].Value = true;
  73. }
  74. }
  75. //控制Robot
  76. //控制LP
  77. return true;
  78. }
  79. /// <summary>
  80. /// 设置初始值
  81. /// </summary>
  82. private void SetDefaultValue()
  83. {
  84. IOs.DI["IO.DI_LightCurtainSensor"].Value = true;
  85. IOs.DI["IO.DI_FlipperTurnOverHorizontalSensor"].Value = true;//运动中为false 正反面时为true
  86. IOs.DI["IO.DI_FlipperTurnOverOriginSensor"].Value = true;//
  87. IOs.DI["IO.DI_FlipperTurnOverMotorPosCompleted"].Value = false;
  88. IOs.DI["IO.DI_FlipperTurnOverMotorAlarm"].Value = false;
  89. IOs.DI["IO.DI_FlipperEnableToRobot"].Value = true;
  90. IOs.DI["IO.DI_FlipperClampClosedSensor"].Value = false;//是否闭合
  91. IOs.DI["IO.DI_FlipperClampOpenedSensor"].Value = true;
  92. IOs.DI["IO.DI_FlipperClampMotorPosCompleted"].Value = false;//动作是否完成
  93. IOs.DI["IO.DI_FFUSIGNAL"].Value = true;
  94. IOs.DI["IO.DI_CDAPressureSW"].Value = true;
  95. IOs.DI["IO.DI_VACPressureSW"].Value = true;
  96. IOs.DI["IO.DI_IONCDAPressureSW"].Value = false;
  97. IOs.DI["IO.DI_IONSIGNAL"].Value = false;
  98. IOs.DI["IO.DI_SideDoorOpened"].Value = false;//侧门是否打开 一般情况不可以打开
  99. IOs.DI["IO.DI_OuterSideDoorClosed"].Value = false;//外侧们是否打开
  100. IOs.DI["IO.DI_RunMode"].Value = true;
  101. IOs.DI["IO.DI_EFEMPowerON"].Value = true;
  102. IOs.DI["IO.DI_PreAlignerEnableToRobot"].Value = true;
  103. IOs.DI["IO.DI_RobotEMSToEFEM"].Value = true;
  104. IOs.DI["IO.DI_RBNotExtendToPMA"].Value = true;
  105. IOs.DI["IO.DI_RBNotExtendToPMB"].Value = true;
  106. IOs.DI["IO.DI_RBNotExtendToLP1"].Value = true;
  107. IOs.DI["IO.DI_RBNotExtendToLP2"].Value = true;
  108. IOs.DI["IO.DI_RBNotExtendToLP2"].Value = true;
  109. IOs.DI["IO.DI_RBNotExtendPreAligner"].Value = true;
  110. IOs.DI["IO.DI_RBNotExtendFlipper"].Value = true;
  111. IOs.DI["IO.DI_LP1OperationStatus"].Value = true;
  112. IOs.DI["IO.DI_LP2OperationStatus"].Value = true;
  113. IOs.DI["IO.DI_LP1Ready"].Value = true;
  114. }
  115. /// <summary>
  116. /// 设置DI值
  117. /// </summary>
  118. private void SetDIValue(string ioName, bool value)
  119. {
  120. IOs.DI[$"IO.{ioName}"].Value = value;
  121. }
  122. /// <summary>
  123. /// 设置DO值
  124. /// </summary>
  125. private void SetDOValue(string ioName, bool value)
  126. {
  127. IOs.DO[$"IO.{ioName}"].Value = value;
  128. }
  129. }
  130. }