using System; using System.Threading; using iWareCommon.Utils; using System.Linq; using Newtonsoft.Json; using System.Collections.Generic; using iWareCommon; using System.Text; using iWareModel; namespace iWareSda { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“LineService”。 public class LineService : ILineService { private static string _namespace = "iWareSda.LineService"; private static string nofoundStackerMsg = SysHelper.Language(WareSdaStruct.LanguageFlg, "没有找到输送线", "No found the Line"); public LineView GetLineInfo(int deviceId) { var device = Line_CacheEntity.DeviceObjs.FirstOrDefault(x => x.View.DeviceId == deviceId); if (device == null) { return null; } return device.View; } /// /// 判断是否有心跳 /// /// /// public SdaResEntity IsHaveHeatBeat(int deviceId) { SdaResEntity sdaResult = new SdaResEntity(); string msg; try { var device = Line_CacheEntity.DeviceObjs.FirstOrDefault(x => x.View.DeviceId == deviceId); if (device == null) { sdaResult.resMsg = nofoundStackerMsg; return sdaResult; } var result = device.IsHaveHeatBeat(); sdaResult.result = true; sdaResult.resData = result; return sdaResult; } catch (Exception ex) { msg = "验证是否有心跳出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(LogType.LineSdaService, msg, ex); sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } /// /// 检测设备是否可以发任务 /// /// public SdaResEntity IsAllowSendTask(int deviceId) { SdaResEntity res = new SdaResEntity(); res.result = true; return res; //try //{ // DeviceEnum device = (DeviceEnum)Enum.Parse(typeof(DeviceEnum), deviceId.ToString()); // AreaEnum area = BussinessHelper.GetAreaByDevice(device); // var line = Line_CacheEntity.Lines[0]; // switch (area) // { // case AreaEnum.区域1: // if (!line.R_AutoMode_1) // { // res.resData = false; // res.resMsg = "区域1设备不是自动模式"; // return res; // } // break; // case AreaEnum.区域2: // if (!line.R_AutoMode_2) // { // res.resData = false; // res.resMsg = "区域2设备不是自动模式"; // return res; // } // break; // } // if (!line.IsConnected) // { // res.resData = false; // res.resMsg = "未与PLC连接"; // return res; // } // switch (device) // { // case DeviceEnum.翻转机R01: // if (line.R_R01_TaskNo != 0) // { // res.resData = false; // res.resMsg = "R01上有任务在执行"; // return res; // } // break; // case DeviceEnum.翻转机R04: // if (line.R_R04_TaskNo != 0) // { // res.resData = false; // res.resMsg = "R04上有任务在执行"; // return res; // } // break; // default: // break; // } // res.resData = true; // return res; //} //catch (Exception ex) //{ // Log4NetHelper.WriteErrorLog(LogType.SdaService, "检测R01是否可以发任务 出现异常", ex); // res.result = false; // res.resMsg = "检测R01是否可以发任务 出现异常:" + ex.Message; // return res; //} } /// /// 写入TaskFinish /// /// /// /// public SdaResEntity WriteTaskFinish(int deviceId, int rgvLocation) { SdaResEntity sdaResult = new SdaResEntity(); string msg; try { var line = Line_CacheEntity.DeviceObjs.FirstOrDefault(x => x.View.DeviceId == deviceId); if (line == null) { sdaResult.resMsg = nofoundStackerMsg; return sdaResult; } LineLocation _rgv = (LineLocation)Enum.Parse(typeof(LineLocation), rgvLocation.ToString()); MessageModel fr = null; switch (_rgv) { case LineLocation.RGV1: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T1_Finish, 1, line.View.W_T1_Finish); break; case LineLocation.RGV2: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T2_Finish, 1, line.View.W_T2_Finish); break; case LineLocation.RGV3: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T3_Finish, 1, line.View.W_T3_Finish); break; } if (fr.result) { sdaResult.result = true; return sdaResult; } else { sdaResult.resMsg = fr.resMsg; return sdaResult; } } catch (Exception ex) { msg = "写入Task_Finish_ACK出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(LogType.LineSdaService, msg, ex); sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } /// /// 写入 Die (是否有货) /// /// /// /// public SdaResEntity WriteDie(int deviceId, int rgvLocation, int dieValue) { SdaResEntity sdaResult = new SdaResEntity(); string msg; try { var line = Line_CacheEntity.DeviceObjs.FirstOrDefault(x => x.View.DeviceId == deviceId); if (line == null) { sdaResult.resMsg = nofoundStackerMsg; return sdaResult; } LineLocation _rgv = (LineLocation)Enum.Parse(typeof(LineLocation), rgvLocation.ToString()); MessageModel fr = null; switch (_rgv) { case LineLocation.RGV1: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T1_Die, dieValue, line.View.W_T1_Die); break; case LineLocation.RGV2: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T2_Die, dieValue, line.View.W_T2_Die); break; case LineLocation.RGV3: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T3_Die, dieValue, line.View.W_T3_Die); break; } if (fr.result) { sdaResult.result = true; return sdaResult; } else { sdaResult.resMsg = fr.resMsg; return sdaResult; } } catch (Exception ex) { msg = "写入 Die 出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(LogType.LineSdaService, msg, ex); sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } /// /// 写入 Stock (是否有库存) /// /// /// /// public SdaResEntity WriteStock(int deviceId, int rgvLocation, int stockValue) { SdaResEntity sdaResult = new SdaResEntity(); string msg; try { var line = Line_CacheEntity.DeviceObjs.FirstOrDefault(x => x.View.DeviceId == deviceId); if (line == null) { sdaResult.resMsg = nofoundStackerMsg; return sdaResult; } LineLocation _rgv = (LineLocation)Enum.Parse(typeof(LineLocation), rgvLocation.ToString()); MessageModel fr = null; switch (_rgv) { case LineLocation.RGV1: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T1_Stock, stockValue, line.View.W_T1_Stock); break; case LineLocation.RGV2: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T2_Stock, stockValue, line.View.W_T2_Stock); break; case LineLocation.RGV3: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T3_Stock, stockValue, line.View.W_T3_Stock); break; } if (fr.result) { sdaResult.result = true; return sdaResult; } else { sdaResult.resMsg = fr.resMsg; return sdaResult; } } catch (Exception ex) { msg = "写入 Stock 出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(LogType.LineSdaService, msg, ex); sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } /// /// 写入 request_ok (WCS确认标记) /// /// /// /// public SdaResEntity Write_Request_ok(int deviceId, int rgvLocation, bool value) { SdaResEntity sdaResult = new SdaResEntity(); string msg; try { var line = Line_CacheEntity.DeviceObjs.FirstOrDefault(x => x.View.DeviceId == deviceId); if (line == null) { sdaResult.resMsg = nofoundStackerMsg; return sdaResult; } LineLocation _rgv = (LineLocation)Enum.Parse(typeof(LineLocation), rgvLocation.ToString()); MessageModel fr = null; switch (_rgv) { case LineLocation.RGV1: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T1_request_ok, value, line.View.W_T1_request_ok); break; case LineLocation.RGV2: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T2_request_ok, value, line.View.W_T2_request_ok); break; case LineLocation.RGV3: fr = line.plcService.WriteValuePoint(Line_CacheEntity.W_DBHeader, line.DBBlockForWrite.W_T3_request_ok, value, line.View.W_T3_request_ok); break; } if (fr.result) { sdaResult.result = true; return sdaResult; } else { sdaResult.resMsg = fr.resMsg; return sdaResult; } } catch (Exception ex) { msg = "写入 request_ok 出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(LogType.LineSdaService, msg, ex); sdaResult.result = false; sdaResult.resMsg = msg; return sdaResult; } } } }