FortrendPLUS500.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using Aitex.Core.RT.DataCenter;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.RT.SCCore;
  4. using MECF.Framework.Common.Communications;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.RT.ModuleLibrary.Commons;
  7. using SecsGem.Core;
  8. using SecsGemSerial.Application;
  9. using SecsGemSerial.Core;
  10. using SecsGemSerial.Core.EnumData;
  11. using SecsGemSerial.Core.Model;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Data;
  15. using System.IO.Ports;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. namespace Venus_RT.Devices.SMIF
  20. {
  21. /// <summary>
  22. /// Fortrend PLUS 500
  23. /// Loader/Unloader
  24. /// 执行标准 E84
  25. /// </summary>
  26. public class FortrendPLUS500 : ISMIF
  27. {
  28. public enum StreamType
  29. {
  30. SMIFState = 1,
  31. SMIFControl = 2,
  32. LP = 3,
  33. TAG = 4,
  34. ALARM = 5,
  35. DVDATA = 6,
  36. COMMANDERROR = 9,
  37. RFIDCOMMAND = 18,
  38. SMARTTAG8400COMMAND = 100,
  39. }
  40. //private AsyncSerialPort _serialport;
  41. private string _portname;
  42. //connect status
  43. public bool IsConnected;
  44. //online status
  45. public bool IsOnline;
  46. //Load
  47. public bool IsLoaded;
  48. //Lock
  49. public bool IsLocked;
  50. //Error
  51. public bool IsError;
  52. private SecsGemSerialApplication _serial = null;
  53. private ModuleName _smifbelong;
  54. /// <summary>
  55. /// 构造函数
  56. /// </summary>
  57. /// <param name="VCEName">从属的设备 如VCE1 LP1</param>
  58. public FortrendPLUS500(ModuleName VCEName)
  59. {
  60. _smifbelong = VCEName;
  61. _portname = SC.GetStringValue($"{VCEName}.SMIF.Port");
  62. SerialOptions serialOptions = new SerialOptions()
  63. {
  64. Port = _portname ?? "COM81",
  65. BaudRate = 9600,
  66. DataBits = 8,
  67. Parity = Parity.None,
  68. StopBits = StopBits.One,
  69. };
  70. SecsGemSerialOptions secsGemSerialOptions = new SecsGemSerialOptions()
  71. {
  72. DeviceId = 0
  73. };
  74. _serial = new SecsGemSerialApplication(VCEName.ToString(), serialOptions, secsGemSerialOptions);
  75. _serial.OnAlarm += _serial_OnAlarm;
  76. }
  77. private void _serial_OnAlarm(string alarm)
  78. {
  79. //Console.WriteLine(alarm);
  80. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"SMIF({_smifbelong}) received Alarm:{alarm}");
  81. }
  82. public void Initialize()
  83. {
  84. _serial.Initialize();
  85. _serial.RemoteControl(out string reason);
  86. }
  87. private void OnSMIFDataChanged(string oneLineMessage)
  88. {
  89. }
  90. public void Query()
  91. {
  92. SmifData smifdata = _serial.QueryAllSvids(out string reason);
  93. List<EnumSlot> mapdata = smifdata?.WaferMap;
  94. int? wafercount = smifdata?.WaferCount;
  95. E84Signals SmifIO = smifdata?.E84Signals;
  96. }
  97. public void Home()
  98. {
  99. if (!_serial.RemoteCommand(EnumRemoteCmd.HomeSmif, out string reason))
  100. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Home Command Failed for {reason}!Please Check SMIF({_smifbelong})");
  101. else
  102. LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send Home Command to SMIF({_smifbelong})");
  103. }
  104. public void Load()
  105. {
  106. if (!_serial.RemoteCommand(EnumRemoteCmd.StartLoadOpenCycle, out string reason))
  107. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Load Command Failed for {reason}!Please Check SMIF({_smifbelong})");
  108. else
  109. LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send Load Command to SMIF({_smifbelong})");
  110. }
  111. public void Unload()
  112. {
  113. if (!_serial.RemoteCommand(EnumRemoteCmd.StartUnloadCloseCycle, out string reason))
  114. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Unload Command Failed for {reason}!Please Check SMIF({_smifbelong})");
  115. else
  116. LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send UnLoad Command to SMIF({_smifbelong})");
  117. }
  118. public void Lock()
  119. {
  120. if (!_serial.RemoteCommand(EnumRemoteCmd.KeepPrtLocked, out string reason))
  121. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Lock Command Failed for {reason}!Please Check SMIF({_smifbelong})");
  122. else
  123. LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send Lock Command to SMIF({_smifbelong})");
  124. }
  125. public void Unlock()
  126. {
  127. if (!_serial.RemoteCommand(EnumRemoteCmd.UnlockPort, out string reason))
  128. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Unlock Command Failed for {reason}!Please Check SMIF({_smifbelong})");
  129. else
  130. LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send UnLock Command to SMIF({_smifbelong})");
  131. }
  132. public void Reset()
  133. {
  134. if (!_serial.RemoteCommand(EnumRemoteCmd.HomeSmif, out string reason))
  135. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Unlock Command Failed for {reason}!Please Check SMIF({_smifbelong})");
  136. else
  137. LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send UnLock Command to SMIF({_smifbelong})");
  138. }
  139. /// <summary>
  140. /// 中断SMIF正在执行的操作
  141. /// </summary>
  142. public void Abort()
  143. {
  144. }
  145. }
  146. }