using iWareCommon.Utils; using iWareModel; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace iWareSda { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“StationService”。 public class StationService : IStationService { public SdaResEntity ClearAlarm(int deviceId) { SdaResEntity sdaResult = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg; var result = Station.ClearAlarm(deviceId, out msg); Log4NetHelper.WriteInfoLog(LogType.StationSdaService, "下发deviceId=" + deviceId + "的Station消警指令" + (result ? "成功" : "失败") + "原因:" + msg); sdaResult.result = result; sdaResult.resMsg = msg; return sdaResult; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); return sdaResult; } } /// /// 下发Station任务 /// /// /// /// /// /// /// public SdaResEntity SendStationTask(int deviceId, int taskId, string sourcePlce, string toPlace) { SdaResEntity sdaResult = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; //如果STP为TRUE,表示不能发任务 string msg; var result = Station.SendTask(deviceId, taskId, sourcePlce, toPlace, out msg); Log4NetHelper.WriteInfoLog(LogType.StationSdaService, "下发deviceId=" + deviceId + ",taskId=" + taskId + ",fromPlace=" + sourcePlce + ",toPlace=" + toPlace + "的Station任务" + (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 StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteStp(deviceId, stationCode, value, out msg); Log4NetHelper.WriteInfoLog(LogType.StationSdaService, "下发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 DeleteStationTask(int deviceId, int taskId) { SdaResEntity sdaResult = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.DeleteTask(deviceId, taskId, out msg); Log4NetHelper.WriteInfoLog(LogType.StationSdaService, "下发deviceId = " + deviceId + "的删除Station任务指令" + (result ? "成功" : "失败") + "原因:" + msg); sdaResult.result = result; sdaResult.resMsg = msg; return sdaResult; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); return sdaResult; } } ///// ///// Station急停 ///// ///// ///// //public SdaResEntity EmergencyStop(int deviceId) //{ // SdaResEntity sdaResult = new SdaResEntity(); // try // { // var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); // if (!StationResult.result) // { // return StationResult; // } // var Station = StationResult.resData as StationEntity; // string msg = ""; // var result = Station.EmergencyStop(deviceId, out msg); // Log4NetHelper.WriteInfoLog(LogType.StationSdaService, "下发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; // } //} /// /// 获取整个Station对象 /// /// /// public StationView GetStationInfo(int deviceId) { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return null; } var Station = (StationResult.resData as StationEntity).View; return Station; } /// /// Station任务是否完成 /// /// /// /// public SdaResEntity IsTaskFinish(int deviceId, int taskId) { SdaResEntity sdaResult = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; var stationCode = ""; var readData = Station.View.R_StationForReadCommList.Where(x => x.StationCode == stationCode).FirstOrDefault(); sdaResult.result = readData.R_TaskID == taskId && Station.View.R_Station_Finish; sdaResult.resMsg = "成功"; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); return sdaResult; } return sdaResult; } /// /// Station是否是自动模式 /// /// public SdaResEntity IsStationAuto(int deviceId, string stationCode) { SdaResEntity sdaResult = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; var msg = ""; var result = Station.StationIsAuto(stationCode, out msg); if (!StationResult.result) { sdaResult.result = false; sdaResult.resMsg = msg; return StationResult; } sdaResult.result = true; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); Log4NetHelper.WriteErrorLog(LogType.StationSdaService, "判断Station是否是自动模式出现异常,ex:" + JsonConvert.SerializeObject(ex), ex); } return sdaResult; } /// /// Station是否是自动待机模式 /// /// public SdaResEntity StationIsAutoAwaitMode(int deviceId, string stationCode) { SdaResEntity sdaResult = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; var msg = ""; var result = Station.StationIsAutoAwaitMode(stationCode, out msg); if (!StationResult.result) { sdaResult.result = false; sdaResult.resMsg = msg; return StationResult; } sdaResult.result = true; } catch (Exception ex) { sdaResult.result = false; sdaResult.resMsg = JsonConvert.SerializeObject(ex); Log4NetHelper.WriteErrorLog(LogType.StationSdaService, "判断Station是否是自动待机模式出现异常,ex:" + JsonConvert.SerializeObject(ex), ex); } return sdaResult; } /// /// 判断Station是否可用,是否可以发送新任务给Station /// /// /// /// /// 是否是涉及到Station的任务 /// public SdaResEntity IsAllowSendTask(bool isNeedValidateRealSourceAndToPlace, int deviceId, string sourceStationCode, string toStationCode, bool isStationTask) { var msg = ""; SdaResEntity sdaResult = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; var result = false; if (isNeedValidateRealSourceAndToPlace) { //判断起点是否是自动待机模式 result = Station.StationIsAutoAwaitMode(sourceStationCode, out msg); if (!result) { sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } //判断起点是否是空闲状态 result = Station.StationIsStateFree(sourceStationCode, out msg); if (!result) { sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } if (isNeedValidateRealSourceAndToPlace) { //判断目标点是否是自动模式 result = Station.StationIsAuto(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 StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; var result = Station.IsHaveHeatBeat(); sdaResult.result = true; sdaResult.resData = result; return sdaResult; } catch (Exception ex) { msg = "验证是否有心跳出现异常:" + ex.Message; sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } /// /// 写入齐套结果、解析结果 /// /// /// /// public SdaResEntity WriteQiTaoInfo(int deviceId, string stationCode, bool value) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteQiTaoInfo(stationCode, 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 InboundFinishConfirm(int deviceId, bool value, string stationCode) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.InboundFinishConfirm(stationCode, 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 OutboundFinishConfirm(int deviceId, bool value, string stationCode, bool isClearData) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.OutboundFinishConfirm(stationCode, value, out msg, isClearData); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// 切换模式 /// /// /// /// /// public SdaResEntity ChangeMode(int deviceId, int value, string stationCode) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.ChangeMode(stationCode, 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 WriteInStoreTaskInfo(int deviceId, string stationCode, string toPlaceNo, short length, short width, short height, int inbound_TaskID) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteInStoreTaskInfo(stationCode, toPlaceNo, length, width, height, out msg, inbound_TaskID); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// 写入码板任务信息 /// /// /// /// public SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode, int taskID, short length, short width, short height, short rotate, short toplace, short placeX, short placeY, short placeZ, short lastnum) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WritePalletizingTaskInfo(stationCode, taskID, length, width, height, rotate, toplace, placeX, placeY, placeZ, lastnum, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// 码垛完成已确认 /// /// /// /// public SdaResEntity SetPalletizingTaskFinishAck(int deviceId, bool value, string stationCode) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteStation_FinishACK(stationCode, 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 WriteSurroundTaskInfo(int deviceId, string stationCode, short taskID, short length, short width, short cartonhigh, short cartonwidth, short placex, short placey) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteSurroundTaskInfo(stationCode, taskID, length, width, cartonhigh, cartonwidth, placex, placey, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// 合包完成已确认 /// /// /// /// public SdaResEntity SetSurroundTaskFinishAck(int deviceId, bool value, string stationCode) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteSurround_FinishACK(stationCode, 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 WriteStation_ACK(int deviceId, bool value, string stationCode) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteStation_ACK(stationCode, 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 WriteStation_AllowIn(int deviceId, bool value, string stationCode) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteStation_AllowIn(stationCode, 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 WriteOutStoreTaskInfo(bool isResetData, int deviceId, string stationCode, string sourcePlaceNo, int outbound_TaskID) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteOutStoreTaskInfo(isResetData, stationCode, sourcePlaceNo, out msg, outbound_TaskID); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } /// /// Station的任务完成ACK赋值 /// /// /// /// public SdaResEntity WriteStation_FinishACK(int deviceId, bool value, int plcTaskId) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteStation_FinishACK(deviceId, value, plcTaskId, 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 StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.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; } } /// /// 发动机出库,给西港PLC发送发动机数据 【Editby shaocx,2023-07-23】 /// /// /// /// /// /// /// public SdaResEntity WriteStation_XigangGetDataForOut(int deviceId, string value__Out_MaterialModel, string value_Out_OrderNo, string value_Out_SerialNumber, int plcTaskId) { SdaResEntity _SdaResEntity = new SdaResEntity(); try { var StationResult = Station_CacheEntity.GetDeviceObj(deviceId); if (!StationResult.result) { return StationResult; } var Station = StationResult.resData as StationEntity; string msg = ""; var result = Station.WriteStation_XigangGetDataForOut(deviceId, value__Out_MaterialModel, value_Out_OrderNo, value_Out_SerialNumber, plcTaskId, out msg); _SdaResEntity.result = result; _SdaResEntity.resMsg = msg; return _SdaResEntity; } catch (Exception ex) { _SdaResEntity.result = false; _SdaResEntity.resMsg = ex.Message; return _SdaResEntity; } } } }