|
|
@@ -65,41 +65,7 @@ namespace WCS.Service.Works.SRM
|
|
|
if (srmDevice.Data2.SRMMode != SCMode.远程) return;
|
|
|
if (srmDevice.Data2.SRMStatus != SCRunStatus.空闲) return;
|
|
|
|
|
|
- ////检查标记好的出库任务,并将出库任务下达至堆垛机
|
|
|
- DB.Do(db =>
|
|
|
- {
|
|
|
- //找到两个任务
|
|
|
- var taksLsit = db.Default.Set<WCS_TASK>().Where(v =>
|
|
|
- v.ID == srmDevice.Data.TaskID_1 ||
|
|
|
- v.ID == srmDevice.Data.TaskID_2 && v.STATUS == TaskStatus.堆垛机执行).ToList();
|
|
|
- var itemList = taksLsit.Select(v => v.Create<Task>()).OrderBy(v => v.Col).ToArray();
|
|
|
-
|
|
|
- if (!taksLsit.Any()) return;
|
|
|
- {
|
|
|
- for (var i = 0; i < itemList.Length; i++)
|
|
|
- {
|
|
|
- var item = itemList[i];
|
|
|
- item.SRMSTATION = taksLsit.FirstOrDefault(v => v.ID == item.ID)!.SRMSTATION;
|
|
|
-
|
|
|
- var fork = srmDevice.GetFork(item, i);
|
|
|
-
|
|
|
- switch (fork)
|
|
|
- {
|
|
|
- // 列数较小的放一工位
|
|
|
- case SrmFork.货叉1:
|
|
|
- obj.WriteTask1(item, (short)itemList.Length);
|
|
|
- break;
|
|
|
- //列数较大的放二工位
|
|
|
- case SrmFork.货叉2:
|
|
|
- obj.WriteTask2(item, (short)itemList.Length);
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- throw new ArgumentOutOfRangeException();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
+
|
|
|
|
|
|
var isTransfer = new List<WCS_TASK>(); //是否有移库任务
|
|
|
WCS_TASK enterPriority = new(), outPriority = new(); //出入库优先级任务
|
|
|
@@ -289,8 +255,6 @@ namespace WCS.Service.Works.SRM
|
|
|
srmDevice.Entity.Set("LastOutFloor", floor);
|
|
|
if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
|
|
|
|
|
|
- if (obj.Data.TaskID_1 != 0 || obj.Data.TaskID_2 != 0) return;
|
|
|
-
|
|
|
//获取当前堆垛机所有的放货点
|
|
|
var list = srmDevice.GetDeliveryPoint();
|
|
|
|
|
|
@@ -331,8 +295,7 @@ namespace WCS.Service.Works.SRM
|
|
|
foreach (var stationDevice in devise)
|
|
|
{
|
|
|
//放货点是否有货
|
|
|
- if (stationDevice.Data.VoucherNo != stationDevice.Data2.VoucherNo) res = false;
|
|
|
- else if (stationDevice.Data3.Status.HasFlag(StationStatus.运行状态位)) res = false;
|
|
|
+ if (stationDevice.Data3.Status.HasFlag(StationStatus.运行状态位)) res = false;
|
|
|
else if (stationDevice.Data2.Status.HasFlag(IstationStatus.光电状态)) res = false;
|
|
|
else if (stationDevice.Data2.Request == IstationRequest.堆垛机放货完成请求目标地址) res = false;
|
|
|
else if (stationDevice.Data2.Tasknum > 10000) res = false;
|
|
|
@@ -347,7 +310,7 @@ namespace WCS.Service.Works.SRM
|
|
|
|
|
|
//堆垛机设备
|
|
|
var srm = srmDevice.Entity.CODE;
|
|
|
-
|
|
|
+ var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
//堆垛机当前是否有正在执行的任务
|
|
|
@@ -402,8 +365,6 @@ namespace WCS.Service.Works.SRM
|
|
|
|
|
|
#endregion 校验两个产品是否为同规格
|
|
|
|
|
|
- var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
|
|
|
-
|
|
|
for (var i = 0; i < tasks.Length; i++)
|
|
|
{
|
|
|
var item = tasks[i];
|
|
|
@@ -425,6 +386,7 @@ namespace WCS.Service.Works.SRM
|
|
|
var msg = "";
|
|
|
msg = fork == SrmFork.货叉1 ? $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_1}-{srmDevice.Data.SCol_1}-{srmDevice.Data.SLayer_1}][{srmDevice.Data.ELine_1}][{srmDevice.Data.VoucherNo_1}]" : $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_2}-{srmDevice.Data.SCol_2}-{srmDevice.Data.SLayer_2}][{srmDevice.Data.ELine_2}][{srmDevice.Data.VoucherNo_2}]";
|
|
|
task.CreateStatusLog(db, msg, this.GetType());
|
|
|
+ item.SRMSTATION = task.SRMSTATION;
|
|
|
finishTaskList.Add(new FinishTaskList<SrmFork, Task>(fork, item));
|
|
|
}
|
|
|
|
|
|
@@ -450,6 +412,30 @@ namespace WCS.Service.Works.SRM
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ ////检查标记好的出库任务,并将出库任务下达至堆垛机
|
|
|
+ DB.Do(db =>
|
|
|
+ {
|
|
|
+ //此处只做标记,表示当前事务已经提交
|
|
|
+ foreach (var finish in finishTaskList)
|
|
|
+ {
|
|
|
+ var task = db.Default.Set<WCS_TASK>().Find(finish.Station.ID).Create<Task>();
|
|
|
+ switch (finish.FinishCode)
|
|
|
+ {
|
|
|
+ // 列数较小的放一工位
|
|
|
+ case SrmFork.货叉1:
|
|
|
+ obj.WriteTask1(task, (short)finishTaskList.Count);
|
|
|
+ break;
|
|
|
+ //列数较大的放二工位
|
|
|
+ case SrmFork.货叉2:
|
|
|
+ obj.WriteTask2(task, (short)finishTaskList.Count);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
#endregion 出库
|
|
|
}
|
|
|
});
|
|
|
@@ -460,4 +446,4 @@ namespace WCS.Service.Works.SRM
|
|
|
return dev.Is(DF.SRM);
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+}
|