| | |
| | | using Elastic.Clients.Elasticsearch.Snapshot; |
| | | using Furion.Logging; |
| | | using IoTClient; |
| | | using MessagePack; |
| | | using NewLife.Reflection; |
| | | using Newtonsoft.Json; |
| | | using Org.BouncyCastle.Ocsp; |
| | | using SixLabors.ImageSharp.ColorSpaces; |
| | | using WCS.Application.Entity; |
| | |
| | | AGV(mod); // AGV调度 |
| | | break; |
| | | case PLCTypeEnum.ShuttleCar: //穿梭车 |
| | | //if (mod.PlcIdIP == "10.26.254.28") |
| | | //if (mod.PlcIdIP == "10.26.254.28") |
| | | //{ |
| | | // break; |
| | | //} |
| | |
| | | } |
| | | if (carTask != null && carTask.Status != TaskStatusEnum.Complete) |
| | | { |
| | | //查找该任务的上一条子任务完成时间和当前时间间隔,如果间隔时间太短说明有问题,等3秒后再执行 |
| | | var carTaskAfter = _db.Queryable<WcsCarTasks>().First(m => m.IsDelete == false && m.Status == TaskStatusEnum.Complete && m.CarTaskNo == valueTaskStr - 1 |
| | | && m.CarNo == modDevice.PlcIdIP && m.TaskNo == carTask.TaskNo); |
| | | if (carTaskAfter != null) |
| | | { |
| | | if (carTaskAfter.Status != TaskStatusEnum.Complete || carTaskAfter.UpdateTime == null) |
| | | { |
| | | Log.Error($"四向车第二条子任务反馈完成时间异常:{carTaskNext.TaskNo}"); |
| | | Thread.Sleep(3000); |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | TimeSpan difference = DateTime.Now - Convert.ToDateTime(carTaskAfter.UpdateTime); |
| | | double seconds = difference.TotalSeconds; |
| | | if (seconds < 3) |
| | | { |
| | | Log.Error($"四向车第二条子任务反馈完成时间异常:{carTaskNext.TaskNo}"); |
| | | Thread.Sleep(3000); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | carTask.Status = TaskStatusEnum.Complete; |
| | | carTask.UpdateTime = DateTime.Now; |
| | | _db.Updateable(carTask).ExecuteCommand(); |
| | |
| | | } |
| | | //获取路径2的任务 下发 |
| | | carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing).OrderBy(m => m.CreateTime).First(); |
| | | //carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing && m.CarTaskNo != valueTaskStr).OrderBy(m => m.CreateTime).First(); |
| | | if (carTaskNext != null) |
| | | { |
| | | if (carTaskNext.CarTaskNo != null && carTaskNext.CarTaskNo < valueTaskStr) |
| | | { |
| | | carTaskNext.Status = TaskStatusEnum.Complete; |
| | | carTaskNext.UpdateTime = DateTime.Now; |
| | | _db.Updateable(carTaskNext).ExecuteCommand(); |
| | | |
| | | carTaskNext = null; |
| | | Log.Error($"四向车第一条子任务没自动完成:{carTaskNext.TaskNo}"); |
| | | } |
| | | } |
| | | //总任务下没有其他未执行小车的任务 变更总任务信息 |
| | | if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete) |
| | | { |
| | |
| | | |
| | | 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)) |
| | | 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"); |
| | | var carnew = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Doing).OrderBy(m => m.CreateTime).First(); |
| | | |
| | | if (carnew == null) |
| | | { |
| | | //先复位 |
| | | 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(); |
| | | |
| | |
| | | new {type = "SITE" , code = modTask.StartLocate}, |
| | | new { type = "PILE_COUNT", code = modTask.Qty } |
| | | }; |
| | | |
| | | taskModel.targetRoute.Add(new targetRoute() { |
| | | seq = 0, |
| | | type = "MIX_CONDITION", |
| | | code = code.ToString() // "[{\"type":\"SITE", code = modTask.StartLocate },new { type = "PILE_COUNT", code = modTask.Qty }]" |
| | | code = JsonConvert.SerializeObject(code) // "[{\"type":\"SITE", code = modTask.StartLocate },new { type = "PILE_COUNT", code = modTask.Qty }]" |
| | | |
| | | |
| | | }); |