wangxinhui
2025-07-07 45e6bfcdd4a4bf40e2b74c811763c369ff450d19
上传
已添加1个文件
已修改9个文件
202 ■■■■ 文件已修改
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineCPDBName.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_RgvCPDBName.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPB.cs 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPC.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/RGVJob_CP.cs 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/通信协议/成品输送IP地址分配_20250613.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/通信协议/输送线与上位机交互协议_20250707.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/通信协议/龙利得设备通讯协议.xls 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -199,7 +199,7 @@
                List<Dt_Task> tasks = new List<Dt_Task>();
                foreach (var item in taskDTOs)
                {
                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum) != null)
                    {
                        flag = true;
                        continue;
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs
@@ -85,15 +85,15 @@
        /// <summary>
        /// RGV接收任务号<br/>
        /// </summary>
        public short RgvTask { get; set; }
        public int RgvTask { get; set; }
        /// <summary>
        /// RGV结束任务号<br/>
        /// </summary>
        public short RgvEndTask { get; set; }
        public int RgvEndTask { get; set; }
        /// <summary>
        /// RGV上次任务号<br/>
        /// </summary>
        public short RgvLastTask { get; set; }
        public int RgvLastTask { get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€åé¦ˆ<br/>
        /// </summary>
@@ -103,4 +103,72 @@
        /// </summary>
        public short HeartBeat { get; set; }
    }
    public class W_RGVCPInfo : DeviceCommand
    {
        /// <summary>
        /// ä»»åŠ¡å·1<br/>
        /// </summary>
        public int WcsTask1 { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·2<br/>
        /// </summary>
        public int WcsTask2 { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·3<br/>
        /// </summary>
        public int WcsTask3 { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹<br/>
        /// 1定位<br/>
        /// 2取货<br/>
        /// 3放货<br/>
        /// 4取放货<br/>
        /// </summary>
        public short TaskType { get; set; }
        /// <summary>
        /// æ‰§è¡Œå·¥ä½<br/>
        /// 1:1工位<br/>
        /// 2:2工位<br/>
        /// 3:3工位<br/>
        /// 4:12工位<br/>
        /// 5:13工位<br/>
        /// 6:23工位<br/>
        /// 7:123工位<br/>
        /// </summary>
        public short WorkStation { get; set; }
        /// <summary>
        /// å–货地址1<br/>
        /// </summary>
        public short Qu1 { get; set; }
        /// <summary>
        /// å–货地址2<br/>
        /// </summary>
        public short Qu2 { get; set; }
        /// <summary>
        /// å–货地址3<br/>
        /// </summary>
        public short Qu3 { get; set; }
        /// <summary>
        /// æ”¾è´§åœ°å€1<br/>
        /// </summary>
        public short Fang1 { get; set; }
        /// <summary>
        /// æ”¾è´§åœ°å€2<br/>
        /// </summary>
        public short Fang2 { get; set; }
        /// <summary>
        /// æ”¾è´§åœ°å€3<br/>
        /// </summary>
        public short Fang3 { get; set; }
        /// <summary>
        /// å¿ƒè·³<br/>
        /// </summary>
        public short HearBeat { get; set; }
        /// <summary>
        /// ä¸‹å‘/完成任务标识<br/>
        /// 1确认任务下发<br/>
        /// 2确认任务完成<br/>
        /// </summary>
        public short TaskReceivedDone { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineCPDBName.cs
@@ -11,22 +11,22 @@
        /// <summary>
        /// å‘½ä»¤
        /// </summary>
        Command,
        W_Command,
        /// <summary>
        /// ç›®æ ‡åœ°å€
        /// </summary>
        TargetAddress,
        W_TargetAddress,
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        TaskNo,
        W_TaskNo,
        /// <summary>
        /// é¢„ç•™
        /// </summary>
        Reserve,
        W_Reserve,
        /// <summary>
        /// å¿ƒè·³
        /// </summary>
        Heart
        W_Heart
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_RgvCPDBName.cs
@@ -9,9 +9,17 @@
    public enum W_RgvCPDB
    {
        /// <summary>
        /// ä»»åŠ¡å·<br/>
        /// ä»»åŠ¡å·1<br/>
        /// </summary>
        WcsTask,
        WcsTask1,
        /// <summary>
        /// ä»»åŠ¡å·2<br/>
        /// </summary>
        WcsTask2,
        /// <summary>
        /// ä»»åŠ¡å·3<br/>
        /// </summary>
        WcsTask3,
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹<br/>
        /// 1定位<br/>
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPB.cs
@@ -72,16 +72,15 @@
                {
                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    if (deviceProRead != null && deviceProWrite!=null)
                    if (item.StationType==StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt() && deviceProRead != null && deviceProWrite!=null)
                    {
                        R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead.Command == 6 && conveyorLineInfoRead.TaskNo>0 && !string.IsNullOrEmpty(conveyorLineInfoRead.PalletCode))
                        if (conveyorLineInfoRead.Command == 5 && conveyorLineInfoRead.TaskNo>0 && !string.IsNullOrEmpty(conveyorLineInfoRead.PalletCode))
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x =>x.TaskNum== conveyorLineInfoRead.TaskNo && x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt() && x.DeviceCode==device.DeviceCode);
                            Dt_Task task = _taskRepository.QueryFirst(x =>x.TaskNum== conveyorLineInfoRead.TaskNo && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.DeviceCode==device.DeviceCode);
                            if (task != null)
                            {
                                //分配巷道 å­˜å…¥æ‰˜ç›˜æ•°æ®
                                List<Dt_Router> routers = _routerService.QueryNextRoutes(item.StationCode, "SC01_CP", task.TaskType);
                                Dt_Router? router = routers.FirstOrDefault();
                                if (routers == null || routers.Count == 0 || router == null)
@@ -95,9 +94,10 @@
                                    continue;
                                }
                                
                                device.SetValue(W_ConveyorLineCPDB.TargetAddress, router.NextPosi, item.StationCode);
                                device.SetValue(W_ConveyorLineCPDB.TaskNo, task.TaskNum, item.StationCode);
                                device.SetValue(W_ConveyorLineCPDB.Command, 1, item.StationCode);
                                device.SetValue(W_ConveyorLineCPDB.W_TargetAddress, router.NextPosi, item.StationCode);
                                device.SetValue(W_ConveyorLineCPDB.W_TaskNo, task.TaskNum, item.StationCode);
                                device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode);
                                task.CurrentAddress = item.StationCode;
                                task.NextAddress=router.NextPosi;
                                task.PalletType = 1;
                                task.PalletCode = conveyorLineInfoRead.PalletCode;
@@ -115,6 +115,40 @@
                            }
                        }
                    }
                    else if (item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && deviceProRead != null)
                    {
                        R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead.Command == 4 && conveyorLineInfoRead.TaskNo > 0)
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNo && x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode);
                            if (task != null)
                            {
                                List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.CurrentAddress == x.StartPosi);
                                Dt_Router? router = routers.FirstOrDefault();
                                if (routers == null || routers.Count == 0 || router == null)
                                {
                                    WriteError(item.StationName, $"未找到对应路由信息,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                    continue;
                                }
                                if (routers.Count > 1)
                                {
                                    WriteError(item.StationName, $"路由信息配置错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                    continue;
                                }
                                device.SetValue(W_ConveyorLineCPDB.W_Command, 2, item.StationCode);
                                task.NextAddress = router.NextPosi;
                                _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
                                WriteError(item.StationName, $"任务号{conveyorLineInfoRead.TaskNo}下一步");
                                //string? locationCode = _taskService.RequestAssignLocation(task.TaskNum, "AGV_CP");
                                //if (string.IsNullOrEmpty(locationCode) && task.TaskType != TaskTypeEnum.EmptyProductBack.ObjToInt())
                                //{
                                //    WriteError(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                //    continue;
                                //}
                            }
                        }
                    }
                    else
                    {
                        WriteError(item.StationName, $"未找到设备子编号{item.StationCode}的协议信息");
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPC.cs
@@ -75,7 +75,7 @@
                    if (item.StationType == StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt() && deviceProRead != null)
                    {
                        R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead.StatusPV == 3 && conveyorLineInfoRead.Command == 11)
                        if (conveyorLineInfoRead.StatusPV == 2 && conveyorLineInfoRead.Command == 11)
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && (x.TaskState == TaskStatusEnum.RGV_Execute.ObjToInt() || x.TaskState == TaskStatusEnum.RGV_Executing.ObjToInt() || x.TaskState == TaskStatusEnum.New.ObjToInt()));
                            if (task == null)
@@ -96,6 +96,7 @@
                                        _taskService.UpdateTask(taskNew, TaskStatusEnum.RGV_Execute);
                                    }
                                }
                                Thread.Sleep(1000);
                            }
                        }
                    }
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/RGVJob_CP.cs
@@ -75,28 +75,52 @@
                if (deviceProRead != null && deviceProWrite != null)
                {
                    R_RGVCPInfo rgvInfoRead = device.Communicator.ReadCustomer<R_RGVCPInfo>(deviceProRead.DeviceProAddress);
                    if (rgvInfoRead.Mode==4  && rgvInfoRead.State == 0 && rgvInfoRead.TaskDone==1)
                    W_RGVCPInfo rgvInfoWrite = device.Communicator.ReadCustomer<W_RGVCPInfo>(deviceProWrite.DeviceProAddress);
                    if (rgvInfoRead.Mode==5 && rgvInfoRead.State == 0 && rgvInfoRead.TaskDone==1)
                    {
                        List<Dt_Task> tasks = _taskRepository.QueryData(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState != TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode);
                        //获取任务
                        Dt_Task task = _taskRepository.QueryFirst(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode==device.DeviceCode);
                        if (task != null)
                        Dt_Task? task1 = tasks.FirstOrDefault(x => x.HeightType==1);
                        Dt_Task? task2 = tasks.FirstOrDefault(x => x.HeightType == 2);
                        Dt_Task? task3 = tasks.FirstOrDefault(x => x.HeightType == 3);
                        Dt_Task task = _taskRepository.QueryFirst(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode);
                        if (task != null && task1 == null)
                        {
                            device.SetValue(W_RgvCPDB.WcsTask, task.TaskNum);
                            device.SetValue(W_RgvCPDB.WcsTask1, task.TaskNum);
                            device.SetValue(W_RgvCPDB.TaskType, 4);
                            device.SetValue(W_RgvCPDB.WorkStation, 1);
                            device.SetValue(W_RgvCPDB.Qu1, task.CurrentAddress);
                            device.SetValue(W_RgvCPDB.Fang1, task.NextAddress);
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 1);
                            Thread.Sleep(1000);
                            //复位信号
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 0);
                            task.HeightType = 1;
                            _taskService.UpdateTask(task, TaskStatusEnum.RGV_Executing);
                        }else if (task != null && task2 == null)
                        {
                            device.SetValue(W_RgvCPDB.WcsTask1, task.TaskNum);
                            device.SetValue(W_RgvCPDB.TaskType, 4);
                            device.SetValue(W_RgvCPDB.WorkStation, 1);
                            device.SetValue(W_RgvCPDB.Qu2, task.CurrentAddress);
                            device.SetValue(W_RgvCPDB.Fang2, task.NextAddress);
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 1);
                            task.HeightType = 2;
                            _taskService.UpdateTask(task, TaskStatusEnum.RGV_Executing);
                        }
                        else if (task != null && task3 == null)
                        {
                            device.SetValue(W_RgvCPDB.WcsTask1, task.TaskNum);
                            device.SetValue(W_RgvCPDB.TaskType, 4);
                            device.SetValue(W_RgvCPDB.WorkStation, 1);
                            device.SetValue(W_RgvCPDB.Qu3, task.CurrentAddress);
                            device.SetValue(W_RgvCPDB.Fang3, task.NextAddress);
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 1);
                            task.HeightType = 3;
                            _taskService.UpdateTask(task, TaskStatusEnum.RGV_Executing);
                        }
                    }
                    else if(rgvInfoRead.Mode == 4 && rgvInfoRead.State == 1 && rgvInfoRead.TaskDone == 3)
                    else if((rgvInfoRead.Mode == 5 || rgvInfoRead.Mode == 4) && rgvInfoRead.TaskDone == 3)
                    {
                        //获取任务
                        Dt_Task task = _taskRepository.QueryFirst(x =>x.TaskNum==rgvInfoRead.RgvEndTask &&  _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode);
                        Dt_Task task = _taskRepository.QueryFirst(x =>x.TaskNum==rgvInfoRead.RgvTask &&  _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode);
                        if (task != null)
                        {
                            //获取下一个节点的路由
@@ -105,9 +129,6 @@
                            task.NextAddress = "";
                            task.DeviceCode = stationManger.StationDeviceCode;
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 2);
                            Thread.Sleep(1000);
                            //复位信号
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 0);
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute);
                            WriteError(device.DeviceName, $"RGV任务完成,任务号{rgvInfoRead.RgvEndTask}");
                        }
@@ -116,6 +137,14 @@
                            WriteError(device.DeviceName, $"未找到RGV对应的结束任务{rgvInfoRead.RgvEndTask}");
                        }
                    }
                    else if (rgvInfoRead.TaskDone == 2 && rgvInfoWrite.TaskReceivedDone == 1)
                    {
                        device.SetValue(W_RgvCPDB.TaskReceivedDone, 0);
                    }
                    else if (rgvInfoRead.TaskDone == 0 && rgvInfoWrite.TaskReceivedDone == 2)
                    {
                        device.SetValue(W_RgvCPDB.TaskReceivedDone, 0);
                    }
                }
                else
                {
ÏîÄ¿×ÊÁÏ/ͨÐÅЭÒé/³ÉÆ·ÊäËÍIPµØÖ··ÖÅä_20250613.xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/ͨÐÅЭÒé/ÊäËÍÏßÓëÉÏλ»ú½»»¥Ð­Òé_20250707.xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/ͨÐÅЭÒé/ÁúÀûµÃÉ豸ͨѶЭÒé.xls
Binary files differ