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
}
}