Administrator
4 天以前 8bc65cd3363d7148c356fe2eecca3590a9a3b4e0
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -8,7 +8,9 @@
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;
@@ -40,7 +42,7 @@
                    AGV(mod);                                       // AGV调度
                    break;
                case PLCTypeEnum.ShuttleCar: //穿梭车
                    //if (mod.PlcIdIP == "10.26.254.28")
                    //if (mod.PlcIdIP == "10.26.254.28")
                    //{
                    //    break;
                    //}
@@ -191,6 +193,30 @@
                            } 
                            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();
@@ -209,6 +235,19 @@
                            }
                            //获取路径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)
                            {
@@ -542,18 +581,23 @@
                    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();
@@ -1430,10 +1474,17 @@
            
            if (taskModel.taskType == "DPJRK")
            {
                //var code = "[{\"type\":\"SITE\",\"code\":\"B100101\"},{\"type\":\"PILE_COUNT\",\"code\":\"8\"}]";
                var code = new List<object>()
                {
                    new {type = "SITE" , code = modTask.StartLocate},
                    new { type = "PILE_COUNT", code = modTask.Qty }
                };
                taskModel.targetRoute.Add(new targetRoute() { 
                    seq = 0,
                    type = "MIX_CONDITION",
                   // code = "[{\"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 }]"
                });