DeviceManager.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Text.RegularExpressions;
  6. using System.Xml;
  7. using Aitex.Common.Util;
  8. using Aitex.Core.Backend;
  9. using Aitex.Core.RT.DataCenter;
  10. using Aitex.Core.RT.Device;
  11. using Aitex.Core.RT.Device.Unit;
  12. using Aitex.Core.RT.Event;
  13. using Aitex.Core.RT.IOCore;
  14. using Aitex.Core.RT.Log;
  15. using Aitex.Core.RT.OperationCenter;
  16. using Aitex.Core.RT.SCCore;
  17. using Aitex.Core.Util;
  18. using Aitex.Sorter.Common;
  19. using EFEM.RT.Devices.LoadPorts.Fortrend;
  20. using EFEM.RT.Devices.LoadPorts.JetOpenCst;
  21. using EFEM.RT.Devices.LoadPorts.SmartTagReader;
  22. using EFEM.RT.Devices.Rorze751;
  23. using MECF.Framework.Common.Equipment;
  24. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.BufferStations;
  25. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.CarrierIdReaders.CarrierIDReaderBase;
  26. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.CarrierIdReaders.OmronBarcode;
  27. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.CarrierIdReaders.OmronRFID;
  28. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.CarrierIdReaders.OmronV640;
  29. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.FFUs.AAF;
  30. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  31. //using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.Fortrend;
  32. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.LoadPortBase;
  33. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.SMIF;
  34. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.TDK;
  35. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.OcrReaders;
  36. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
  37. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.JEL;
  38. //using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.Rorze;
  39. using SorterCommon;
  40. namespace EFEM.RT.Devices
  41. {
  42. internal class DeviceEntity : DeviceEntityT<DeviceManager>
  43. {
  44. }
  45. public class DeviceManager : DeviceManagerBase
  46. {
  47. private static readonly int LoadPortQuantity = DeviceDefineManager.Instance.GetValue<int>("LoadPortQuantity") ?? 0;
  48. private static readonly int LoadLockQuantity = DeviceDefineManager.Instance.GetValue<int>("LoadLockQuantity") ?? 0;
  49. private static readonly int BufferQuantity = DeviceDefineManager.Instance.GetValue<int>("BufferQuantity") ?? 0;
  50. private static readonly int LoadLockSlot = DeviceDefineManager.Instance.GetValue<int>("LoadLockSlot") ?? 0;
  51. private static readonly int BufferSlot = DeviceDefineManager.Instance.GetValue<int>("BufferSlot") ?? 0;
  52. private static readonly bool LoadLockDoorControlByStation = DeviceDefineManager.Instance.GetValue<bool>("LLDoorControlByStation") ?? false;
  53. private static readonly bool DmcCardUsed = DeviceDefineManager.Instance.GetValue<bool>("DmcCardInstalled") ?? false;
  54. private static readonly bool DisableSignalTower = DeviceDefineManager.Instance.GetValue<bool>("DisableSignalTower") ?? false;
  55. public string[] CarrierIdReader => _carrierIdReader.Take(LoadPortQuantity).ToArray();
  56. private readonly string[] _carrierIdReader =
  57. {
  58. "CarrierIdReader",
  59. "CarrierIdReader",
  60. "CarrierIdReader",
  61. "CarrierIdReader",
  62. "CarrierIdReader",
  63. "CarrierIdReader",
  64. "CarrierIdReader",
  65. "CarrierIdReader",
  66. "CarrierIdReader",
  67. "CarrierIdReader"
  68. };
  69. public string[] CarrierRfidReader => _carrierRfidReader.Take(LoadPortQuantity).ToArray();
  70. private readonly string[] _carrierRfidReader =
  71. {
  72. "RFID",
  73. "RFID",
  74. "RFID",
  75. "RFID",
  76. "RFID",
  77. "RFID",
  78. "RFID",
  79. "RFID",
  80. "RFID",
  81. "RFID"
  82. };
  83. public string[] BarcodeIdReaderName => _barcodeIdReaderName.Take(LoadPortQuantity).ToArray();
  84. private readonly string[] _barcodeIdReaderName = new[]
  85. {
  86. "BarcodeReaderA",
  87. "BarcodeReaderB",
  88. "BarcodeReaderC",
  89. "BarcodeReaderD",
  90. "BarcodeReaderE",
  91. "BarcodeReaderF",
  92. "BarcodeReaderG",
  93. "BarcodeReaderH",
  94. "BarcodeReaderI",
  95. "BarcodeReaderJ",
  96. "BarcodeReaderK",
  97. };
  98. public string[] BufferNames => _bufferNames.Take(BufferQuantity).ToArray();
  99. private readonly string[] _bufferNames =
  100. {
  101. DeviceName.Buffer1,
  102. DeviceName.Buffer2,
  103. DeviceName.Buffer3,
  104. DeviceName.Buffer4,
  105. DeviceName.Buffer5
  106. };
  107. public IEnumerable<ModuleName> LpNames => _lpNames.Take(LoadPortQuantity);
  108. private readonly ModuleName[] _lpNames =
  109. {
  110. ModuleName.LP1, ModuleName.LP2, ModuleName.LP3, ModuleName.LP4, ModuleName.LP5, ModuleName.LP6,
  111. ModuleName.LP7, ModuleName.LP8, ModuleName.LP9, ModuleName.LP10
  112. };
  113. private string[] CarrierIdReaderPortScName => _carrierIdReaderPortScName.Take(LoadPortQuantity).ToArray();
  114. private readonly string[] _carrierIdReaderPortScName =
  115. {
  116. SorterCommon.ScPathName.LoadPort_LoadPort1CarrierIdReaderPortName,
  117. SorterCommon.ScPathName.LoadPort_LoadPort2CarrierIdReaderPortName,
  118. SorterCommon.ScPathName.LoadPort_LoadPort3CarrierIdReaderPortName,
  119. SorterCommon.ScPathName.LoadPort_LoadPort4CarrierIdReaderPortName,
  120. SorterCommon.ScPathName.LoadPort_LoadPort5CarrierIdReaderPortName,
  121. SorterCommon.ScPathName.LoadPort_LoadPort6CarrierIdReaderPortName,
  122. SorterCommon.ScPathName.LoadPort_LoadPort7CarrierIdReaderPortName,
  123. SorterCommon.ScPathName.LoadPort_LoadPort8CarrierIdReaderPortName,
  124. SorterCommon.ScPathName.LoadPort_LoadPort9CarrierIdReaderPortName,
  125. SorterCommon.ScPathName.LoadPort_LoadPort10CarrierIdReaderPortName
  126. };
  127. private readonly string[] _rfidReaderAddress =
  128. {
  129. EFEMSC.ScPathName.LoadPort_LoadPort1CarrierIdReaderAddress,
  130. EFEMSC.ScPathName.LoadPort_LoadPort2CarrierIdReaderAddress,
  131. EFEMSC.ScPathName.LoadPort_LoadPort3CarrierIdReaderAddress,
  132. EFEMSC.ScPathName.LoadPort_LoadPort4CarrierIdReaderAddress,
  133. EFEMSC.ScPathName.LoadPort_LoadPort5CarrierIdReaderAddress,
  134. EFEMSC.ScPathName.LoadPort_LoadPort6CarrierIdReaderAddress,
  135. EFEMSC.ScPathName.LoadPort_LoadPort7CarrierIdReaderAddress,
  136. EFEMSC.ScPathName.LoadPort_LoadPort8CarrierIdReaderAddress,
  137. EFEMSC.ScPathName.LoadPort_LoadPort9CarrierIdReaderAddress,
  138. EFEMSC.ScPathName.LoadPort_LoadPort10CarrierIdReaderAddress
  139. };
  140. private readonly string[] _rfidReaderPages =
  141. {
  142. EFEMSC.ScPathName.LoadPort_LoadPort1CarrierIdReaderPage,
  143. EFEMSC.ScPathName.LoadPort_LoadPort2CarrierIdReaderPage,
  144. EFEMSC.ScPathName.LoadPort_LoadPort3CarrierIdReaderPage,
  145. EFEMSC.ScPathName.LoadPort_LoadPort4CarrierIdReaderPage,
  146. EFEMSC.ScPathName.LoadPort_LoadPort5CarrierIdReaderPage,
  147. EFEMSC.ScPathName.LoadPort_LoadPort6CarrierIdReaderPage,
  148. EFEMSC.ScPathName.LoadPort_LoadPort7CarrierIdReaderPage,
  149. EFEMSC.ScPathName.LoadPort_LoadPort8CarrierIdReaderPage,
  150. EFEMSC.ScPathName.LoadPort_LoadPort9CarrierIdReaderPage,
  151. EFEMSC.ScPathName.LoadPort_LoadPort10CarrierIdReaderPage
  152. };
  153. private readonly string[] _rfidNames =
  154. {
  155. DeviceName.RFIDReaderA,
  156. DeviceName.RFIDReaderB,
  157. DeviceName.RFIDReaderC,
  158. DeviceName.RFIDReaderD,
  159. DeviceName.RFIDReaderE,
  160. DeviceName.RFIDReaderF,
  161. DeviceName.RFIDReaderG,
  162. DeviceName.RFIDReaderH,
  163. DeviceName.RFIDReaderI,
  164. DeviceName.RFIDReaderJ
  165. };
  166. public string[] LpPortNameSc => _lpPortNameSc.Take(LoadPortQuantity).ToArray();
  167. private readonly string[] _lpPortNameSc =
  168. {
  169. EFEMSC.ScPathName.LoadPort_LoadPort1PortName,
  170. EFEMSC.ScPathName.LoadPort_LoadPort2PortName,
  171. EFEMSC.ScPathName.LoadPort_LoadPort3PortName,
  172. EFEMSC.ScPathName.LoadPort_LoadPort4PortName,
  173. EFEMSC.ScPathName.LoadPort_LoadPort5PortName,
  174. EFEMSC.ScPathName.LoadPort_LoadPort6PortName,
  175. EFEMSC.ScPathName.LoadPort_LoadPort7PortName,
  176. EFEMSC.ScPathName.LoadPort_LoadPort8PortName,
  177. EFEMSC.ScPathName.LoadPort_LoadPort9PortName,
  178. EFEMSC.ScPathName.LoadPort_LoadPort10PortName
  179. };
  180. public string[] LLNames => _llNames.Take(LoadLockQuantity).ToArray();
  181. private readonly string[] _llNames =
  182. {
  183. DeviceName.LL1,
  184. DeviceName.LL2,
  185. DeviceName.LL3,
  186. DeviceName.LL4,
  187. DeviceName.LL5,
  188. DeviceName.LL6,
  189. DeviceName.LL7,
  190. DeviceName.LL8
  191. };
  192. private char[] rfidInstallment;
  193. private char[] carrierIdInstallment;
  194. private char[] e84Support;
  195. public bool IsAnyLPIdle()
  196. {
  197. return LpNames.Any(moduleName => DEVICE.GetDevice<LoadPortBaseDevice>(moduleName.ToString()).IsIdle);
  198. }
  199. public ModuleName[] GetAllLoadPortName()
  200. {
  201. return LpNames as ModuleName[];
  202. }
  203. public LoadPortBaseDevice[] GetAllLoadPorts()
  204. {
  205. var lp = LpNames.Select(lpName => DEVICE.GetDevice<LoadPortBaseDevice>(lpName.ToString())).ToList();
  206. return lp.ToArray();
  207. }
  208. public CIDReaderBaseDevice GetGeneralBarcodeReader(string lp)
  209. {
  210. string pattern = "[1-9]\\d*";
  211. Regex rgx = new Regex(pattern);
  212. var match = int.Parse(rgx.Match(lp).ToString());
  213. if (match <= LoadPortQuantity)
  214. return DEVICE.GetDevice<CIDReaderBaseDevice>($"CarrierIDReader.{_barcodeIdReaderName[match - 1]}");
  215. return null;
  216. //var index = Array.IndexOf(LpNames.ToArray(), lp);
  217. //return DEVICE.GetDevice<GeneralBarcodeReader>(lp + "." + _barcodeIdReaderName[index]);
  218. }
  219. private OmronBarcodeReader GetBarcodeReader(string lp)
  220. {
  221. var index = Array.IndexOf(LpNames.ToArray(), lp);
  222. return DEVICE.GetDevice<OmronBarcodeReader>(lp + "." + _carrierIdReader[index]);
  223. }
  224. public OmronRfidReader GetRfidReader(string lp)
  225. {
  226. string pattern = "[1-9]\\d*";
  227. Regex rgx = new Regex(pattern);
  228. var match = int.Parse(rgx.Match(lp).ToString());
  229. if (match <= LoadPortQuantity)
  230. return DEVICE.GetDevice<OmronRfidReader>(_rfidNames[match - 1]);
  231. return null;
  232. }
  233. //Initialize should be call by main before fsm run
  234. public override bool Initialize()
  235. {
  236. var fi = typeof(DeviceModel).GetFields();
  237. foreach (var p in fi) p.SetValue(null, GetDevice(p.Name));
  238. IoSensor[] llDoorOpen =
  239. {
  240. DeviceModel.SensorPMASystemInterlock,
  241. DeviceModel.SensorPMBSystemInterlock,
  242. };
  243. IoSensor[] llArmExtendEnable =
  244. {
  245. DeviceModel.SensorRBNotExtendPMA,
  246. DeviceModel.SensorRBNotExtendPMB,
  247. };
  248. IoTrigger[] llSsfeytoPM =
  249. {
  250. DeviceModel.TrigSafetytoPMA,
  251. DeviceModel.TrigSafetytoPMB,
  252. };
  253. IoTrigger[] llArmNotExtendExtendPM =
  254. {
  255. DeviceModel.TrigRBNotExtendPMA,
  256. DeviceModel.TrigRBNotExtendPMB,
  257. };
  258. IoSensor[] lpPoadOpen =
  259. {
  260. DeviceModel.SensorSMIF1PODOPEN,
  261. DeviceModel.SensorSMIF2PODOPEN,
  262. };
  263. IoSensor[] robotExtendtoLP =
  264. {
  265. DeviceModel.SensorRBNotExtendSIMF1,
  266. DeviceModel.SensorRBNotExtendSIMF2,
  267. };
  268. IoSensor[] GirdSensor=
  269. {
  270. DeviceModel.SensorRBNotExtendSIMF1,
  271. DeviceModel.SensorRBNotExtendSIMF2,
  272. };
  273. IoTrigger[] SafeytoLP =
  274. {
  275. DeviceModel.TrigSafetytoPMA,
  276. DeviceModel.TrigSafetytoPMB,
  277. };
  278. IoSensor[][] LPSensorArry =
  279. {
  280. new IoSensor[]
  281. {
  282. DeviceModel.Sensor4InchCstPresence,
  283. DeviceModel.Sensor4InchCstProtrusion1,
  284. //DeviceModel.Sensor4InchCstProtrusion2,
  285. DeviceModel.Sensor6InchCstPresence,
  286. DeviceModel.Sensor6InchCstProtrusion1,
  287. // DeviceModel.Sensor4InchCstProtrusion2,
  288. DeviceModel.Sensor8InchCstPresence,
  289. DeviceModel.Sensor8InchCstProtrusion1,
  290. // DeviceModel.Sensor4InchCstProtrusion2,
  291. DeviceModel.SensorCstDoorClosed,
  292. DeviceModel.SensorRBNotExtendSIMF1,
  293. DeviceModel.SensorRobotRemotetoEFEM,
  294. },
  295. };
  296. var barcodeIdReaderName = new[]
  297. {
  298. "BarcodeReaderA",
  299. "BarcodeReaderB",
  300. "BarcodeReaderC",
  301. "BarcodeReaderD",
  302. "BarcodeReaderE",
  303. "BarcodeReaderF",
  304. "BarcodeReaderG",
  305. "BarcodeReaderH",
  306. "BarcodeReaderI",
  307. "BarcodeReaderJ",
  308. "BarcodeReaderK",
  309. };
  310. IoTrigger[][] LPTriggerArry =
  311. {
  312. new IoTrigger[]
  313. {
  314. DeviceModel.TrigSafetytoSMIF1,
  315. },
  316. };
  317. var robot = new RorzeRobot751(ModuleName.System.ToString(), DeviceName.Robot, "Robot", null, null);
  318. AddCustomDevice(robot, "Robot", robot.GetType());
  319. for (var i = 0; i < LoadPortQuantity; ++i)
  320. {
  321. if (!SC.GetValue<bool>($"LoadPort.LP{i + 1}.Disable"))
  322. {
  323. if (SC.GetValue<int>($"LoadPort.LP{i + 1}.CstType") == 0)
  324. {
  325. LoadPortBaseDevice lp = new FortrendSmifPort("", _lpNames[i].ToString(), "LoadPort", robot, robotExtendtoLP[i], lpPoadOpen[i]);
  326. AddCustomDevice(lp, "LoadPort", typeof(LoadPortBaseDevice));
  327. if(SC.GetValue<bool>($"LoadPort.LP{i + 1}.ExternalSmartTagReader"))
  328. {
  329. CIDReaderBaseDevice barcodeReader = new SmartTagReader("CarrierIDReader", barcodeIdReaderName[i], "CarrierID", lp);
  330. AddCustomDevice(barcodeReader, "BarcodeReader", typeof(CIDReaderBaseDevice));
  331. lp.CIDReaders = new CIDReaderBaseDevice[] { barcodeReader };
  332. }
  333. }
  334. else if (SC.GetValue<int>($"LoadPort.LP{i + 1}.CstType") == 1)
  335. {
  336. LoadPortBaseDevice lp = new OpenStageJet("", _lpNames[i].ToString(), LPSensorArry[i], LPTriggerArry[i], robot);
  337. AddCustomDevice(lp, "LoadPort", typeof(LoadPortBaseDevice));
  338. string readcommand = "LON\r";
  339. string stopcommand = "LOFF\r";
  340. CIDReaderBaseDevice barcodeReader = new GeneralBarcodeReader("CarrierIDReader", barcodeIdReaderName[i], "CarrierID", readcommand, true, lp, stopcommand);
  341. AddCustomDevice(barcodeReader, "BarcodeReader", typeof(CIDReaderBaseDevice));
  342. lp.CIDReaders = new CIDReaderBaseDevice[] { barcodeReader };
  343. }
  344. }
  345. }
  346. if (DeviceDefineManager.Instance.GetValue<bool>("FfuMemoBusControl") ?? false)
  347. {
  348. var comPort = SC.GetStringValue("System.FFUComPortName");
  349. var ffu1 = new Ffu("","FFU1", "01", comPort);
  350. AddCustomDevice(ffu1, "FFU", typeof(Ffu));
  351. var ffu2 = new Ffu("","FFU2", "02", comPort);
  352. AddCustomDevice(ffu2, "FFU", typeof(Ffu));
  353. }
  354. for (var i = 0; i < LoadLockQuantity; i++)
  355. {
  356. LoadLockDevice ll = new LoadLockDevice("System", _llNames[i], LoadLockSlot, llDoorOpen[i],
  357. llArmExtendEnable[i], llSsfeytoPM[i], llArmNotExtendExtendPM[i]);
  358. AddCustomDevice(ll, "LoadLockDevice", ll.GetType());
  359. }
  360. for (var i = 0; i < BufferQuantity; i++)
  361. {
  362. BufferStation buffer = new Buffer("System", _bufferNames[i],26,llDoorOpen[i]);
  363. AddCustomDevice(buffer, "BufferStation", buffer.GetType());
  364. }
  365. if (DisableSignalTower)
  366. {
  367. DeviceModel.SignalTower.CustomSignalTower(PathManager.GetCfgDir() + "\\SignalTower.xml");
  368. }
  369. AddCustomDevice(new EquipmentMonitor(), "EquipmentMonitor", typeof(EquipmentMonitor));
  370. foreach (var nodeModelChild in DeviceModelNodes.ChildNodes)
  371. {
  372. XmlElement nodeDevices = nodeModelChild as XmlElement;
  373. }
  374. var SorterFFU = new FfuAAF("FFU", "FFU", "System",1);
  375. SorterFFU.Initialize();
  376. OP.Subscribe(OperationName.ResetDevice, InvokeResetDevice);
  377. OP.Subscribe(OperationName.DeviceOperation, InvokeDeviceOperation);
  378. OP.Subscribe(OperationName.SetManualScanCode, InvokeSetManualScanCode);
  379. OP.Subscribe(OperationName.Scan, InvokeScan);
  380. OP.Subscribe(OperationName.Write, InvokeWrite);
  381. OP.Subscribe("ReadCarrierId", InvokeScan);
  382. OP.Subscribe(OperationName.ReadFoupRFID, InvokeReadRfid);
  383. OP.Subscribe(OperationName.WriteFoupRFID, InvokeWriteRfid);
  384. robot.OnSlotMapRead += Robot_OnSlotMapRead;
  385. return true;
  386. }
  387. private bool InvokeWrite(string arg1, object[] args)
  388. {
  389. if (!(GetRfidReader(args[0].ToString()).Write(args[1].ToString(),out string reason)))
  390. {
  391. EV.PostWarningLog(args[0].ToString(),$"fail to write RFID, {reason}");
  392. return false;
  393. }
  394. return true;
  395. }
  396. private bool InvokeWriteRfid(string arg1, object[] arg2)
  397. {
  398. if (!GetRfidReader(arg2[0].ToString()).Write(arg2[1].ToString(), out var reason))
  399. {
  400. EV.PostWarningLog(arg1, $"fail to write RFID, {reason}");
  401. return false;
  402. }
  403. return true;
  404. }
  405. private bool InvokeReadRfid(string arg1, object[] arg2)
  406. {
  407. if (!GetRfidReader(arg2[0].ToString()).Read(out var reason))
  408. {
  409. EV.PostWarningLog(arg1, $"fail to read RFID, {reason}");
  410. return false;
  411. }
  412. return true;
  413. }
  414. private bool InvokeScan(string arg1, object[] args)
  415. {
  416. if (SC.GetValue<bool>($"LoadPort.{args[0].ToString()}.ExternalSmartTagReader") && SC.GetValue<int>($"LoadPort.{args[0].ToString()}.CstType")==0)
  417. {
  418. var lp = DEVICE.GetDevice<LoadPortBaseDevice>(args[0].ToString());
  419. return lp.ReadCarrierID();//lp.ReadCarrierID(
  420. }
  421. else
  422. {
  423. var lp = DEVICE.GetDevice<LoadPortBaseDevice>(args[0].ToString());
  424. return lp.ReadCarrierIDByIndex(new object[] { 0 });//lp.ReadCarrierID();
  425. }
  426. }
  427. private bool InvokeSetManualScanCode(string arg1, object[] args)
  428. {
  429. var lp = DEVICE.GetDevice<LoadPortBaseDevice>(args[0].ToString());
  430. lp.OnCarrierIdRead(args[1].ToString());
  431. return true;
  432. }
  433. private bool InvokeOffline(string arg1, object[] arg2)
  434. {
  435. return true;
  436. }
  437. private void Robot_OnSlotMapRead(ModuleName module, string slotMap)
  438. {
  439. if (ModuleHelper.IsLoadPort(module))
  440. {
  441. var lp = DEVICE.GetDevice<LoadPortBaseDevice>(module.ToString());
  442. if (lp != null) lp.OnSlotMapRead(slotMap);
  443. }
  444. if (ModuleHelper.IsBuffer(module))
  445. {
  446. var buffer = DEVICE.GetDevice<BufferStation>(module.ToString());
  447. if (buffer != null)
  448. buffer.OnSlotMapRead(slotMap);
  449. }
  450. }
  451. private bool InvokeDeviceOperation(string arg1, object[] args)
  452. {
  453. var name = "";
  454. var func = "";
  455. try
  456. {
  457. name = (string) args[0];
  458. func = (string) args[1];
  459. if ((bool) DATA.Poll(ModuleName.System.ToString(), ParamName.IsMaintenanceMode))
  460. {
  461. EV.PostMessage("System", EventEnum.DefaultWarning,
  462. string.Format("System in maintenance, can not execute {0}{1}", name, func));
  463. return false;
  464. }
  465. var param = new object[args.Length - 2];
  466. for (var i = 2; i < args.Length; i++)
  467. param[i - 2] = args[i].ToString();
  468. if (name == "SignalTower")
  469. {
  470. OP.DoOperation($"System.SignalTower.{func}");
  471. return true;
  472. }
  473. if (ModuleHelper.IsLoadPort(ModuleHelper.Converter(name)))
  474. {
  475. OP.DoOperation($"{name}.{func}", param);
  476. }
  477. else
  478. {
  479. DeviceCmd(name, func, param);
  480. }
  481. }
  482. catch (Exception ex)
  483. {
  484. LOG.Write(ex);
  485. EV.PostMessage("System", EventEnum.DefaultWarning,
  486. string.Format("Invalid parameters, can not execute {0}{1}", name, func));
  487. return false;
  488. }
  489. return true;
  490. }
  491. private bool InvokeResetDevice(string arg1, object[] arg2)
  492. {
  493. Singleton<DeviceEntity>.Instance.PostMsg(DeviceEntityT<DeviceManager>.MSG.RESET);
  494. return true;
  495. }
  496. private void DeviceCmd(string name, string cmd, params object[] args)
  497. {
  498. DEVICE.Do(string.Format("{0}.{1}", name, cmd), 0, true, args);
  499. }
  500. }
  501. }