chengsc
2025-04-29 08eb1d72105662b301275fefd876be18df1b9fec
修改小车充电流程
3个文件已修改
137 ■■■■ 已修改文件
Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCService.cs 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs
@@ -76,12 +76,16 @@
    /// 极限电量 低于此电量不执行任务
    /// </summary>
    [Description("极限电量")]
    Dl = 30,
    Dl = 60,
    /// <summary>
    /// 健康电量 低于此电量 且无任务时去充电
    /// </summary>
    [Description("健康电量")]
    Dl2 = 80,
    Dl2 = 90,
    /// <summary>
    /// 极限电量 低于此电量不执行任务
    /// </summary>
    [Description("极限电量")]
    Dl3 = 50,
}
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -170,68 +170,66 @@
                        int valueTaskStr = Convert.ToInt32(valueTask);
                        //获取任务信息 根据  任务号、小车编号
                        var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP);
                        if (carTask == null)
                        if (carTask != null)
                        {
                            //var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "复位");
                            //plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//没有找到任务  复位
                            return;
                        }
                        var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
                        if (modFinshTask == null)
                        {
                            break;//没有查询到总任务
                        }
                        if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
                        {
                            carTask.Status = TaskStatusEnum.Complete;
                            carTask.UpdateTime = DateTime.Now;
                            _db.Updateable(carTask).ExecuteCommand();
                            //添加任务明细
                            var taskMonitor = new WcsTaskMonitor()
                            {
                                TaskNo = carTask.TaskNo,
                                PlcName = modDevice.Text,
                                InteractiveMsg = $"穿梭车反馈任务完成"
                            };
                            _db.Insertable(taskMonitor).ExecuteCommand();
                            //下发任务日志
                            
                            HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
                        }
                        //获取路径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();
                        //总任务下没有其他未执行小车的任务 变更总任务信息
                        if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
                        {
                            modFinshTask.Status = TaskStatusEnum.Complete;
                            modFinshTask.FinishDate = DateTime.Now;
                            _db.Updateable(modFinshTask).ExecuteCommand();
                            //判断任务是否充电任务,下发开始充电命令
                            if (modFinshTask.Levels == 888)
                            var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
                            if (modFinshTask == null)
                            {
                                //写入开始充电
                                var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "充电命令");
                                plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
                                break;//没有查询到总任务
                            }
                            if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
                            {
                                carTask.Status = TaskStatusEnum.Complete;
                                carTask.UpdateTime = DateTime.Now;
                                _db.Updateable(carTask).ExecuteCommand();
                                //添加任务明细
                                var taskMonitor = new WcsTaskMonitor()
                                {
                                    TaskNo = carTask.TaskNo,
                                    PlcName = modDevice.Text,
                                    InteractiveMsg = $"穿梭车反馈任务完成"
                                };
                                _db.Insertable(taskMonitor).ExecuteCommand();
                                //下发任务日志
                                HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
                            }
                            //反馈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>());
                            //获取路径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();
                            //总任务下没有其他未执行小车的任务 变更总任务信息
                            if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
                            {
                                modFinshTask.Status = TaskStatusEnum.Complete;
                                modFinshTask.FinishDate = DateTime.Now;
                                _db.Updateable(modFinshTask).ExecuteCommand();
                            
                                //判断任务是否充电任务,下发开始充电命令
                                if (modFinshTask.Levels == 888)
                                {
                                    //写入开始充电
                                    var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "充电命令");
                                    plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
                                }
                                //反馈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>());
                            }
                        }
                    }
                    
                    WcsTask modTask;
@@ -260,12 +258,12 @@
                    var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "四向车位置(Z)");
                    var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
                    var carXYZ = valuex.ToString().PadLeft(2, '0') + valuey.ToString().PadLeft(2, '0') + valuez.ToString().PadLeft(2, '0');
                    if (modTask == null || carTaskNext == null)
                    if (modTask == null)
                    {
                        //读取小车电量
                        var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "电池电量");
                        var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos);
                        if (resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl)
                        if (resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl)
                        {
                            var endLocateCar = "";
                            if (valuez == 1)
@@ -297,7 +295,7 @@
                            _db.Insertable(modCarTask).ExecuteCommand();
                            HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
                        }
                        else if(resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl2)
                        else if(resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl2)
                        {
                            //判断小车是否有空闲时间记录 没有:添加  有:判断当前时间与记录时间是否满足5分钟 满足:添加让小车去充电任务
                            var carTime = _db.Queryable<WcsCarTime>().First(m => m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
@@ -364,7 +362,10 @@
                        
                        return;
                    }
                    if (carTaskNext == null)
                    {
                        return;
                    }
                    if (carTaskNext.Status == TaskStatusEnum.Doing)
                    {
                        Thread.Sleep(3000);
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -417,11 +417,11 @@
                                {
                                    var modCarDl = plcPosition.FirstOrDefault(s => s.Text == "电池电量");
                                    var (resultDl, valueDl) = modbusUtil.GetDBValue(modCarDl.PosType, modCarDl.PlcPos);
                                    if (resultDl.IsSucceed && valueDl> FourWayCarDLEnum.Dl)
                                    if (resultDl.IsSucceed && valueDl> (int)FourWayCarDLEnum.Dl3)
                                    {
                                        //写入结束充电命令
                                        var modCdEnd = plcPosition.FirstOrDefault(s => s.Text == "充电命令");
                                        modbusUtil.SetDBValue(modCdEnd.PosType, modCdEnd.PlcPos.ToString(), "2") ;
                                        var resultDl22 = modbusUtil.SetDBValue(modCdEnd.PosType, modCdEnd.PlcPos.ToString(), "3") ;
                                        carErr = true;
                                        break; //暂缓分配,防止同层小车关机或失联导致阻挡路径
                                    }
@@ -505,13 +505,15 @@
                        }
                    }
                    var typeStr = "1";
                    var typeStr2 = 1;
                    if (waitTask.Levels  == 888 )
                    {
                        typeStr = "0";//小车任务是充电任务
                        typeStr2 = 0;
                    }
                    //获取小车去放货储位任务路径
                    var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, typeStr);
                    var datas2 = FourWayCarUtil.GetCarPathUp(data2, 1);
                    var datas2 = FourWayCarUtil.GetCarPathUp(data2, typeStr2);
                    
                    if (datas2 == null) 
                    {