using iWareCommon.Utils; using iWareModel; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace iWareSda { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“ConveyerService”。 public class ConveyerService : IConveyerService { public SdaResEntity ClearAlarm(int deviceId) { SdaResEntity sdaResult = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg; var result = Conveyer.ClearAlarm(deviceId, out msg); Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId=" + deviceId + "的Conveyer消警指令" + (result ? "成功" : "失败") + "原因:" + msg); sdaResult.result = result; sdaResult.resMsg = msg; return sdaResult; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); return sdaResult; } } /// /// 下发Conveyer任务 /// /// /// /// /// /// /// public SdaResEntity SendConveyerTask(int deviceId, int taskId, string sourcePlce, string toPlace, string containertype, string taskType) { SdaResEntity sdaResult = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; //如果STP为TRUE,表示不能发任务 string msg; var result = Conveyer.SendTask(deviceId, taskId, sourcePlce, toPlace, containertype, taskType, out msg); Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId=" + deviceId + ",taskId=" + taskId + ",fromPlace=" + sourcePlce + ",toPlace=" + toPlace + "的Conveyer任务" + (result ? "成功" : "失败") + "原因:" + msg); sdaResult.result = result; sdaResult.resMsg = msg; return sdaResult; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); return sdaResult; } } /// /// 下发Conveyer任务 /// /// /// /// /// /// /// public SdaResEntity ClearConveyerTask(int deviceId, int taskId, string sourcePlce, string toPlace, string containertype, string taskType) { SdaResEntity sdaResult = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; //如果STP为TRUE,表示不能发任务 string msg; var result = Conveyer.SendTask(deviceId, taskId, sourcePlce, toPlace, containertype, taskType, out msg); Log4NetHelper.WriteInfoLog(LogType.CCWCFService, "下发deviceId=" + deviceId + ",taskId=" + taskId + ",fromPlace=" + sourcePlce + ",toPlace=" + toPlace + "的Conveyer任务" + (result ? "成功" : "失败") + "原因:" + msg); sdaResult.result = result; sdaResult.resMsg = msg; return sdaResult; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); return sdaResult; } } /// /// 任务下发确认(收到PLC反馈后WCS清除) /// /// /// /// public SdaResEntity WriteStp(int deviceId, bool value, string stationCode) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.WriteStp(deviceId, stationCode, value, out msg); Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId=" + deviceId + ",站点号=" + stationCode + "的任务下发确认(收到PLC反馈后WCS清除)指令" + (result ? "成功" : "失败") + "原因:" + msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } public SdaResEntity DeleteConveyerTask(int deviceId, int taskId) { SdaResEntity sdaResult = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.DeleteTask(deviceId, taskId, out msg); Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId = " + deviceId + "的删除Conveyer任务指令" + (result ? "成功" : "失败") + "原因:" + msg); sdaResult.result = result; sdaResult.resMsg = msg; return sdaResult; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); return sdaResult; } } ///// ///// Conveyer急停 ///// ///// ///// //public SdaResEntity EmergencyStop(int deviceId) //{ // SdaResEntity sdaResult = new SdaResEntity(); // try // { // var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); // if (!ConveyerResult.result) // { // return ConveyerResult; // } // var Conveyer = ConveyerResult.resData as ConveyerEntity; // string msg = ""; // var result = Conveyer.EmergencyStop(deviceId, out msg); // Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId = " + deviceId + "的急停任务指令" + (result ? "成功" : "失败") + "原因:" + msg); // sdaResult.result = result; // sdaResult.resMsg = msg; // return sdaResult; // } // catch (Exception ex) // { // sdaResult.result = false; // sdaResult.resMsg = JsonConvert.SerializeObject(ex); // return sdaResult; // } //} /// /// 获取整个Conveyer对象 /// /// /// public ConveyerView GetConveyerInfo(int deviceId) { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return null; } var Conveyer = (ConveyerResult.resData as ConveyerEntity).View; return Conveyer; } /// /// Conveyer任务是否完成 /// /// /// /// public SdaResEntity IsTaskFinish(int deviceId, string stationCode, int taskId) { SdaResEntity sdaResult = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; //var stationCode = ((int)EDevice.Conveyer1040).ToString(); var readData = Conveyer.View.R_ConveyerForReadCommList.Where(x => x.StationCode == stationCode).FirstOrDefault(); sdaResult.result = readData.R_TaskID == taskId && readData.R_TaskFinish; sdaResult.resMsg = "成功"; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); return sdaResult; } return sdaResult; } /// /// Conveyer是否是自动模式 /// /// public SdaResEntity IsConveyerAuto(int deviceId, string stationCode) { SdaResEntity sdaResult = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; var msg = ""; var result = Conveyer.ConveyerIsAuto(stationCode, out msg); if (!ConveyerResult.result) { sdaResult.result = false; sdaResult.resMsg = msg; return ConveyerResult; } sdaResult.result = true; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); Log4NetHelper.WriteErrorLog(LogType.ConveyerSdaService, "判断Conveyer是否是自动模式出现异常,ex:" + JsonConvert.SerializeObject(ex), ex); } return sdaResult; } /// /// Conveyer是否是自动待机模式 /// /// public SdaResEntity ConveyerIsAutoAwaitMode(int deviceId, string stationCode) { SdaResEntity sdaResult = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; var msg = ""; var result = Conveyer.ConveyerIsAutoAwaitMode(stationCode, out msg); if (!ConveyerResult.result) { sdaResult.result = false; sdaResult.resMsg = msg; return ConveyerResult; } sdaResult.result = true; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); Log4NetHelper.WriteErrorLog(LogType.ConveyerSdaService, "判断Conveyer是否是自动待机模式出现异常,ex:" + JsonConvert.SerializeObject(ex), ex); } return sdaResult; } /// /// 判断Conveyer是否可用,是否可以发送新任务给Conveyer /// /// /// /// /// 是否是涉及到Conveyer的任务 /// public SdaResEntity IsAllowSendTask(bool isNeedValidateRealSourceAndToPlace, int deviceId, string sourceStationCode, string toStationCode, bool isConveyerTask) { var msg = ""; SdaResEntity sdaResult = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; var result = false; if (isNeedValidateRealSourceAndToPlace) { //判断起点是否是自动待机模式 result = Conveyer.ConveyerIsAutoAwaitMode(sourceStationCode, out msg); if (!result) { sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } //判断起点是否是空闲状态 result = Conveyer.ConveyerIsStateFree(sourceStationCode, out msg); if (!result) { sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } //判断Conveyer是否是自动模式 result = Conveyer.ConveyerIsAuto(((int)EDevice.Conveyer1040).ToString(), out msg); if (!result) { sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } if (isConveyerTask) {//如果是涉及到Conveyer的任务,需要去验证下Conveyer是否是空闲状态 //判断Conveyer是否是自动待机模式 result = Conveyer.ConveyerIsAutoAwaitMode(((int)EDevice.Conveyer1040).ToString(), out msg); if (!result) { sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } result = Conveyer.ConveyerIsStateFree(((int)EDevice.Conveyer1040).ToString(), out msg); if (!result) { sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } if (isNeedValidateRealSourceAndToPlace) { //判断目标点是否是自动模式 result = Conveyer.ConveyerIsAuto(toStationCode, out msg); if (!result) { sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } sdaResult.result = true; return sdaResult; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = "出现异常:" + JsonConvert.SerializeObject(ex); return sdaResult; } } /// /// 判断是否有心跳 /// /// /// public SdaResEntity IsHaveHeatBeat(int deviceId) { SdaResEntity sdaResult = new SdaResEntity(); string msg; try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; var result = Conveyer.IsHaveHeatBeat(); sdaResult.result = true; sdaResult.resData = result; return sdaResult; } catch (Exception ex) { msg = "验证是否有心跳出现异常:" + ex.Message; sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } /// /// 1015重新扫码 /// /// /// /// public SdaResEntity Write1015ReScan(int deviceId, bool value) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.Write1015ReScan(deviceId, value, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// 写入扫码接受完成 /// /// /// /// public SdaResEntity WriteReceiveScan(int deviceId, string stationCode, bool value) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; bool result = false; if (stationCode == "101") { result = Conveyer.Write101Scan(deviceId, value, out msg); } Log4NetHelper.WriteInfoLog(LogType.ConveyerSdaService, "下发deviceId=" + deviceId + ",站点号=" + stationCode + "的任务下发确认(收到PLC反馈后WCS清除)指令" + (result ? "成功" : "失败") + "原因:" + msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// Conveyer的任务完成ACK赋值 /// /// /// /// public SdaResEntity WriteConveyer_FinishACK(int deviceId, bool value, int plcTaskId, string stationcode) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.WriteConveyer_FinishACK(deviceId, value, plcTaskId, stationcode, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// 四个入库口扫描验证ACK赋值 /// /// /// /// public SdaResEntity WriteScanValidateACK(bool isReset, int deviceId, string stationCode, bool value, int plcTaskId) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.WriteScanValidateACK(isReset, deviceId, stationCode, value, plcTaskId, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// AGV请求入 /// /// /// /// public SdaResEntity WriteAGVRequestIn(int deviceId, bool value) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.AGVRequestIN(value, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// AGV请求入到位 /// /// /// /// public SdaResEntity WriteAGVRequestInArr(int deviceId, bool value) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.AGVRequestINARR(value, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// AGV请求出 /// /// /// /// public SdaResEntity WriteAGVRequestOUT(int deviceId, bool value) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.AGVRequestOUT(value, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// AGV请求出到位 /// /// /// /// public SdaResEntity WriteAGVRequestOutArr(int deviceId, bool value) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.AGVRequestOUTARR(value, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// AGV任务类型 /// /// /// /// public SdaResEntity WriteAGVTaskType(int deviceId,short value) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (!ConveyerResult.result) { return ConveyerResult; } var Conveyer = ConveyerResult.resData as ConveyerEntity; string msg = ""; var result = Conveyer.AGVTaskType(value, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// 读取点位 /// /// /// /// public bool ReadAddress(string address) { try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(3); if (!ConveyerResult.result) { return false; } var Conveyer = ConveyerResult.resData as ConveyerEntity; return Conveyer.Read(address); } catch (Exception ex) { return false; } } /// /// 读取点位 /// /// /// /// public string ReadStr(string address) { try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(3); if (!ConveyerResult.result) { return null; } var Conveyer = ConveyerResult.resData as ConveyerEntity; return Conveyer.ReadStr(address); } catch (Exception ex) { return null; } } /// /// 读取点位 /// /// /// /// public short ReadShort(string address) { try { var ConveyerResult = Conveyer_CacheEntity.GetDeviceObj(3); if (!ConveyerResult.result) { return 0; } var Conveyer = ConveyerResult.resData as ConveyerEntity; return Conveyer.ReadShort(address); } catch (Exception ex) { return 0; } } } }