| | |
| | | #endregion |
| | | } |
| | | break; |
| | | #region 出库交互 |
| | | |
| | | #region 出库交互 |
| | | case "420": |
| | | { |
| | | #region 托盘到达拣选工位/出库口 |
| | |
| | | |
| | | #endregion |
| | | |
| | | #region 叫空托盘跺 |
| | | case "50": |
| | | // plc申请空托 |
| | | { |
| | | // 调用WMS空托出库接口,返回出库任务存入出库表 |
| | | var strMsg = ""; |
| | | var http = new HttpService(); |
| | | strMsg = http.IssuePlnOutHouseWcs("1", "205"); |
| | | if (!strMsg.Contains("-1")) |
| | | { |
| | | // 写入plc流程字60 |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60"); |
| | | } |
| | | else |
| | | { |
| | | // 申请巷道失败!LED显示 |
| | | Log.Error(string.Format($"工位号:{modDevice.StationNum}申请空托跺失败:{strMsg};")); |
| | | } |
| | | } |
| | | break; |
| | | case "80": |
| | | // 空托盘跺已到位 |
| | | { |
| | | // 调用wms任务出库任务完成 |
| | | // 获取跺机点位配置 |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号"); |
| | | var (res, val) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTask.PlcPos); |
| | | // 根据任务号获取任务信息 |
| | | if (res.IsSucceed) |
| | | { |
| | | string tasknoVal = val.ToString(); |
| | | var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false); |
| | | if (modTask == null) |
| | | { |
| | | Log.Error(string.Format($"工位号:{modDevice.StationNum}空托盘到达,未找到对应的任务!任务号{tasknoVal};")); |
| | | break; |
| | | } |
| | | // 写入plc流程字90 |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "90"); |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 改变任务状态 |
| | | modTask.Status = TaskStatusEnum.Complete; |
| | | modTask.FinishDate = DateTime.Now; |
| | | _db.Updateable(modTask).ExecuteCommand(); |
| | | |
| | | HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | var modTaskMonitor = new WcsTaskMonitor() |
| | | { |
| | | TaskNo = modTask.TaskNo, |
| | | PlcId = modDevice.Id, |
| | | PlcName = modDevice.Text, |
| | | PalletNo = modTask.PalletNo, |
| | | Status = TaskStatusEnum.Complete, |
| | | StartLocat = modTask.StartLocate, |
| | | EndLocat = modTask.EndLocate, |
| | | InteractiveMsg = $"任务完成" |
| | | }; |
| | | if (modTask.Origin == "WMS") |
| | | { |
| | | // 反馈WMS |
| | | var requestMode = new TaskRequestWMS() |
| | | { |
| | | TaskNo = modTask.TaskNo, |
| | | PalletNo = modTask.PalletNo, |
| | | TaskType = ((int)TaskTypeEnum.Out).ToString(), |
| | | TaskStatus = ((int)TaskStatusEnum.Complete).ToString() |
| | | }; |
| | | HttpService httpService = new HttpService(); |
| | | var modResponseTask = httpService.RequestTask(requestMode).Result; |
| | | if (modResponseTask.StatusCode == 0) |
| | | { |
| | | modTaskMonitor.InteractiveMsg = "任务完成,返回给WMS任务完成"; |
| | | } |
| | | else |
| | | { |
| | | Log.Error(string.Format("任务反馈失败:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg)); |
| | | } |
| | | } |
| | | // 插入交互日志 |
| | | _db.Insertable(modTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | #endregion |
| | | |
| | | default: break; |
| | | } |
| | | |
| | |
| | | { |
| | | // 写入流程控制字 2 |
| | | var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); |
| | | if (retVal.IsSucceed) |
| | | if (!retVal.IsSucceed) |
| | | { |
| | | Log.Error("演示模式写入分道号失败!"); |
| | | break; |
| | |
| | | { |
| | | // 根据工位号,获取托盘号 |
| | | var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); |
| | | // 根据工位号获取托盘线该工位号的配置信息 |
| | | var numModel = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); |
| | | var posModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "目标工位" && m.IsDelete == false); |
| | | // 根据工位号获取 托盘线该工位号的配置信息 |
| | | var numModel = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId != modDevice.PlcId); |
| | | var posModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "目的工位" && m.IsDelete == false); |
| | | if (checkTaskMedel == null) |
| | | { |
| | | Log.Error(string.Format("组托失败根据码垛工位{0},获取托盘号失败!", modDevice.StationNum)); |
| | |
| | | // 码垛工位托盘号 |
| | | string palletNo = checkTaskMedel.PalletNo; |
| | | |
| | | // 是否演示模式 |
| | | if (PLCTaskAction.boDemo) |
| | | { |
| | | // 直接箱wms申请巷道 |
| | | var http = new HttpService(); |
| | | string TaskNo = "", EndLocate = ""; |
| | | string strMsg = http.RequestRoadWay(palletNo, modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo); |
| | | if (!strMsg.Contains("-1")) |
| | | if (strMsg.Contains("-1")) |
| | | { |
| | | Log.Error(string.Format("申请巷道失败,码垛工位{0};原因{1}", modDevice.StationNum, strMsg)); |
| | | break; |
| | |
| | | var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && m.Status == TaskStatusEnum.Wait); |
| | | if (taskModel != null) |
| | | { |
| | | // 写入码垛工位目标工位,写入交互流程组托成功 执行入库 |
| | | string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); // 获取入库取货工位 |
| | | // 获取入库取货工位 |
| | | string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); |
| | | |
| | | // 写入托盘输送线码垛工位 目的工位,写入交互流程组托成功 执行入库{若需要可以写入任务号等等其他信息} |
| | | var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue); |
| | | if (retVal.IsSucceed) |
| | | { |
| | | // 写入组托回复流程字 |
| | | // 写入码垛交互-组托回复流程字 |
| | | retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); |
| | | |
| | | // 将入库任务由正在执行改为正在执行 |
| | |
| | | var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && m.Status == TaskStatusEnum.Wait); |
| | | if (taskModel != null) |
| | | { |
| | | // 写入码垛工位目标工位,写入交互流程组托成功 执行入库 |
| | | string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); // 获取入库取货工位 |
| | | // 获取入库取货工位 |
| | | string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); |
| | | |
| | | // 写入托盘输送线码垛工位 目的工位,写入交互流程组托成功 执行入库{若需要可以写入任务号等等其他信息} |
| | | var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue); |
| | | if (retVal.IsSucceed) |
| | | { |