DeviceManager.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. using Aitex.Core.Common;
  2. using Aitex.Core.RT.Device;
  3. using MECF.Framework.Common.Beckhoff.IOAxis;
  4. using MECF.Framework.Common.Device.Galil;
  5. using MECF.Framework.Common.Device.LinMot;
  6. using MECF.Framework.Common.Equipment;
  7. using MECF.Framework.Common.ToolLayout;
  8. using MECF.Framework.Common.TwinCat;
  9. using MECF.Framework.RT.Core.Equipments;
  10. using PunkHPX8_Core;
  11. using PunkHPX8_RT.Devices;
  12. using PunkHPX8_RT.Devices.AXIS;
  13. using PunkHPX8_RT.Devices.EFEM;
  14. using PunkHPX8_RT.Devices.Facilities;
  15. using PunkHPX8_RT.Devices.LinMot;
  16. using PunkHPX8_RT.Devices.PlatingCell;
  17. using PunkHPX8_RT.Devices.PowerSupplier;
  18. using PunkHPX8_RT.Devices.Reservoir;
  19. using PunkHPX8_RT.Devices.Resistivity;
  20. using PunkHPX8_RT.Devices.Safety;
  21. using PunkHPX8_RT.Devices.SignalLight;
  22. using PunkHPX8_RT.Devices.SRD;
  23. using PunkHPX8_RT.Devices.Temperature;
  24. using PunkHPX8_RT.Devices.VpwCell;
  25. using PunkHPX8_RT.Devices.VpwMain;
  26. using PunkHPX8_RT.Modules;
  27. using SecsGem.Core.ItemModel;
  28. using System;
  29. using System.Collections.Generic;
  30. using System.IO;
  31. using System.Reflection;
  32. using System.Threading;
  33. using System.Windows.Media.Imaging;
  34. namespace PunkHPX8_RT.Instances
  35. {
  36. public class DeviceEntity : DeviceEntityT<DeviceManager>
  37. {
  38. public DeviceEntity()
  39. {
  40. }
  41. }
  42. public class DeviceManager : DeviceManagerBase
  43. {
  44. #region 常量
  45. #endregion
  46. /// <summary>
  47. /// 初始化
  48. /// </summary>
  49. /// <returns></returns>
  50. public override bool Initialize()
  51. {
  52. SystemFacilities systemFacilities = new SystemFacilities();
  53. AddCustomModuleDevice(systemFacilities);
  54. SafetyDevice safetyDevice = new SafetyDevice();
  55. AddCustomDevice(safetyDevice);
  56. TotalSRDDevice totalSRDDevice = new TotalSRDDevice();
  57. AddCustomDevice(totalSRDDevice);
  58. if (ModuleHelper.IsInstalled(ModuleName.SRD1))
  59. {
  60. InitialSRD(ModuleName.SRD1);
  61. }
  62. if(ModuleHelper.IsInstalled(ModuleName.SRD2))
  63. {
  64. InitialSRD(ModuleName.SRD2);
  65. }
  66. SRDDeviceTimer srdDeviceTimer = new SRDDeviceTimer();
  67. AddCustomDevice(srdDeviceTimer);
  68. InitResisitivity();
  69. InitializeTemperature();
  70. InitializePowerSuppliers();
  71. InitializeVpw();
  72. InitializeReservoir();
  73. InitializePlatingCells();
  74. InitializePlatingVerticals();
  75. TotalReservoirDevice totalReservoirDevice = new TotalReservoirDevice();
  76. AddCustomDevice(totalReservoirDevice);
  77. AddCustomModuleDevice(new SunWaySignalTower("System", "SignalTower"));
  78. return true;
  79. }
  80. /// <summary>
  81. /// 初始化SRD
  82. /// </summary>
  83. /// <param name="moduleName"></param>
  84. private void InitialSRD(ModuleName moduleName)
  85. {
  86. BeckhoffAxis rotationBeckhoffAxis = BeckhoffAxisManager.Instance.GetAxis($"{moduleName.ToString()}.Rotation");
  87. if (rotationBeckhoffAxis != null)
  88. {
  89. JetAxisBase rotationAxis = AxisManager.Instance.GetAxisInstance(rotationBeckhoffAxis.MotorType, moduleName.ToString(), "Rotation");
  90. AddCustomModuleDevice(rotationAxis);
  91. rotationAxis.InterLock = new SrdRotationAxisInterLock(rotationAxis);
  92. AxisManager.Instance.AddModuleAxis(moduleName.ToString(), rotationAxis);
  93. }
  94. SrdCommonDevice srdCommon = new SrdCommonDevice(moduleName.ToString());
  95. AddCustomModuleDevice(srdCommon);
  96. }
  97. /// <summary>
  98. /// 初始化VPW
  99. /// </summary>
  100. private void InitializeVpw()
  101. {
  102. foreach (string item in VpwMainItemManager.Instance.InstalledModules)
  103. {
  104. VpwMainDevice vpwMainDevice = new VpwMainDevice(item);
  105. AddCustomDevice(vpwMainDevice);
  106. }
  107. foreach(string item in VpwCellItemManager.Instance.InstalledModules)
  108. {
  109. BeckhoffAxis rotationBeckhoffAxis = BeckhoffAxisManager.Instance.GetAxis($"{item}.Rotation");
  110. if (rotationBeckhoffAxis != null)
  111. {
  112. JetAxisBase rotationAxis = AxisManager.Instance.GetAxisInstance(rotationBeckhoffAxis.MotorType, item.ToString(), "Rotation");
  113. AddCustomModuleDevice(rotationAxis);
  114. rotationAxis.InterLock = new VpwRotationAxisInterLock(rotationAxis);
  115. AxisManager.Instance.AddModuleAxis(item.ToString(), rotationAxis);
  116. }
  117. VpwCellDevice vpwCellDevice= new VpwCellDevice(item);
  118. AddCustomDevice(vpwCellDevice);
  119. }
  120. VpwDeviceTimer vpwDeviceTimer = new VpwDeviceTimer();
  121. AddCustomDevice(vpwDeviceTimer);
  122. }
  123. /// <summary>
  124. /// 初始化PlatingCell
  125. /// </summary>
  126. private void InitializePlatingCells()
  127. {
  128. foreach (string item in PlatingCellItemManager.Instance.InstalledModules)
  129. {
  130. PlatingCellItem platingCellItem = PlatingCellItemManager.Instance.GetPlatingCellItem(item);
  131. ModuleMatcherManager.Instance.InitialPlatingCellVerticalID(platingCellItem.ModuleName, platingCellItem.VerticalID);
  132. //初始化platingcell rotation轴
  133. BeckhoffAxis rotationBeckhoffAxis = BeckhoffAxisManager.Instance.GetAxis($"{item.ToString()}.Rotation");
  134. if (rotationBeckhoffAxis != null)
  135. {
  136. JetAxisBase rotationAxis = AxisManager.Instance.GetAxisInstance(rotationBeckhoffAxis.MotorType, item.ToString(), "Rotation");
  137. AddCustomModuleDevice(rotationAxis);
  138. AxisManager.Instance.AddModuleAxis(item.ToString(), rotationAxis);
  139. }
  140. if (platingCellItem.SubType == ReservoirType.DegasMembrance.ToString())
  141. {
  142. DMPlatingCellDevice platingCellDevice = new DMPlatingCellDevice(item);
  143. AddCustomDevice(platingCellDevice);
  144. }
  145. else if(platingCellItem.SubType == ReservoirType.HotStandard.ToString())
  146. {
  147. HSPlatingCellDevice platingCellDevice = new HSPlatingCellDevice(item);
  148. AddCustomDevice(platingCellDevice);
  149. }
  150. else
  151. {
  152. DIPlatingCellDevice platingCellDevice = new DIPlatingCellDevice(item);
  153. AddCustomDevice(platingCellDevice);
  154. }
  155. }
  156. }
  157. /// <summary>
  158. /// 初始化PlatingCell vertical
  159. /// </summary>
  160. private void InitializePlatingVerticals()
  161. {
  162. List<string> lst = ModuleMatcherManager.Instance.GetAllPlatingCellVertialList();
  163. foreach (string str in lst)
  164. {
  165. BeckhoffAxis verticalBeckhoffAxis1_2 = BeckhoffAxisManager.Instance.GetAxis($"{str}.Vertical");
  166. if (verticalBeckhoffAxis1_2 != null)
  167. {
  168. JetAxisBase verticalAxis = AxisManager.Instance.GetAxisInstance(verticalBeckhoffAxis1_2.MotorType, str, "Vertical");
  169. AddCustomModuleDevice(verticalAxis);
  170. AxisManager.Instance.AddModuleAxis(str, verticalAxis);
  171. }
  172. }
  173. }
  174. /// <summary>
  175. /// 初始化Reservoir
  176. /// </summary>
  177. private void InitializeReservoir()
  178. {
  179. foreach (string item in ReservoirItemManager.Instance.InstalledModules)
  180. {
  181. ReservoirItem reservoirItem = ReservoirItemManager.Instance.GetReservoirItem(item);
  182. if (reservoirItem.SubType == ReservoirType.DegasMembrance.ToString())
  183. {
  184. DMReservoirDevice reservoirDevice = new DMReservoirDevice(item);
  185. AddCustomDevice(reservoirDevice);
  186. }
  187. else if(reservoirItem.SubType == ReservoirType.HotStandard.ToString())
  188. {
  189. HSReservoirDevice reservoirDevice = new HSReservoirDevice(item);
  190. AddCustomDevice(reservoirDevice);
  191. }
  192. else
  193. {
  194. DIReservoirDevice reservoirDevice = new DIReservoirDevice(item);
  195. AddCustomDevice(reservoirDevice);
  196. }
  197. }
  198. }
  199. /// <summary>
  200. /// 初始化水阻计
  201. /// </summary>
  202. private void InitResisitivity()
  203. {
  204. foreach(string item in ResistivityProbeItemManager.Instance.InstalledModules)
  205. {
  206. ResistivityProbeItem resistivityItem = ResistivityProbeItemManager.Instance.GetResistivityProbeItem(item);
  207. for(int i=0;i<resistivityItem.Count;i++)
  208. {
  209. ResistivityController resistivityController = new ResistivityController($"{item}-{i + 1}");
  210. AddCustomDevice(resistivityController);
  211. }
  212. }
  213. }
  214. /// <summary>
  215. /// 初始化温度计
  216. /// </summary>
  217. private void InitializeTemperature()
  218. {
  219. foreach (string item in TemperatureItemManager.Instance.InstalledModules)
  220. {
  221. TemperatureItem temperatureItem = TemperatureItemManager.Instance.GetTemperatureItem(item);
  222. for (int i = 0; i < temperatureItem.Count; i++)
  223. {
  224. TemperatureController tempController = new TemperatureController($"{item}-{i + 1}");
  225. AddCustomDevice(tempController);
  226. }
  227. }
  228. }
  229. /// <summary>
  230. /// 初始化PowerSupplier
  231. /// </summary>
  232. private void InitializePowerSuppliers()
  233. {
  234. foreach(string item in PowerSupplierItemManager.Instance.InstalledModules)
  235. {
  236. PowerSupplierItem powerSupplierItem=PowerSupplierItemManager.Instance.GetPowerSupplierItem(item);
  237. for (int i = 0; i < powerSupplierItem.Count; i++)
  238. {
  239. CellPowerSupplier cellPowerSupplier = new CellPowerSupplier($"{item}-{i + 1}");
  240. AddCustomDevice(cellPowerSupplier);
  241. }
  242. }
  243. foreach(string item in CmmPowerItemManager.Instance.InstalledModules)
  244. {
  245. CmmPowerItem powerSupplierItem = CmmPowerItemManager.Instance.GetCmmPowerSupplierItem(item);
  246. for (int i = 0; i < powerSupplierItem.Count; i++)
  247. {
  248. CellPowerSupplier cellPowerSupplier = new CellPowerSupplier($"{item}-{i + 1}");
  249. AddCustomDevice(cellPowerSupplier);
  250. }
  251. }
  252. }
  253. private bool Invoke(string arg1, object[] args)
  254. {
  255. string name = (string)args[0];
  256. string func = (string)args[1];
  257. object[] param = new object[args.Length - 2];
  258. for (int i = 2; i < args.Length; i++)
  259. param[i - 2] = args[i].ToString();
  260. DEVICE.Do(string.Format("{0}.{1}", name, func), 0, true, param);
  261. return true;
  262. }
  263. }
  264. }