| | |
| | | using Elastic.Clients.Elasticsearch.Snapshot; |
| | | using Furion.Logging; |
| | | using IoTClient; |
| | | using MessagePack; |
| | | using NewLife.Reflection; |
| | | using Newtonsoft.Json; |
| | | using Org.BouncyCastle.Ocsp; |
| | |
| | | break; |
| | | case "1": |
| | | { |
| | | Thread.Sleep(500); |
| | | |
| | | sysCacheService.HashAddOrUpdate("AlarmInfo_Car", plcConn.PlcIP, -1); |
| | | var modPosTaskStatus = modDevice.listStation.FirstOrDefault(s => s.Text == "任务状态"); |
| | | var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos); |
| | |
| | | } |
| | | if (carTask != null && carTask.Status != TaskStatusEnum.Complete) |
| | | { |
| | | //查找该任务的上一条子任务完成时间和当前时间间隔,如果间隔时间太短说明有问题,等3秒后再执行 |
| | | var carTaskAfter = _db.Queryable<WcsCarTasks>().First(m => m.IsDelete == false && m.CarTaskNo == valueTaskStr - 1 |
| | | && m.CarNo == modDevice.PlcIdIP && m.TaskNo == carTask.TaskNo); |
| | | if (carTaskAfter != null) |
| | | { |
| | | if (carTaskAfter.UpdateTime == null)//carTaskAfter.Status != TaskStatusEnum.Complete || |
| | | { |
| | | Log.Error($"四向车第二条子任务反馈完成时间异常:{carTaskAfter.TaskNo}"); |
| | | Thread.Sleep(3000); |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | TimeSpan difference = DateTime.Now - Convert.ToDateTime(carTaskAfter.UpdateTime); |
| | | double seconds = difference.TotalSeconds; |
| | | if (seconds < 3) |
| | | { |
| | | Log.Error($"四向车第二条子任务反馈完成时间异常:{carTaskAfter.TaskNo}"); |
| | | Thread.Sleep(3000); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | carTask.Status = TaskStatusEnum.Complete; |
| | | carTask.UpdateTime = DateTime.Now; |
| | | _db.Updateable(carTask).ExecuteCommand(); |
| | |
| | | carTaskNext.Status = TaskStatusEnum.Complete; |
| | | carTaskNext.UpdateTime = DateTime.Now; |
| | | _db.Updateable(carTaskNext).ExecuteCommand(); |
| | | |
| | | carTaskNext = null; |
| | | |
| | | Log.Error($"四向车第一条子任务没自动完成:{carTaskNext.TaskNo}"); |
| | | carTaskNext = null; |
| | | } |
| | | } |
| | | //总任务下没有其他未执行小车的任务 变更总任务信息 |
| | |
| | | { |
| | | return; |
| | | } |
| | | |
| | | |
| | | if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV )) |
| | | |
| | | var conveyList1 = new List<string>() { "B100101", "B030101" };//空托收集区储位 |
| | | if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV && !conveyList1.Contains(s.EndLocate))) |
| | | { |
| | | return; // 有目的位置一致且正在执行的任务 |
| | | return; // 有目的位置一致且正在执行的任务(不包含空托收集) |
| | | } |
| | | |
| | | //下发AGV任务 |