DummyDevice.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using Aitex.Core.Common;
  2. using MECF.Framework.Common.Equipment;
  3. using MECF.Framework.Common.IOCore;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace CyberX8_RT.Devices.EFEM
  11. {
  12. public class DummyDevice
  13. {
  14. #region 常量
  15. private const string CASSETE_200_PRESENT = "Cassete200Present";
  16. private const string CASSETE_150_PRESENT = "Cassete150Present";
  17. private const string CASSETE_100_PRESENT = "Cassete100Present";
  18. #endregion
  19. #region 内部变量
  20. private bool _cassete200Present = false;
  21. private bool _cassete150Present = false;
  22. private bool _cassete100Present = false;
  23. /// <summary>
  24. /// 变量是否初始化字典
  25. /// </summary>
  26. private Dictionary<string, bool> _variableInitializeDic = new Dictionary<string, bool>();
  27. /// <summary>
  28. ///
  29. /// </summary>
  30. private ModuleName _module;
  31. /// <summary>
  32. /// 尺寸
  33. /// </summary>
  34. private WaferSize _waferSize;
  35. /// <summary>
  36. /// 是否存在Cassete
  37. /// </summary>
  38. private bool _hasCassete;
  39. #endregion
  40. #region 属性
  41. /// <summary>
  42. /// 尺寸
  43. /// </summary>
  44. public WaferSize WaferSize { get { return _waferSize; } }
  45. /// <summary>
  46. /// 是否存在Cassete
  47. /// </summary>
  48. public bool HasCassette { get { return _hasCassete; } }
  49. #endregion
  50. /// <summary>
  51. /// 构造函数
  52. /// </summary>
  53. /// <param name="moduleName"></param>
  54. public DummyDevice(ModuleName moduleName)
  55. {
  56. _module = moduleName;
  57. SubscribeValueAction();
  58. }
  59. /// <summary>
  60. /// 订阅变量数值发生变化
  61. /// </summary>
  62. private void SubscribeValueAction()
  63. {
  64. BeckhoffIoSubscribeUpdateVariable(CASSETE_100_PRESENT);
  65. BeckhoffIoSubscribeUpdateVariable(CASSETE_150_PRESENT);
  66. BeckhoffIoSubscribeUpdateVariable(CASSETE_200_PRESENT);
  67. }
  68. /// <summary>
  69. /// 订阅IO变量
  70. /// </summary>
  71. /// <param name="variable"></param>
  72. private void BeckhoffIoSubscribeUpdateVariable(string variable)
  73. {
  74. _variableInitializeDic[variable] = false;
  75. IOModuleManager.Instance.SubscribeModuleVariable(_module.ToString(), variable, UpdateVariableValue);
  76. }
  77. /// 更新变量数值
  78. /// </summary>
  79. /// <param name="variable"></param>
  80. /// <param name="value"></param>
  81. private void UpdateVariableValue(string variable, object value)
  82. {
  83. bool cassete = (bool)value;
  84. if (variable == CASSETE_200_PRESENT)
  85. {
  86. _cassete200Present = cassete;
  87. if (cassete)
  88. {
  89. _waferSize = WaferSize.WS8;
  90. }
  91. }
  92. else if (variable == CASSETE_150_PRESENT)
  93. {
  94. _cassete150Present = cassete;
  95. if (cassete&&!_cassete200Present)
  96. {
  97. _waferSize = WaferSize.WS6;
  98. }
  99. }
  100. else if (variable == CASSETE_100_PRESENT)
  101. {
  102. _cassete100Present = cassete;
  103. if (cassete&&!_cassete200Present&&!_cassete150Present)
  104. {
  105. _waferSize = WaferSize.WS4;
  106. }
  107. }
  108. if (!_cassete100Present && !_cassete150Present && !_cassete200Present)
  109. {
  110. _hasCassete = false;
  111. }
  112. else
  113. {
  114. _hasCassete = true;
  115. }
  116. }
  117. }
  118. }