|
@@ -7,7 +7,6 @@ using WCS.Entity;
|
|
using WCS.Entity.Protocol;
|
|
using WCS.Entity.Protocol;
|
|
using WCS.Entity.Protocol.SRM;
|
|
using WCS.Entity.Protocol.SRM;
|
|
using WCS.Service.Extensions;
|
|
using WCS.Service.Extensions;
|
|
-using WCS.Service.Helpers;
|
|
|
|
|
|
|
|
namespace WCS.Service.Works.Station
|
|
namespace WCS.Service.Works.Station
|
|
{
|
|
{
|
|
@@ -27,11 +26,16 @@ namespace WCS.Service.Works.Station
|
|
dev.EX(dev =>
|
|
dev.EX(dev =>
|
|
{
|
|
{
|
|
var code = dev.Entity.CODE;
|
|
var code = dev.Entity.CODE;
|
|
- if (dev.WhetherToExecute(IstationRequest.扫码入库)) return;
|
|
|
|
|
|
+ if (dev.Data.VoucherNo != dev.Data2.VoucherNo)
|
|
|
|
+ throw new Exception($"等待任务[{dev.Data2.Tasknum}]执行--凭证号不一致[{dev.Data.VoucherNo}][{dev.Data2.VoucherNo}]");
|
|
|
|
+ if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new WarnException("无光电");
|
|
|
|
+ if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new WarnException("设备运行中");
|
|
|
|
+ if (dev.Data2.Request != IstationRequest.扫码入库) throw new Exception("有光电无请求");
|
|
|
|
+ if (dev.Data2.Tasknum > 10000) throw new Exception("有光电有请求,但已生产任务");
|
|
|
|
|
|
var bcr = dev.Entity.BCR();
|
|
var bcr = dev.Entity.BCR();
|
|
var barcode = bcr.Content.Trim('\r');
|
|
var barcode = bcr.Content.Trim('\r');
|
|
- if (barcode == "") throw new Exception(LogHelper.SpliceLogMessage("扫码失败", dev.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
|
|
|
|
|
|
+ if (barcode == "") throw new Exception("扫码失败");
|
|
|
|
|
|
var info = WMS.I_WCS_GetInTask(barcode, dev.Entity.CODE);
|
|
var info = WMS.I_WCS_GetInTask(barcode, dev.Entity.CODE);
|
|
var next = dev.Entity.CODE == Conv_1028 ? "1030" : "1031";
|
|
var next = dev.Entity.CODE == Conv_1028 ? "1030" : "1031";
|
|
@@ -59,10 +63,8 @@ namespace WCS.Service.Works.Station
|
|
dev.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
dev.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
dev.Data.CmdType = IstationCmdType.扫码入库;
|
|
dev.Data.CmdType = IstationCmdType.扫码入库;
|
|
dev.Data.VoucherNo++;
|
|
dev.Data.VoucherNo++;
|
|
-
|
|
|
|
var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
|
|
var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
|
|
msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
|
|
msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
|
|
-
|
|
|
|
task.CreateStatusLog(db, msg, this.GetType());
|
|
task.CreateStatusLog(db, msg, this.GetType());
|
|
});
|
|
});
|
|
});
|
|
});
|
|
@@ -90,21 +92,23 @@ namespace WCS.Service.Works.Station
|
|
foreach (var item in obj.Items)
|
|
foreach (var item in obj.Items)
|
|
{
|
|
{
|
|
var dev = Device.Find(item.Entity.CODE).Create<StationDevice>();
|
|
var dev = Device.Find(item.Entity.CODE).Create<StationDevice>();
|
|
- if (dev.Data.VoucherNo != dev.Data2.VoucherNo) return;
|
|
|
|
- if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) return;
|
|
|
|
- if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) return;
|
|
|
|
- if (dev.Data2.Tasknum > 10000 && dev.Data2.Request != IstationRequest.请求分配目标地址) return;
|
|
|
|
|
|
+ if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new WarnException("无光电");
|
|
|
|
+ if (dev.Data.VoucherNo != dev.Data2.VoucherNo)
|
|
|
|
+ throw new Exception($"等待任务[{dev.Data2.Tasknum}]执行--凭证号不一致[{dev.Data.VoucherNo}][{dev.Data2.VoucherNo}]");
|
|
|
|
+ if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new WarnException("设备运行中");
|
|
|
|
+ if (dev.Data2.Tasknum > 10000 && dev.Data2.Request != IstationRequest.请求分配目标地址)
|
|
|
|
+ throw new Exception("有任务无请求");
|
|
}
|
|
}
|
|
|
|
|
|
//获取需要进行巷道分配的设备
|
|
//获取需要进行巷道分配的设备
|
|
- var devs = obj.TaskedDeviceGetNextAddress() ?? throw new Exception(LogHelper.SpliceLogMessage("无可用任务", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
|
|
|
|
|
|
+ var devs = obj.TaskedDeviceGetNextAddress() ?? throw new WarnException("无可用任务");
|
|
|
|
|
|
DB.Do(db =>
|
|
DB.Do(db =>
|
|
{
|
|
{
|
|
var taskIds = devs.Select(p => p.Data2.Tasknum);
|
|
var taskIds = devs.Select(p => p.Data2.Tasknum);
|
|
var tasks = db.Default.Set<WCS_TASK>().Where(p => taskIds.Any(v => v == p.ID)).ToList();
|
|
var tasks = db.Default.Set<WCS_TASK>().Where(p => taskIds.Any(v => v == p.ID)).ToList();
|
|
var res = WMS.GetTunnelList(tasks.Select(v => v.WMSTASK.ToString()).ToList(), code);
|
|
var res = WMS.GetTunnelList(tasks.Select(v => v.WMSTASK.ToString()).ToList(), code);
|
|
- if (string.IsNullOrEmpty(res.TunnelNum)) throw new Exception(LogHelper.SpliceLogMessage($"WMS未返回巷道", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
|
|
|
|
|
|
+ if (string.IsNullOrEmpty(res.TunnelNum)) throw new Exception($"WMS未返回巷道");
|
|
var tunnelNo = res.TunnelNum.Split(',').Select(v => "TY" + v).ToList();
|
|
var tunnelNo = res.TunnelNum.Split(',').Select(v => "TY" + v).ToList();
|
|
|
|
|
|
var tunnels = Device.Where(v => tunnelNo.Contains(v.CODE)).ToList();
|
|
var tunnels = Device.Where(v => tunnelNo.Contains(v.CODE)).ToList();
|
|
@@ -135,14 +139,13 @@ namespace WCS.Service.Works.Station
|
|
//筛选出优先级最高的可用巷道
|
|
//筛选出优先级最高的可用巷道
|
|
var tunnelInfo = tunnelInfos.Where(v => { try { return v.SRM.Data3.SCAlarm == 0 && v.SRM.Data2.SRMMode == SCMode.远程 && v.SRM.Data2.SRMStatus == SCRunStatus.空闲; } catch { return false; } })
|
|
var tunnelInfo = tunnelInfos.Where(v => { try { return v.SRM.Data3.SCAlarm == 0 && v.SRM.Data2.SRMMode == SCMode.远程 && v.SRM.Data2.SRMStatus == SCRunStatus.空闲; } catch { return false; } })
|
|
.OrderBy(v => tunnelNo.IndexOf(v.Tunnel.CODE)).FirstOrDefault();
|
|
.OrderBy(v => tunnelNo.IndexOf(v.Tunnel.CODE)).FirstOrDefault();
|
|
- if (tunnelInfo == null) throw new Exception(LogHelper.SpliceLogMessage("无可用巷道", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
|
|
|
|
|
|
+ if (tunnelInfo == null) throw new Exception("无可用巷道");
|
|
|
|
|
|
//开始向设备中写入任务信息
|
|
//开始向设备中写入任务信息
|
|
foreach (var item in devs)
|
|
foreach (var item in devs)
|
|
{
|
|
{
|
|
var dev = Device.Find(item.Entity.CODE).Create<StationDevice>();
|
|
var dev = Device.Find(item.Entity.CODE).Create<StationDevice>();
|
|
var task = tasks.FirstOrDefault(p => p.ID == dev.Data2.Tasknum);
|
|
var task = tasks.FirstOrDefault(p => p.ID == dev.Data2.Tasknum);
|
|
- //if (dev.Data2.Goodsend == task.ADDRNEXT.ToShort() && (task.TaskGroupKey.Contains($"{task.WMSTASK}_") || task.TaskGroupKey.Contains($"_{task.WMSTASK}"))) continue;
|
|
|
|
|
|
|
|
task.DEVICE = tunnelInfo.SRM.Entity.CODE;
|
|
task.DEVICE = tunnelInfo.SRM.Entity.CODE;
|
|
task.TUNNEL = tunnelInfo.Tunnel.CODE;
|
|
task.TUNNEL = tunnelInfo.Tunnel.CODE;
|