using System; using System.Linq; using HH.WCS.Mobox3.HaiCheng.Controller.Service; using HH.WCS.Mobox3.HaiCheng.Entity; using HH.WCS.Mobox3.HaiCheng.Entity.Dto; using HH.WCS.Mobox3.HaiCheng.Util.EquipmentCommunication; using HH.WCS.Mobox3.HaiCheng.Util.Helper; namespace HH.WCS.Mobox3.HaiCheng.Procss { /// /// 线体任务 /// public static class ThreadTask { #region 读取各个线体信息 /// /// 读取各个线体信息 - 主方法 /// public static void ReadLines() { var conveyorlinesInfoDtos = Settings.ConveyorlinesInfos.Where(p => p.enable == 1).ToList(); foreach (var conveyorlinesInfoDto in conveyorlinesInfoDtos) { OperationLines(conveyorlinesInfoDto); } } /// /// 操作线体信息 /// /// private static void OperationLines(ConveyorlinesInfoDto conveyorlinesInfoDto) { if (conveyorlinesInfoDto.purpose == "入库口") { // 如果是入库口,说明任务提前创建了,不需要额外操作 } else if (conveyorlinesInfoDto.purpose == "扫码称重") { // 读取条形码 var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001); // 清除空格 barCode = barCode.Replace("\0",""); // 读取申请任务信号 var request = S7Helper.ReadPipelinePlcForInt(452, conveyorlinesInfoDto, 2001, "Int"); // 有条形码且申请成功 if (!string.IsNullOrEmpty(barCode) && request == 1) { // 获取该托盘的任务号(入库任务且状态为0) var task = AdoSqlHelper.QueryFirst(p => p.N_TYPE == 1 && p.S_CNTR_CODE == barCode); if (task != null) { var lineTask = new LineTaskDto { Task_No = Convert.ToInt32(task.S_CODE.Substring(8)), Pallet_No = task.S_CNTR_CODE, Source_Station = 1001, Destination_Station = 1002, }; // 满足条件,往输送线写数据 if (S7Helper.SendTaskPipelinePlc(conveyorlinesInfoDto, lineTask, conveyorlinesInfoDto.writeAddr, 2000)) { task.N_B_STATE = 1; task.S_B_STATE = "已推送"; task.T_START_TIME = DateTime.Now; AdoSqlHelper.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME }); } } else { // 任务不存在,调用创建接口 // FourWayCarService.CallWMSOperationCreate(); } } } else if (conveyorlinesInfoDto.purpose == "提升机前线体") { // 读取条形码 var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001); // 清除空格 barCode = barCode.Replace("\0",""); // 获取该托盘的任务号(入库任务且状态为0) var task = AdoSqlHelper.QueryFirst(p => p.S_CNTR_CODE == barCode); if (task != null) { // 入库 if (task.N_TYPE == 1) { // 判断当前终点在几层 Location location = AdoSqlHelper.QueryFirst(p => p.S_CODE == task.S_END_LOC); var fourWayCarCreateDto = new FourWayCarCreateDto() { order_name = task.S_OP_CODE, src = conveyorlinesInfoDto.location, dst = location.S_AGV_SITE, para1 = task.S_CNTR_CODE }; // 推送小车任务 if (FourWayCarService.CreateOrder(fourWayCarCreateDto)) { task.N_B_STATE = 2; task.S_B_STATE = "执行中"; AdoSqlHelper.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE }); } } // 出库 else if (task.N_TYPE == 2) { var lineTask = new LineTaskDto { Task_No = Convert.ToInt32(task.S_CODE.Substring(8)), Pallet_No = task.S_CNTR_CODE, Source_Station = 1001, Destination_Station = 1002, }; // 满足条件,往输送线写数据 if (S7Helper.SendTaskPipelinePlc(conveyorlinesInfoDto, lineTask, conveyorlinesInfoDto.writeAddr, 2000)) { task.N_B_STATE = 3; task.S_B_STATE = "完成"; task.T_END_TIME = DateTime.Now; AdoSqlHelper.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME }); // 调用wms完成接口 } } } } else if (conveyorlinesInfoDto.purpose == "出库口") { // 读取条形码 var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001); // 清除空格 barCode = barCode.Replace("\0",""); // 获取该托盘的任务号(入库任务且状态为0) var task = AdoSqlHelper.QueryFirst(p => p.S_CNTR_CODE == barCode); if (task != null) { task.N_B_STATE = 3; task.S_B_STATE = "完成"; task.T_END_TIME = DateTime.Now; AdoSqlHelper.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME }); } } } #endregion } }