| | |
| | | { |
| | | break;//出库锁定打开则不执行出库任务 |
| | | } |
| | | //判断该巷道有没有到达取货工位的入库任务,优先执行入库任务再执行移库/出库任务 |
| | | var taskIn = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In && s.EndRoadway == modDevice.StationNum && !string.IsNullOrEmpty(s.EndLocate)); |
| | | if (taskIn != null) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | PlcTaskInfo taskInfo = new PlcTaskInfo(); |
| | | if (modTask.TaskType == TaskTypeEnum.Move) |
| | | { |
| | | // 移库目标地址 |
| | | taskInfo = PLCCommon.GetEndPai(modTask.EndLocate.Substring(1, 2), modTask.EndLocate.Substring(2, 2), |
| | | taskInfo = PLCCommon.GetEndPai(modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(2, 2), |
| | | modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(4, 2), |
| | | modTask.EndLocate.Substring(6, 2)); |
| | | |
| | |
| | | break; |
| | | case TaskTypeEnum.Move: // 移库任务 |
| | | { |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号"); |
| | | var result = plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo); |
| | | if (!result.IsSucceed) |
| | | { |
| | | Log.Error($"{modDevice.Text}写入任务号失败"); |
| | | break; |
| | | } |
| | | result = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "870"); |
| | | //var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号"); |
| | | //var result = plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo); |
| | | //if (!result.IsSucceed) |
| | | //{ |
| | | // Log.Error($"{modDevice.Text}写入任务号失败"); |
| | | // break; |
| | | //} |
| | | var result = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "870"); |
| | | if (!result.IsSucceed) |
| | | { |
| | | Log.Error($"{modDevice.Text}控制字写入870失败"); |
| | |
| | | } |
| | | |
| | | //向WMS申请巷道 |
| | | strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal); |
| | | strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal, Convert.ToString(palletWeightVal)); |
| | | |
| | | if (!strMsg.Contains("-1")) |
| | | { |
| | |
| | | { |
| | | // 跺机非空闲等待 |
| | | break; |
| | | } |
| | | } |
| | | // 给PLC写入任务数据 |
| | | var listResult = new List<Result>(); |
| | | |
| | |
| | | var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); |
| | | break; |
| | | } |
| | | int chaNum = 0; |
| | | for (int i = 1; i <= boxNum; i++) |
| | | { |
| | | // 获取箱条码 |
| | |
| | | if (string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | Log.Error(string.Format("码垛工位{0},箱码为null插码失败!请人工强制结批。", modDevice.StationNum)); |
| | | // 写入插入结果 2:插码失败 |
| | | plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); |
| | | break; |
| | | } |
| | | Log.Information($"PLC请求插码,托盘号:{palletNo},箱码:{boxNo}"); |
| | | // 验证箱码表是否存在此箱码 |
| | | var boxInfo = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.BoxNo == boxNo).ToList(); |
| | | if (boxInfo.Count == 0) |
| | |
| | | plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); |
| | | break; |
| | | } |
| | | chaNum++; |
| | | } |
| | | // 插码成功 |
| | | var retVal2 = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1"); |
| | | if (retVal2.IsSucceed) |
| | | if (chaNum == boxNum) |
| | | { |
| | | //更新已插码数量 |
| | | checkTaskMedel.BoxCount += boxNum; |
| | | _db.Updateable(checkTaskMedel).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | // 写入失败 |
| | | Log.Error(string.Format("写入PLC插码结果失败,码垛工位{1},托盘号{2}", modDevice.StationNum, palletNo)); |
| | | } |
| | | // 插码成功 |
| | | var retVal2 = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1"); |
| | | if (retVal2.IsSucceed) |
| | | { |
| | | //更新已插码数量 |
| | | checkTaskMedel.BoxCount += boxNum; |
| | | _db.Updateable(checkTaskMedel).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | // 写入失败 |
| | | Log.Error(string.Format("写入PLC插码结果失败,码垛工位{1},托盘号{2}", modDevice.StationNum, palletNo)); |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case "40": |