RobotWork.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using DBHelper;
  2. using System;
  3. using System.Linq;
  4. using WCS.Core;
  5. using WCS.Entity;
  6. using WCS.Entity.Protocol;
  7. namespace WCS.Service.Works.Robots
  8. {
  9. [WorkTitle(typeof(ProductHandler), "机器人")]
  10. public class RobotWork : DeviceWork<Device<IRobot>>
  11. {
  12. private Device<IStation521, IStation520> C2153;
  13. public RobotWork()
  14. {
  15. C2153 = Device.Find("2153").Device<IStation521, IStation520>();
  16. }
  17. protected override bool SelectDevice(WCS_DEVICE dev)
  18. {
  19. return true;
  20. }
  21. protected override void Do(Device<IRobot> dev)
  22. {
  23. //dev.Data.Trigger = 0;
  24. //dev.Data.TaskID = 0;
  25. //dev.Data.Target = 0;
  26. if (Ltc.Do(dev, v => v.Data.Trigger != 0))
  27. {
  28. return;
  29. }
  30. if (Ltc.Do(dev, v => v.Data.FinishedTask != 0))
  31. {
  32. var fTaskId = dev.Data.FinishedTask;
  33. var fTarget = dev.Entity.ROUTES.Where(v => v.NEXT.ProductLine() == dev.Data.Target).Select(v => v.NEXT.Device<IStation521>()).FirstOrDefault();
  34. if (fTarget == null)
  35. {
  36. var msg = "目标位置" + dev.Data.Target + "有误";
  37. throw new Exception(msg);
  38. }
  39. DB.Do(db =>
  40. {
  41. var task = db.Default.Set<WCS_TASK>().Find(fTaskId);
  42. if (task == null)
  43. throw new Exception("已完成任务号" + fTaskId + "不存在");
  44. var taskPallet = db.Default.Set<WCS_TASK>().Find(fTarget.Data.TASKNUM);
  45. if (taskPallet == null)
  46. throw new Exception("空托盘任务号" + fTarget.Data.TASKNUM + "不存在");
  47. var container = taskPallet.BARCODE;
  48. task.STATUS = WCS.Entity.TaskStatus.已完成;
  49. task.ENDTIME = DateTime.Now;
  50. task.UPDATETIME = DateTime.Now;
  51. task.UPDATEUSER = "WCS";
  52. task.GROUPTASK = taskPallet.ID;
  53. //task.ADDRCURRENT = fTarget.Entity.CODE;
  54. db.Default.SaveChanges();
  55. var res = WMS.AutoBuildUpGroupStock(container, task.BARCODE, dev.Entity.CODE);
  56. if (Ltc.Do(res, v => v.ResType == false))
  57. throw new Exception(res.ResMessage);
  58. dev.Data.FinishedTask = 0;
  59. });
  60. return;
  61. }
  62. //if (Ltc.Do(dev, v => v.Data.Mode != RobotMode.自动))
  63. // return;
  64. if (Ltc.Do(dev, v => v.Data.Status != RobotStatus.空闲))
  65. return;
  66. if (Ltc.Do(C2153, C2153 => C2153.Data.TASKNUM == 0))
  67. return;
  68. if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSEND == 2153))
  69. return;
  70. if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSEND == 0))
  71. return;
  72. if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSCODE == 0))
  73. return;
  74. if (Ltc.Do(C2153, C2153 => C2153.Data.PH_STATUS == false))
  75. {
  76. throw new Exception("有任务但无光电信号");
  77. }
  78. var workShop = C2153.Data.GOODSEND;
  79. var target = dev.Entity.ROUTES.Where(v => v.NEXT.ProductLine() == workShop).Select(v => v.NEXT.Device<IStation521, IStation520, IRobotStation>()).FirstOrDefault();
  80. if (target == null)
  81. throw new Exception("机器人目标位置" + workShop + "不存在");
  82. if (Ltc.Do(target, target => target.Data.PH_STATUS == false))
  83. throw new Exception($"目标位置[{target}]无光电信号");
  84. if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSCODE != C2153.Data.GOODSCODE))
  85. throw new Exception($"目标位置{target}单号不符");
  86. if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != C2153.Data.GOODSTYPE))
  87. return;
  88. if (Ltc.Do(target, target => target.Data3.MaxQty == 0 || target.Data3.PalletType == 0))
  89. return;
  90. if (Ltc.Do(target, target => target.Data3.Qty >= target.Data.GOODSSIZE))
  91. return;
  92. DB.Do(db =>
  93. {
  94. var taskid = C2153.Data.TASKNUM;
  95. var task = db.Default.Set<WCS_TASK>().Find(taskid);
  96. if (task == null)
  97. return;
  98. //task.ADDRCURRENT = dev.Entity.CODE;
  99. db.Default.SaveChanges();
  100. dev.Data.TaskID = taskid;
  101. dev.Data.Target = workShop;
  102. dev.Data.Trigger = 1;
  103. });
  104. }
  105. }
  106. }