| | |
| | | AGV(mod); // AGV调度 |
| | | break; |
| | | case PLCTypeEnum.ShuttleCar: //穿梭车 |
| | | //if (mod.PlcIdIP == "10.26.254.28") |
| | | //{ |
| | | // break; |
| | | //} |
| | | ShuttleCar(mod); |
| | | break; |
| | | case PLCTypeEnum.RobotPalletizer: |
| | |
| | | var devStation = ""; //工位 |
| | | var endLocate = modFinshTask.EndRoadway; |
| | | var carcon = new carConverModel(); |
| | | var ip = ""; |
| | | if ( carcon.conveyorBei.Keys.Contains(endLocate)) |
| | | { |
| | | text = "输送线北"; |
| | | ip = "10.26.254.10"; |
| | | devStation = carcon.conveyorBei[endLocate]; |
| | | } |
| | | else if (carcon.conveyorNan.Keys.Contains(endLocate)) |
| | | { |
| | | text = "输送线南"; |
| | | ip = "10.26.254.11"; |
| | | devStation = carcon.conveyorNan[endLocate]; |
| | | } |
| | | if (text != "") |
| | | { |
| | | var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); |
| | | var modConn = new PLCUtil(modPlc); |
| | | |
| | | var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip); |
| | | //PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); |
| | | //var modConn = new PLCUtil(modPlc); |
| | | |
| | | var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation); |
| | | var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos); |
| | | if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730) |
| | | { |
| | | modConn.Close(); |
| | | //modConn.Close(); |
| | | return;//放货工位没有读取成功或不是空闲 |
| | | } |
| | | |
| | | var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "740"); |
| | | if (!plcResult.IsSucceed) |
| | | { |
| | | modConn.Close(); |
| | | //modConn.Close(); |
| | | return; |
| | | } |
| | | //添加任务明细 |
| | |
| | | InteractiveMsg = $"写入指令740:托盘到达{modFinshTask.EndRoadway}" |
| | | }; |
| | | _db.Insertable(taskMonitor).ExecuteCommand(); |
| | | modConn.Close(); |
| | | |
| | | //改变任务状态 |
| | | modFinshTask.Status = TaskStatusEnum.Complete; |
| | | modFinshTask.FinishDate = DateTime.Now; |
| | | _db.Updateable(modFinshTask).ExecuteCommand(); |
| | | |
| | | var locateOut = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate); |
| | | if (locateOut != null && locateOut.Make == "1") |
| | | { |
| | | locateOut.PalletNo = ""; |
| | | _db.Updateable(locateOut).ExecuteCommand(); |
| | | } |
| | | |
| | | //反馈WMS系统 任务完成 |
| | | if (modFinshTask.Origin == "WMS") |
| | | { |
| | | HttpService httpService = new HttpService(); |
| | | var requestMode = new TaskRequestWMS() |
| | | { |
| | | TaskNo = modFinshTask.TaskNo, |
| | | PalletNo = modFinshTask.PalletNo, |
| | | TaskType = ((int)modFinshTask.TaskType).ToString(), |
| | | TaskStatus = ((int)TaskStatusEnum.Complete).ToString() |
| | | }; |
| | | var modResponseTask = httpService.RequestTask(requestMode).Result; |
| | | modFinshTask.IsSuccess = TaskSuccessEnum.Success; |
| | | _db.Updateable(modFinshTask).ExecuteCommand(); |
| | | HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>()); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | modFinshTask.Status = TaskStatusEnum.Complete; |
| | | modFinshTask.FinishDate = DateTime.Now; |
| | | _db.Updateable(modFinshTask).ExecuteCommand(); |
| | | |
| | | if (modFinshTask.TaskType == TaskTypeEnum.Move) |
| | | { |
| | | var locatemove = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate); |
| | | if (locatemove != null && locatemove.Make == "1") |
| | | { |
| | | locatemove.PalletNo = ""; |
| | | _db.Updateable(locatemove).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | var locateIn = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.EndLocate); |
| | | if (locateIn != null && locateIn.Make == "1") |
| | | { |
| | | locateIn.PalletNo = string.IsNullOrWhiteSpace(modFinshTask.PalletNo) ? "pall" : modFinshTask.PalletNo; |
| | | _db.Updateable(locateIn).ExecuteCommand(); |
| | | } |
| | | |
| | | //反馈WMS系统 任务完成 |
| | | if (modFinshTask.Origin == "WMS") |
| | | { |
| | |
| | | _db.Updateable(modFinshTask).ExecuteCommand(); |
| | | HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>()); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | //判断任务是否充电任务,下发开始充电命令 |
| | |
| | | return;//前置任务未完成 |
| | | } |
| | | } |
| | | |
| | | //小车状态 |
| | | var (resultCar, valueCar) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos); |
| | | |
| | | //先复位 |
| | | var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "复位"); |
| | | plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1"); |
| | | var modPosTaskStatus2 = modDevice.listStation.FirstOrDefault(s => s.Text == "任务状态"); |
| | | var (resultTaskStatus2, valueTaskStatus2) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos); |
| | | if (resultCar.IsSucceed && valueCar == 1 && resultTaskStatus2.IsSucceed && (valueTaskStatus2 == 0 || valueTaskStatus2 == 1)) |
| | | { |
| | | //先复位 |
| | | var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "复位"); |
| | | plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1"); |
| | | } |
| | | else |
| | | { |
| | | return; |
| | | } |
| | | |
| | | List<Result> listResult = new List<Result>(); |
| | | List<Result> listResult = new List<Result>(); |
| | | //获取小车任务号 |
| | | var carTaskNo = FourWayCarUtil.GetTaskNo(); |
| | | |
| | |
| | | } |
| | | |
| | | var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "写入任务号"); |
| | | listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString())); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString())); |
| | | |
| | | var modNodeX = modDevice.listStation.FirstOrDefault(s => s.Text == "节点坐标X"); |
| | | var modNodeY = modDevice.listStation.FirstOrDefault(s => s.Text == "节点坐标Y"); |
| | |
| | | var epathz = ePath.Substring(4, 2); |
| | | var epathn = ePath.Substring(6, 1); |
| | | //写入交互位置 |
| | | listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), epathx)); |
| | | listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), epathy)); |
| | | listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), epathz)); |
| | | listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), epathn)); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), epathx)); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), epathy)); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), epathz)); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), epathn)); |
| | | } |
| | | |
| | | //这里是把后面的坐标全写0(为了防止上次任务坐标没被覆盖) |
| | | while (posX <= 43097) |
| | | { |
| | | listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), "0")); |
| | | listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), "0")); |
| | | listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), "0")); |
| | | listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "0")); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), "0")); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), "0")); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), "0")); |
| | | listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), "0")); |
| | | } |
| | | if (listResult.All(s => s.IsSucceed)) |
| | | { |
| | |
| | | var devStation = ""; |
| | | var endLocate = modTask.EndRoadway; |
| | | var carcon = new carConverModel(); |
| | | var ip = ""; |
| | | if (carcon.conveyorBei.Keys.Contains(endLocate)) |
| | | { |
| | | text = "输送线北"; |
| | | ip = "10.26.254.10"; |
| | | devStation = carcon.conveyorBei[endLocate]; |
| | | } |
| | | else if (carcon.conveyorNan.Keys.Contains(endLocate)) |
| | | { |
| | | text = "输送线南"; |
| | | ip = "10.26.254.11"; |
| | | devStation = carcon.conveyorNan[endLocate]; |
| | | } |
| | | if (text != "") |
| | | { |
| | | var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); |
| | | var modConn = new PLCUtil(modPlc); |
| | | var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip); |
| | | //var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); |
| | | //var modConn = new PLCUtil(modPlc); |
| | | |
| | | var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation); |
| | | var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos); |
| | | if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 720) |
| | | if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) == 720) |
| | | { |
| | | modConn.Close(); |
| | | return;//放货工位没有读取成功或不是空闲 |
| | | } |
| | | var listResultcon = new List<Result>(); |
| | | var listResultcon = new List<Result>(); |
| | | |
| | | //任务号与托盘条码 |
| | | var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "任务号"); |
| | | listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString())); |
| | | var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "托盘条码"); |
| | | listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString())); |
| | | //任务号与托盘条码 |
| | | var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "任务号"); |
| | | listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString())); |
| | | var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "托盘条码"); |
| | | listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString())); |
| | | |
| | | // 起始工位、目的工位 |
| | | var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "起始工位"); |
| | | listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum)); |
| | | var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "目的工位"); |
| | | listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate)); |
| | | // 起始工位、目的工位 |
| | | var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "起始工位"); |
| | | listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum)); |
| | | var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "目的工位"); |
| | | listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate)); |
| | | |
| | | if (listResultcon.All(s => s.IsSucceed)) |
| | | { |
| | | var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730"); |
| | | if (!plcResult.IsSucceed) |
| | | if (listResultcon.All(s => s.IsSucceed)) |
| | | { |
| | | modConn.Close(); |
| | | return; |
| | | var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730"); |
| | | if (!plcResult.IsSucceed) |
| | | { |
| | | //modConn.Close(); |
| | | return; |
| | | } |
| | | //添加任务明细 |
| | | var taskMonitor2 = new WcsTaskMonitor() |
| | | { |
| | | TaskNo = carTaskNext.TaskNo, |
| | | PlcName = modDevice.Text, |
| | | Status = TaskStatusEnum.Complete, |
| | | InteractiveMsg = $"写入指令730:工位是{modDeviceConver.StationNum}" |
| | | }; |
| | | _db.Insertable(taskMonitor2).ExecuteCommand(); |
| | | } |
| | | //添加任务明细 |
| | | var taskMonitor2 = new WcsTaskMonitor() |
| | | { |
| | | TaskNo = carTaskNext.TaskNo, |
| | | PlcName = modDevice.Text, |
| | | Status = TaskStatusEnum.Complete, |
| | | InteractiveMsg = $"写入指令730:工位是{modDeviceConver.StationNum}" |
| | | }; |
| | | _db.Insertable(taskMonitor2).ExecuteCommand(); |
| | | } |
| | | |
| | | modConn.Close(); |
| | | else if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | Log.Error(string.Format("输送线430:未找到对应的任务。")); |
| | | break; |
| | | } |
| | | // 改变任务状态 |
| | | taskInfo.Status = TaskStatusEnum.Complete; |
| | | taskInfo.FinishDate = DateTime.Now; |
| | | //modTask.Levels = 999; |
| | | _db.Updateable(taskInfo).ExecuteCommand(); |
| | | HubUtil.PublicTask(taskInfo.Adapt<WcsTaskOutput>()); |
| | | //// 改变任务状态 |
| | | //taskInfo.Status = TaskStatusEnum.Complete; |
| | | //taskInfo.FinishDate = DateTime.Now; |
| | | ////modTask.Levels = 999; |
| | | //_db.Updateable(taskInfo).ExecuteCommand(); |
| | | //HubUtil.PublicTask(taskInfo.Adapt<WcsTaskOutput>()); |
| | | // 插入任务明细 |
| | | var modInsertTaskMonitor = new WcsTaskMonitor() |
| | | { |
| | |
| | | StartLocat = Convert.ToString(starVal), |
| | | EndLocat = modDevice.StationNum, |
| | | }; |
| | | if (taskInfo.Origin == "WMS") |
| | | { |
| | | // 反馈WMS |
| | | var requestMode = new TaskRequestWMS() |
| | | { |
| | | TaskNo = taskInfo.TaskNo, |
| | | PalletNo = taskInfo.PalletNo, |
| | | TaskType = ((int)taskInfo.TaskType).ToString(), |
| | | TaskStatus = ((int)TaskStatusEnum.Complete).ToString() |
| | | }; |
| | | HttpService httpService = new HttpService(); |
| | | var modResponseTask = httpService.RequestTask(requestMode).Result; |
| | | if (modResponseTask.StatusCode == 0) |
| | | { |
| | | modInsertTaskMonitor.InteractiveMsg += ",返回给WMS任务完成"; |
| | | } |
| | | else |
| | | { |
| | | Log.Error(string.Format("任务反馈失败:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg)); |
| | | } |
| | | } |
| | | |
| | | //if (taskInfo.Origin == "WMS") |
| | | //{ |
| | | // // 反馈WMS |
| | | // var requestMode = new TaskRequestWMS() |
| | | // { |
| | | // TaskNo = taskInfo.TaskNo, |
| | | // PalletNo = taskInfo.PalletNo, |
| | | // TaskType = ((int)taskInfo.TaskType).ToString(), |
| | | // TaskStatus = ((int)TaskStatusEnum.Complete).ToString() |
| | | // }; |
| | | // HttpService httpService = new HttpService(); |
| | | // var modResponseTask = httpService.RequestTask(requestMode).Result; |
| | | // if (modResponseTask.StatusCode == 0) |
| | | // { |
| | | // modInsertTaskMonitor.InteractiveMsg += ",返回给WMS任务完成"; |
| | | // } |
| | | // else |
| | | // { |
| | | // Log.Error(string.Format("任务反馈失败:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg)); |
| | | // } |
| | | //} |
| | | |
| | | // 插入交互日志 |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | |