using IWareCC.CacheInfo; using IWareCC.ChaiDie.Entity; using IWareCC.Conveyor.Entity; using IWareCC.Extend; using IWareCC.ORM; using IWareCC.Properties; using IWareCC.RGV.Entity; using IWareCC.SRM.Entity; using IWareCC.Task; using IWareCommon.Help; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace IWareCC.WCf.ControlCenterWcfService { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“ControlCenterWcfService”。 public class ControlCenterWcfService : IControlCenterWcfService { private static readonly object obj = new object(); #region 获取堆垛机设备信息及下发堆垛机相关任务命令 /// /// 获取堆垛机各个属性的值 /// /// 堆垛机名称 /// 异常错误信息 /// 堆垛机各个属性的值 public SrmInfoEntity GetStackInfo(string stackName, out string msg) { try { msg = ""; var stacker = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == stackName); if (stacker != null) { return new SrmInfoEntity(stacker); } else { return null; } } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetStackInfo", msg); return null; } } /// /// 获取堆垛机 /// /// /// public List GetStackInfos(out string msg) { try { msg = ""; var stackerInfos = new List(); CacheEntity.Srms.ForEach(x => stackerInfos.Add(new SrmInfoEntity(x))); return stackerInfos; } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetStackInfos", msg); return null; } } /// /// 堆垛机人工任务 /// /// public bool SendManualSrmTask(string stackName, string sourcePlace, string toPlace, int type, int taskno, int palltype, int heighttype) { try { string msg = ""; var stacker = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == stackName); bool bl = stacker.SendTask(stacker.DeviceId, taskno, sourcePlace, toPlace, type, palltype, heighttype, out msg); if (!bl) //发送失败,再发一次 { bl = stacker.SendTask(stacker.DeviceId, taskno, sourcePlace, toPlace, type, palltype, heighttype, out msg); } return bl; } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendManualSrmTask", ex.Message); return false; } } /// /// 堆垛机移动任务 /// /// public bool SendManualMoveSrmTask(string stackName, int taskNo, string sourcePlace, string toPlace) { try { string msg = ""; var stacker = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == stackName); bool bl = stacker.SendMove(stacker.DeviceId, taskNo, sourcePlace, toPlace, out msg); if (!bl)//发送失败再发一次 { bl = stacker.SendMove(stacker.DeviceId, taskNo, sourcePlace, toPlace, out msg); } return bl; } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendManualMoveSrmTask", ex.Message); return false; } } /// /// 删除堆垛机任务 /// /// public bool SendDeleteSrmTask(string stackName, int taskno) { try { string msg = ""; var stacker = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == stackName); return stacker.SendDelTask(stacker.DeviceId, taskno, out msg); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendStopSrm", ex.Message); return false; } } /// /// 堆垛机急停 /// /// public bool SendStopSrm(string stackName) { try { var stacker = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == stackName); return stacker.WriteValue(stacker.OpcWriteItems.EmergencyStop, true); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendStopSrm", ex.Message); return false; } } /// /// 堆垛机解警 /// /// public bool SendResolveSrmAlarm(string stackName) { try { var stacker = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == stackName); if (stacker.WriteValue(stacker.OpcWriteItems.CancleAlarm, true)) { stacker.WriteValue(stacker.OpcWriteItems.EmergencyStop, false); } return stacker.WriteValue(stacker.OpcWriteItems.CancleAlarm, false); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendResolveSrmAlarm", ex.Message); return false; } } /// /// 任务完成确认 /// /// public bool ConfirmSrmTaskFinish(string stackName) { try { var stacker = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == stackName); return stacker.WriteValue(stacker.OpcWriteItems.TaskFinishConfirm, true); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ConfirmSrmTaskFinish", ex.Message); return false; } } /// /// 任务完成确认 /// /// public bool ConfirmSrmACK(string stackName) { try { var stacker = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == stackName); return stacker.WriteValue(stacker.OpcWriteItems.Stb, false); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ConfirmSrmTaskFinish", ex.Message); return false; } } #endregion #region 获取RGV设备信息及下发RGV相关任务命令 /// /// 获取RGV各个属性的值 /// /// RGV名称 /// 异常错误信息 /// RGV各个属性的值 public RgvInfoEntity GetRGVInfo(string rgvName, out string msg) { try { msg = ""; var rgv = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == rgvName); if (rgv != null) { return new RgvInfoEntity(rgv); } else { return null; } } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetRGVInfo", msg); return null; } } /// /// 获取RGV /// /// /// public List GetRGVInfos(out string msg) { try { msg = ""; var rgvInfos = new List(); CacheEntity.Rgvs.ForEach(x => rgvInfos.Add(new RgvInfoEntity(x))); return rgvInfos; } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetRGVInfos", msg); return null; } } /// /// 发送RGV任务 /// /// /// /// /// /// /// public bool SendRGVTask(string rgvno, int taskId, string sourcePlce, string toPlace, int pallType) { try { string msg = ""; var rgv = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == rgvno); return rgv.SendTask(rgv.DeviceId, taskId, sourcePlce, toPlace, pallType, out msg); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendRGVTask", ex.Message); return false; } } /// /// 删除RGV任务 /// /// /// /// public bool SendDeleteRGVTask(string rgvno, int taskId) { try { string msg = ""; var rgv = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == rgvno); return rgv.DeleteTask(rgv.DeviceId, taskId, out msg); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendDeleteRGVTask", ex.Message); return false; } } /// /// RGV急停 /// /// /// public bool SendStopRGV(string rgvno) { try { string msg = ""; var rgv = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == rgvno); return rgv.EmergencyStop(rgv.DeviceId, out msg); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendStopRGV", ex.Message); return false; } } /// /// RGV复位 /// /// /// public bool SendResolveRGVAlarm(string rgvno) { try { string msg = ""; var rgv = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == rgvno); return rgv.ResolveRGV(rgv.DeviceId, out msg); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendResolveRGVAlarm", ex.Message); return false; } } /// /// 任务完成确认 /// /// /// public bool ConfirmRGVTaskFinish(string rgvno) { try { var rgv = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == rgvno); return rgv.WriteValue(rgv.OpcWriteItems.AckTaskFinish, 1); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ConfirmRGVTaskFinish", ex.Message); return false; } } /// /// 任务完成确认 /// /// /// public bool ConfirmRGVStp(string rgvno) { try { var rgv = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == rgvno); return rgv.WriteValue(rgv.OpcWriteItems.Stb, 0); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ConfirmRGVTaskFinish", ex.Message); return false; } } #endregion #region 获取拆叠机设备信息及下发拆叠机相关任务命令 /// /// 获取拆叠机各个属性的值 /// /// 拆叠机名称 /// 异常错误信息 /// 拆叠机各个属性的值 public ChaiDieInfoEntity GetChaiDieInfo(string cdName, out string msg) { try { msg = ""; var cd = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == cdName); if (cd != null) { return new ChaiDieInfoEntity(cd); } else { return null; } } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetChaiDieInfo", msg); return null; } } /// /// 获取拆叠机 /// /// /// public List GetChaiDieInfos(out string msg) { try { msg = ""; var cdInfos = new List(); CacheEntity.ChaiDies.ForEach(x => cdInfos.Add(new ChaiDieInfoEntity(x))); return cdInfos; } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetChaiDieInfos", msg); return null; } } /// /// 发送拆叠机任务 /// /// /// /// /// public bool SendChaiDieTask(string cdno) { try { string msg = ""; var cd = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == cdno); return cd.SendTask(cd.DeviceId, out msg); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendChaiDieTask", ex.Message); return false; } } /// /// 任务完成确认 /// /// /// public bool ConfirmChaiDieStp(string cdno) { try { var cd = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == cdno); return cd.WriteValue(cd.OpcWriteItems.STP, 0); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ConfirmChaiDieTaskFinish", ex.Message); return false; } } #endregion #region 获取输送线设备信息及下发输送线相关任务命令 /// /// 获取输送线各个属性的值 /// /// 输送线名称 /// 异常错误信息 /// 输送线各个属性的值 public ConveyorInfoEntity GetConveyorInfo(string cyName, out string msg) { try { msg = ""; var cy = CacheEntity.Conveyors.FirstOrDefault(x => x.ConveyorName == cyName); if (cy != null) { return new ConveyorInfoEntity(cy); } else { return null; } } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetConveyorInfo", msg); return null; } } /// /// 获取输送线 /// /// /// public List GetConveyorInfos(out string msg) { try { msg = ""; var cyInfos = new List(); CacheEntity.Conveyors.ForEach(x => cyInfos.Add(new ConveyorInfoEntity(x))); return cyInfos; } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetConveyorInfos", msg); return null; } } /// /// 发送输送线任务 /// /// /// /// /// /// /// public bool SendConveyorTask(string cyno, int deviceId, int taskId, string toPlace, int palltype) { try { string msg = ""; var cy = CacheEntity.Conveyors.FirstOrDefault(x => x.ConveyorName == cyno); bool b1 = cy.SendTask(cy.DeviceId, taskId, toPlace, palltype, out msg); if (b1) { b1 = cy.WriteValue(cy.OpcWriteItems.STP, 1); } return b1; } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendConveyorTask", ex.Message); return false; } } /// /// 任务完成确认 /// /// /// public bool ConfirmConveyorStp(string cdno) { try { var cy = CacheEntity.Conveyors.FirstOrDefault(x => x.ConveyorName == cdno); return cy.WriteValue(cy.OpcWriteItems.STP, 0); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ConfirmChaiDieTaskFinish", ex.Message); return false; } } #endregion #region 下发任务相关命令 /// /// 发送主任务 /// /// 任务号 /// 起始位置 /// 目标位置 /// 任务类型 /// 托盘类型 /// 出库类型 /// public bool SendTask(int taskId, string sourcePlce, string toPlace, int taskType, int containerType, int storageno, int height, string containerName, int wmsTaskId) { string errMsg = ""; return CommonSendTask(taskId, sourcePlce, toPlace, taskType, containerType, storageno, height, containerName, ref errMsg, wmsTaskId); } /// /// 发送主任务-带返回消息 【EditBy shaocx,2022-07-19】 /// /// 任务号 /// 起始位置 /// 目标位置 /// 任务类型 /// 托盘类型 /// 出库类型 /// public FunModel SendTaskWithMsg(int taskId, string sourcePlce, string toPlace, int taskType, int containerType, int storageno, int height, string containerName, int wmsTaskId) { try { string errMsg = ""; bool result = CommonSendTask(taskId, sourcePlce, toPlace, taskType, containerType, storageno, height, containerName, ref errMsg, wmsTaskId); FunModel f = new FunModel() { errMsg = errMsg, result = result }; return f; } catch (Exception ex) { FunModel f = new FunModel() { errMsg = "方法发生异常:" + ex.Message, result = false }; return f; } } /// /// 下发任务,公共方法 【EditBy shaocx,2022-07-19】 /// /// /// /// /// /// /// /// /// /// private bool CommonSendTask(int taskId, string sourcePlce, string toPlace, int taskType, int containerType, int storageno, int height, string containerName, ref string errMsg, int wmsTaskId) { lock (obj) { try { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "传入参数 TaskID:" + taskId + " SourcePlace:" + sourcePlce + " ToPlace:" + toPlace + " TaskType:" + taskType + " ContainerType:" + containerType + " StorageNo:" + storageno + " Height:" + height + " ContainerName:" + containerName); if (taskId <= 0) { errMsg = "任务号小于等于0"; LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "Taskid小于等于0"); return false; } if (string.IsNullOrEmpty(sourcePlce)) { errMsg = "来源位置为空"; LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "sourcePlce为空"); return false; } return TaskService.GetInstance().CreateMainTask(taskId, sourcePlce, toPlace, taskType, containerType, storageno, height, containerName, ref errMsg, wmsTaskId); } catch (Exception ex) { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "抛出异常:Message:" + ex.Message); errMsg = "出现异常:" + ex.Message; return false; } } } /// /// 查验任务是否完成 /// /// PLC任务号 /// Wms任务ID /// public int GetTaskIsFinishOrCheckOk(int taskId, int wmsTaskId) { try { return TaskService.GetInstance().GetTaskIsFinishOrCheckOk(taskId, wmsTaskId); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetTaskIsFinishOrCheckOk", ex.Message); return 0; } } /// /// 是否有要出空盘或空盘入库 /// /// /// public BackData GetCheckIsNeedOrSendContainer() { try { return TaskService.GetInstance().GetCheckIsNeedOrSendcontainer(); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetCheckIsNeedOrSendContainer", ex.Message); return null; } } /// /// 按托盘号删除所有的任务 /// /// /// public bool DealAllTask(string containerName) { try { return TaskService.GetInstance().DealAllPartTask(containerName); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealAllTask", ex.Message); return false; } } #endregion #region 任务处理相关 /// /// 处理任务 /// /// 要处理的子任务号 /// 处理类型(1:强制完成;2:删除任务) /// public bool DealTask(int taskId, int type) { try { return TaskService.GetInstance().DealPartTask(taskId, type); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealTask", ex.Message); return false; } } public List GetPartTask(int pagesize, int pagecount, out int totalNum, Dictionary parm) { try { return TaskService.GetInstance().GetPartTask(pagesize, pagecount, out totalNum, parm); } catch (Exception ex) { totalNum = 0; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetPartTask", ex.Message); return new List(); } } public List GetDevAlert(int pagesize, int pagecount, out int totalNum, Dictionary parm) { try { return TaskService.GetInstance().GetDevAlert(pagesize, pagecount, out totalNum, parm); } catch (Exception ex) { totalNum = 0; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetDevAlert", ex.Message); return new List(); } } public bool SetMainTaskPriority(string taskno, int priority,int wmsTaskId) { try { return TaskService.GetInstance().SetMainTaskPriority(taskno, priority, wmsTaskId); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SetMainTaskPriority", ex.Message); return false; } } public bool SetPartTaskPriority(string taskcode, int priority) { try { return TaskService.GetInstance().SetPartTaskPriority(taskcode, priority); } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SetPartTaskPriority", ex.Message); return false; } } #endregion } }