|
@@ -7,6 +7,8 @@ using WCS.Entity.Protocol.SRM;
|
|
|
using WCS.Entity.Protocol.Station;
|
|
|
using WCS.WorkEngineering.Extensions;
|
|
|
using WCS.WorkEngineering.Worlds;
|
|
|
+using WCS.WorkEngineering.Worlds.Logs;
|
|
|
+using KnownException = WCS.WorkEngineering.Worlds.Logs.KnownException;
|
|
|
|
|
|
namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
@@ -53,10 +55,10 @@ namespace WCS.WorkEngineering.Systems
|
|
|
public override void Do(Device<ISRM520, ISRM521, ISRM523> obj)
|
|
|
{
|
|
|
//判断堆垛机是否报警
|
|
|
- if (obj.Data2.Status.HasFlag(SrmStatus.Alarm)) throw new KnownException(obj.Data3.Alarm.ToString(), LogLevel.High);
|
|
|
+ if (obj.Data2.Status.HasFlag(SrmStatus.Alarm)) throw new KnownException(obj.Data3.Alarm.ToString(), LogLevelEnum.High);
|
|
|
|
|
|
//判断DB520 完成任务确认清除信号 是否为1
|
|
|
- if (obj.Data.OkAck == 1) throw new KnownException("任务完成确认信号未清除", LogLevel.Mid);
|
|
|
+ if (obj.Data.OkAck == 1) throw new KnownException("任务完成确认信号未清除", LogLevelEnum.Mid);
|
|
|
|
|
|
//判断完成任务号是否大于0
|
|
|
if (obj.Data2.TaskFinishiId > 0)
|
|
@@ -64,9 +66,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
Db.Do(db =>
|
|
|
{
|
|
|
//根据DB521任务号获取对应任务
|
|
|
- var task = db.Default.Queryable<WCS_TASK>().First(v => v.ID == obj.Data2.TaskFinishiId) ?? throw new KnownException($"未找到任务{obj.Data2.TaskFinishiId}", LogLevel.High);
|
|
|
+ var task = db.Default.Queryable<WCS_TASK>().First(v => v.ID == obj.Data2.TaskFinishiId) ?? throw new KnownException($"未找到任务{obj.Data2.TaskFinishiId}", LogLevelEnum.High);
|
|
|
if (task.STATUS != Entity.TaskStatus.StackerExecution)
|
|
|
- throw new KnownException($"任务{task.ID}状态是{task.STATUS.Description()}.堆垛机完成任务需要对应任务状态处于堆垛机执行中", LogLevel.High);
|
|
|
+ throw new KnownException($"任务{task.ID}状态是{task.STATUS.Description()}.堆垛机完成任务需要对应任务状态处于堆垛机执行中", LogLevelEnum.High);
|
|
|
//根据任务类型做不同的处理
|
|
|
switch (task.TYPE)
|
|
|
{
|
|
@@ -99,9 +101,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
}
|
|
|
|
|
|
//堆垛机是否可以下发任务
|
|
|
- if (obj.Data2.VoucherNo != obj.Data.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo},DB521:{obj.Data2.VoucherNo}", LogLevel.Mid);
|
|
|
- if (obj.Data2.AutoStatus != SrmAutoStatus.Automatic) throw new KnownException($"堆垛机处于{obj.Data2.AutoStatus}模式", LogLevel.Low);
|
|
|
- if (obj.Data2.RunStatus != SrmRunStatus.Idle) throw new KnownException($"堆垛机处于{obj.Data2.RunStatus}状态", LogLevel.High);
|
|
|
+ if (obj.Data2.VoucherNo != obj.Data.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo},DB521:{obj.Data2.VoucherNo}", LogLevelEnum.Mid);
|
|
|
+ if (obj.Data2.AutoStatus != SrmAutoStatus.Automatic) throw new KnownException($"堆垛机处于{obj.Data2.AutoStatus}模式", LogLevelEnum.Low);
|
|
|
+ if (obj.Data2.RunStatus != SrmRunStatus.Idle) throw new KnownException($"堆垛机处于{obj.Data2.RunStatus}状态", LogLevelEnum.High);
|
|
|
|
|
|
//默认没有移库任务
|
|
|
bool isTransfer = false;
|
|
@@ -115,7 +117,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//获取当前堆垛机的所有未完成任务
|
|
|
var tasks = db.Default.Queryable<WCS_TASK>().Where(v => v.STATUS < Entity.TaskStatus.Finish && (v.DEVICE == obj.Entity.Code));
|
|
|
//任务集合是否有处于堆垛机执行状态的任务
|
|
|
- if (tasks.Any(v => v.STATUS == Entity.TaskStatus.StackerExecution)) throw new KnownException($"有任务处于堆垛机执行状态", LogLevel.High);
|
|
|
+ if (tasks.Any(v => v.STATUS == Entity.TaskStatus.StackerExecution)) throw new KnownException($"有任务处于堆垛机执行状态", LogLevelEnum.High);
|
|
|
|
|
|
//判断是否存在调整优先级任务
|
|
|
if (!tasks.Any(v => v.TYPE != TaskType.TransferDepot && v.STATUS < Entity.TaskStatus.StackerExecution && v.Priority > 0))
|
|
@@ -148,7 +150,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//获取一条当前堆垛机优先级最高的新建移库任务
|
|
|
var task = db.Default.Queryable<WCS_TASK>().Where(v => v.DEVICE == obj.Entity.Code && v.TYPE == TaskType.TransferDepot && v.STATUS == Entity.TaskStatus.NewBuild)
|
|
|
.OrderByDescending(v => v.Priority)
|
|
|
- .First() ?? throw new KnownException("未找到移库任务", LogLevel.High);
|
|
|
+ .First() ?? throw new KnownException("未找到移库任务", LogLevelEnum.High);
|
|
|
//任务状态改为堆垛机执行中
|
|
|
task.STATUS = Entity.TaskStatus.StackerExecution;
|
|
|
task.STARTTIME = DateTime.Now;
|