22车间.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. using DBHelper;
  2. using System;
  3. using System.Linq;
  4. using WCS.Core;
  5. using WCS.Entity;
  6. using WCS.Entity.Protocol;
  7. using WCS.Service.Helpers;
  8. namespace WCS.Service.Works.Stations
  9. {
  10. [WorkTitle(typeof(ProductHandler), "_22车间入库", true)]
  11. public class _22车间入库 : DeviceWork<Device<IStation521, IStation520>>
  12. {
  13. protected override void Do(Device<IStation521, IStation520> dev)
  14. {
  15. if (!SystemConfigHelpers.GetDeviceConfig(dev.Entity.CODE)) throw new Exception($"已禁止[{dev.Entity.CODE}]入库,请联系机修确认");
  16. if (Ltc.Do(dev, v => v.Data2.CONFIRM == true)) throw new Exception($"设备[{dev.Entity.CODE}]确认信号未清除,请检查PLC中上一个任务是否完成状态异常");
  17. if (Ltc.Do(dev, v => !v.Data.REQUEST)) return;
  18. var bcr = dev.Entity.BCR();
  19. var barcode = bcr.CONTENT.Trim('\r');
  20. if (barcode == "") throw new Exception($"[{dev.Entity.CODE}]扫码失败");
  21. var addr = 3013;
  22. var next = dev.Entity.GetNext(addr.ToString());
  23. if (next == null) throw new Exception($"缺少[{dev.Entity.CODE}]-[{addr}]路径信息,请检查路径配置");
  24. var station = dev.Entity.CODE;
  25. short outTemp = 0, inTemp = 0;
  26. bool flag = false;
  27. Device<IStation521, IStation520>[] arr = null;
  28. string trafficControl = "";
  29. outTemp = 3001;
  30. inTemp = 3006;
  31. trafficControl = "3012-3060-3005-3004";
  32. arr = Device.Find("3012", "3060", "3005", "3004").Select(v => v.Device<IStation521, IStation520>()).ToArray();
  33. var rgv = Device.Find("RGV8").Device<IRGV521, IRGV520>();
  34. if (rgv.Data2.Trigger != 0) throw new Exception("RGV8任务触发中");
  35. if (rgv.Data.DestPosition == 3060 && rgv.Data.SystemStatus != RGVRunStatus.空闲) flag = true;
  36. if (arr.Any(v => v.Data2.CONFIRM)) throw new Exception($"设备集[{trafficControl}]存在确认信号,请检查是否为异常状况");
  37. flag = arr.Where(v => v.Data.GOODSEND == outTemp).Any() || flag;
  38. var nextcode = next.Code();
  39. if (flag) nextcode = inTemp;
  40. DB.Do(db =>
  41. {
  42. var flag = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库).Where(v => v.Station == station)
  43. .Where(v => (v.Status == AGVTaskStatus.完成)).Any();
  44. if (!flag && !dev.Data.RES1) throw new Exception($"[{dev.Entity.CODE}]已扫码等待AGV交互完成");
  45. var arr = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库 && v.Status == AGVTaskStatus.完成)
  46. .Where(v => v.Station == station).ToArray();
  47. foreach (var t in arr)
  48. {
  49. t.Status = AGVTaskStatus.完成扫码;
  50. t.UpdateTime = DateTime.Now;
  51. }
  52. db.Default.SaveChanges();
  53. var info = WMS.InBound(barcode, dev.Entity.CODE);
  54. var task = new WCS_TASK();
  55. task.BARCODE = info.ContainerCode;
  56. task.WMSTASK = int.Parse(info.WMSTaskNum);
  57. task.TYPE = TaskType.入库;
  58. task.STATUS = WCS.Entity.TaskStatus.执行中;
  59. task.ADDRFROM = dev.Entity.CODE;
  60. task.ADDRTO = addr.ToString();
  61. task.STARTTIME = DateTime.Now;
  62. task.UPDATEUSER = "WCS";
  63. task.UPDATETIME = DateTime.Now;
  64. task.FLOOR = 2;
  65. task.HEIGHT = dev.Data.HEIGHT;
  66. task.ADDRNEXT = nextcode.ToString();
  67. db.Default.Set<WCS_TASK>().Add(task);
  68. db.Default.SaveChanges();
  69. dev.Data2.TASKNUM = task.ID;
  70. dev.Data2.GOODSEND = nextcode;
  71. dev.Data2.CONFIRM = true;
  72. });
  73. }
  74. protected override bool SelectDevice(WCS_DEVICE dev)
  75. {
  76. return new string[] { "3001" }.Contains(dev.CODE);
  77. }
  78. }
  79. [WorkTitle(typeof(ProductHandler), "_22车间入库缓存", true)]
  80. public class _22车间入库缓存 : DeviceWork<Device<IStation521, IStation520>>
  81. {
  82. protected override void Do(Device<IStation521, IStation520> dev)
  83. {
  84. if (Ltc.Do(dev, v => v.Data2.CONFIRM == true))
  85. {
  86. return;
  87. }
  88. if (Ltc.Do(dev, v => v.Data.TASKNUM == 0))
  89. return;
  90. if (Ltc.Do(dev, v => v.Data.PH_STATUS == false))
  91. return;
  92. short inTemp = 0, outTemp = 0;
  93. short addrTo = 0;
  94. Device<IStation521, IStation520>[] arr = null;
  95. outTemp = 3001;
  96. inTemp = 3006;
  97. addrTo = 3001;
  98. arr = Device.Find("3060", "3005", "3004", "3001", "3012").Select(v => v.Device<IStation521, IStation520>()).ToArray();
  99. var rgv = Device.Find("RGV8").Device<IRGV521, IRGV520>();
  100. if (rgv.Data2.Trigger != 0) throw new Exception("RGV8任务触发中");
  101. if (rgv.Data.DestPosition == 3060 && rgv.Data.SystemStatus != RGVRunStatus.空闲 && rgv.Data.PH_Status) throw new Exception("交通管制,RGV8正在出库");
  102. if (Ltc.Do(dev, v => v.Data.GOODSEND != inTemp))
  103. return;
  104. var inTempDev = Device.Find(inTemp.ToString()).Device<IStation521>();
  105. if (inTempDev.Data.TASKNUM < 10000)
  106. return;
  107. if (!inTempDev.Data.PH_STATUS)
  108. return;
  109. if (arr.Any(v => v.Data.TASKNUM > 10000 && v.Data.GOODSEND == 3001 ||v.Data.GOODSEND ==3060))
  110. return;
  111. if (arr.Any(v => v.Data2.CONFIRM))
  112. return;
  113. var toDev = Device.Find(addrTo.ToString()).Device<IStation521>();
  114. if (toDev.Data.PH_STATUS)
  115. {
  116. if (toDev.Data.TASKNUM < 10000)
  117. return;
  118. if (toDev.Data.GOODSEND != toDev.Entity.Code())
  119. return;
  120. }
  121. if (arr.Where(v => v.Data.GOODSEND == outTemp || v.Data.GOODSEND == addrTo).Any())
  122. throw new Exception("交通管制");
  123. var station = dev.Entity.CODE;
  124. DB.Do(db =>
  125. {
  126. var taskAny = db.Default.Set<WCS_TASK>().Where(v => v.ADDRNEXT == "3060");
  127. if (taskAny != null)
  128. throw new Exception($"出库任务正在执行");
  129. var task = db.Default.Set<WCS_TASK>().Find(dev.Data.TASKNUM);
  130. if (task == null)
  131. throw new Exception($"任务号{dev.Data.TASKNUM}不存在");
  132. var next = Device.Find(addrTo.ToString()).GetNext(task.ADDRTO);
  133. task.ADDRNEXT = next.CODE;
  134. task.UPDATETIME = DateTime.Now;
  135. db.Default.SaveChanges();
  136. dev.Data2.TASKNUM = dev.Data.TASKNUM;
  137. dev.Data2.GOODSEND = next.Code();
  138. dev.Data2.CONFIRM = true;
  139. });
  140. }
  141. protected override bool SelectDevice(WCS_DEVICE dev)
  142. {
  143. return new string[] { "3006" }.Contains(dev.CODE);
  144. }
  145. }
  146. }