1
duyongjia
2024-11-20 81f3d2205ff6ee8d173f6d30f57ad510ad86e0bf
1
已删除20个文件
已修改6个文件
198 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/85efd134-b668-40f8-8629-2948e9750cf5.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a44a257d-7aae-4206-85b3-985b8945f499.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/af78ea87-ca7f-4649-b0ba-baafef3697a0.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b34914de-7277-4b00-bb40-84b39fb331bd.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/ServiceLog/ServiceLogger.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/24GKH202 智汇奇策 郭店智能立体库项目技术协议-2024.10.25.pdf 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/PLC地址.png 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/入库生成任务报文.txt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/初始化.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/堆垛机通信协议.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/工作进度预估-嘉兴海宁 尖山&郭店 WMS&WCS&堆垛机电控项目-2024.09.14.pdf 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/库位.png 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/异常出库生成任务报文.txt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/智汇奇策郭店尖山项目通清单1031.xls 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/流程图1.png 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/流程图2.png 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/流程说明.doc 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/组立机上料剩余层数回写(DB28).png 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/郭店-产品89厂立库布局图(1).dwg 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/郭店-八厂自动化项目立体库技术协议0302(2).docx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/郭店项目实施工作安排及进度管理表-第1周-2024.11.13.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/85efd134-b668-40f8-8629-2948e9750cf5.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a44a257d-7aae-4206-85b3-985b8945f499.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/af78ea87-ca7f-4649-b0ba-baafef3697a0.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b34914de-7277-4b00-bb40-84b39fb331bd.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/ServiceLog/ServiceLogger.cs
@@ -74,5 +74,26 @@
        {
            return Directory.GetFiles(folderPath, fileName + "*.log");
        }
        public static void WriteDebug(string fileName, string msg)
        {
            StringBuilder stringBuilder = new StringBuilder(msg);
            stringBuilder.Append(Environment.NewLine);
            stringBuilder.Append(Environment.NewLine);
            WriteLogToFile("APIDebug_" + fileName, stringBuilder.ToString());
        }
        public static void WriteInfo(string fileName, string msg)
        {
            StringBuilder stringBuilder = new StringBuilder(msg);
            stringBuilder.Append(Environment.NewLine);
            stringBuilder.Append(Environment.NewLine);
            WriteLogToFile("APIInfo_" + fileName, stringBuilder.ToString());
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -12,7 +12,7 @@
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_GuoDian;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域
  "Cors": {
    "PolicyName": "CorsIpAccess", //策略名称
@@ -25,6 +25,6 @@
  "ExpMinutes": 120,
  "QuartzJobAutoStart": true,
  "MESApi": "http://10.0.250.12:8888/agv/v1/CMD",
  "ConveyorLineApi": "http://10.0.250.12:8888/wcs/goBack"//空车出库任务信息获取地址
  "ConveyorLineApi": "http://10.0.250.12:8888/wcs/goBack" //空车出库任务信息获取地址
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -16,6 +16,7 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
using SqlSugar.Extensions;
@@ -147,7 +148,9 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
               // ServiceLogger.WriteLogToFile("");
                string inparam = JsonConvert.SerializeObject(taskDTO);
                ServiceLogger.WriteDebug("ReceiveTask", $"ReceiveMESTask方法入参{inparam}");
                Dt_Task task = new Dt_Task();
                Dt_Task taskinfo = BaseDal.QueryFirst(x => x.TaskNum == taskDTO.task_id);
                if(taskDTO.cmd==101)//如果是101按旧的任务号去查
@@ -157,6 +160,7 @@
                if (taskDTO.cmd!=3001&& taskDTO.cmd != 101 && taskinfo != null)
                {
                    ServiceLogger.WriteDebug("ReceiveTask", $"任务号重复,任务号:{taskDTO.task_id}");
                    return content = WebResponseContent.Instance.Error($"任务号重复,任务号:{taskDTO.task_id}");
                }
                Dt_LocationInfo locationsrc = _locationInfoRepository.QueryFirst(x => x.Remark == taskDTO.src_station.ToString());
@@ -175,6 +179,7 @@
                        }
                        else
                        {
                            ServiceLogger.WriteDebug("ReceiveTask", $"WCS未查询到源站点对应的库位,源站点:{taskDTO.dest_station.ToString()}");
                            return content = WebResponseContent.Instance.Error($"WCS未查询到源站点对应的库位,源站点:{taskDTO.dest_station.ToString()}");
                        }
                        break;
@@ -193,6 +198,7 @@
                            }
                            else
                            {
                                ServiceLogger.WriteDebug("ReceiveTask", $"WCS未查询到源站点对应的库位,源站点:{taskDTO.dest_station.ToString()}");
                                return content = WebResponseContent.Instance.Error($"WCS未查询到源站点对应的库位,源站点:{taskDTO.dest_station.ToString()}");
                            }
                        }
@@ -202,6 +208,7 @@
                            {
                                UpdateTaskStatus(taskinfo.TaskId, (int)TaskInStatusEnum.AGV_InExecuting);
                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV入库执行中");
                                ServiceLogger.WriteDebug("ReceiveTask", $"AGV入库执行中(自动3001)更新状态成功,任务号:{taskinfo.TaskId}");
                                return content = WebResponseContent.Instance.OK($"AGV入库执行中(自动3001)更新状态成功,任务号:{taskinfo.TaskId}");
                            }
                            else
@@ -217,10 +224,12 @@
                            //更新任务表中NextAddress字段为新的任务号   taskDTO.weight-旧的任务号   taskDTO.task_id-新的任务号
                            UpdateTaskStatus(taskinfo.TaskId, taskDTO.task_id, (int)TaskInStatusEnum.AGV_InFinish);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV搬运完成");
                            ServiceLogger.WriteDebug("ReceiveTask", $"AGV搬运完成(101)更新状态成功,任务号:{taskinfo.TaskId}");
                            return content = WebResponseContent.Instance.OK($"AGV搬运完成(101)更新状态成功,任务号:{taskinfo.TaskId}");
                        }
                        else
                        {
                            ServiceLogger.WriteDebug("ReceiveTask", $"AGV搬运完成(101)更新状态时,查询不到任务号");
                            return content = WebResponseContent.Instance.Error($"AGV搬运完成(101)更新状态时,查询不到任务号");
                        }
                        break;
@@ -252,7 +261,8 @@
                        }
                        else
                        {
                           return  content = WebResponseContent.Instance.Error($"WCS未查询到目标站点对应的库位,目标站点:{taskDTO.dest_station.ToString()}");
                            ServiceLogger.WriteDebug("ReceiveTask", $"WCS未查询到目标站点对应的库位,目标站点:{taskDTO.dest_station.ToString()}");
                            return  content = WebResponseContent.Instance.Error($"WCS未查询到目标站点对应的库位,目标站点:{taskDTO.dest_station.ToString()}");
                        }
                        break;
                    case 104://组立机上料  æš‚存位-->组立机
@@ -270,7 +280,8 @@
                            }
                            else
                            {
                              return  content = WebResponseContent.Instance.Error($"WCS未查询到目标站点对应的库位,目标站点:{task.TargetAddress.ToString()}");
                                ServiceLogger.WriteDebug("ReceiveTask", $"WCS未查询到目标站点对应的库位,目标站点:{task.TargetAddress.ToString()}");
                                return  content = WebResponseContent.Instance.Error($"WCS未查询到目标站点对应的库位,目标站点:{task.TargetAddress.ToString()}");
                            }
                            //根据目标地址(组立机)查询默认的执行任务的小堆垛机编号
                            Dt_LocationInfo locationtemp2 = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress.ToString());
@@ -280,6 +291,8 @@
                            }
                            else
                            {
                                ServiceLogger.WriteDebug("ReceiveTask", $"WCS未查询到组立机对应的默认小堆垛机配置");
                                return content = WebResponseContent.Instance.Error($"WCS未查询到组立机对应的默认小堆垛机配置");
                            }
                            
@@ -292,7 +305,7 @@
                task.TaskNum = taskDTO.task_id;
                task.PalletCode = taskDTO.CarId;
                task.Roadway = "SC01";
                if (string.IsNullOrEmpty(task.SourceAddress))//如果不是站点,直接取行列层
                {
                    task.SourceAddress = $"SC01-{taskDTO.src_rack.ToString().PadLeft(3, '0')}-{taskDTO.src_col.ToString().PadLeft(3, '0')}-{taskDTO.src_row.ToString().PadLeft(3, '0')}";
@@ -310,10 +323,12 @@
                {
                    if (srcLocation.EnableStatus == (int)EnableStatusEnum.Disable)
                    {
                        ServiceLogger.WriteDebug("ReceiveTask", $"源地址已禁用:{srcLocation.LocationCode}");
                        return content = WebResponseContent.Instance.Error($"源地址已禁用:{srcLocation.LocationCode}");
                    }
                    if (tarLocation.EnableStatus == (int)EnableStatusEnum.Disable)
                    {
                        ServiceLogger.WriteDebug("ReceiveTask", $"目标地址已禁用:{tarLocation.LocationCode}");
                        return content = WebResponseContent.Instance.Error($"目标地址已禁用:{tarLocation.LocationCode}");
                    }
                    if (taskDTO.cmd != 101)//入库时不需要判断是否锁定,锁定状态是在生成任务时锁定
@@ -323,10 +338,13 @@
                        {
                            if (srcLocation.LocationStatus == (int)LocationStatusEnum.Lock)
                            {
                                ServiceLogger.WriteDebug("ReceiveTask", $"源地址已锁定:{srcLocation.LocationCode}");
                                return content = WebResponseContent.Instance.Error($"源地址已锁定:{srcLocation.LocationCode}");
                            }
                            if (tarLocation.LocationStatus == (int)LocationStatusEnum.Lock)
                            {
                                ServiceLogger.WriteDebug("ReceiveTask", $"目标地址已锁定:{tarLocation.LocationCode}");
                                return content = WebResponseContent.Instance.Error($"目标地址已锁定:{tarLocation.LocationCode}");
                            }
                        }
@@ -336,6 +354,8 @@
                        //WCS查询库位状态是否为“空闲”并且未禁用,锁定库位修改库位状态为“锁定”,生成WCS产品入库任务,加入WCS任务队列中。          
                        if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free)
                        {
                            ServiceLogger.WriteDebug("ReceiveTask", $"入库-目标地址不是空闲状态:{tarLocation.LocationCode}");
                            return content = WebResponseContent.Instance.Error($"入库-目标地址不是空闲状态:{tarLocation.LocationCode}");
                        }
                        //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
@@ -354,10 +374,14 @@
                        //WCS查询库位状态是否为“有货”,库位/暂存库位是否“空闲”
                        if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock)
                        {
                            ServiceLogger.WriteDebug("ReceiveTask", $"移库-源地址不是有货状态:{srcLocation.LocationCode}");
                            return content = WebResponseContent.Instance.Error($"移库-源地址不是有货状态:{srcLocation.LocationCode}");
                        }
                        if(tarLocation.LocationStatus != (int)LocationStatusEnum.Free)
                        {
                            ServiceLogger.WriteDebug("ReceiveTask", $"移库-目标地址不是空闲状态:{srcLocation.LocationCode}");
                            return content = WebResponseContent.Instance.Error($"移库-目标地址不是空闲状态:{srcLocation.LocationCode}");
                        }
                        srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
@@ -369,6 +393,8 @@
                        //WCS查询库位状态是否为“有货”
                        if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock)
                        {
                            ServiceLogger.WriteDebug("ReceiveTask", $"异常出库-源地址不是有货状态:{srcLocation.LocationCode}");
                            return content = WebResponseContent.Instance.Error($"异常出库-源地址不是有货状态:{srcLocation.LocationCode}");
                        }
                        srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
@@ -384,6 +410,8 @@
                        //WCS查询暂存库位是否“有货”
                        if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock)
                        {
                            ServiceLogger.WriteDebug("ReceiveTask", $"空车出库-源地址不是有货状态:{srcLocation.LocationCode}");
                            return content = WebResponseContent.Instance.Error($"空车出库-源地址不是有货状态:{srcLocation.LocationCode}");
                        }
                        //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
@@ -398,6 +426,8 @@
                        //WCS查询暂存库位是否“有货”
                        if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock)
                        {
                            ServiceLogger.WriteDebug("ReceiveTask", $"上料任务-源地址不是有货状态:{srcLocation.LocationCode}");
                            return content = WebResponseContent.Instance.Error($"上料任务-源地址不是有货状态:{srcLocation.LocationCode}");
                        }
                        //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
@@ -408,6 +438,7 @@
                }
                else
                {
                    ServiceLogger.WriteDebug("ReceiveTask", $"库位地址不存在,任务号:{task.TaskNum}");
                    return content = WebResponseContent.Instance.Error($"库位地址不存在,任务号:{task.TaskNum}");
                }
@@ -431,12 +462,13 @@
                    _unitOfWorkManage.RollbackTran();
                    throw;
                }
                content = WebResponseContent.Instance.OK("成功",task);
                ServiceLogger.WriteDebug("ReceiveTask", $"接收任务成功,任务号:{task.TaskNum}");
                content = WebResponseContent.Instance.OK($"接收任务成功,任务号:{task.TaskNum}", task);
                
            }
            catch (Exception ex)
            {
                ServiceLogger.WriteDebug("ReceiveTask", $"任务接收错误,错误信息:{ex.Message}");
                content = WebResponseContent.Instance.Error($"任务接收错误,错误信息:{ex.Message}");
            }
            return content;
@@ -844,6 +876,7 @@
                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                        if (res != null && res.code != 0)
                        {
                            ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            content = WebResponseContent.Instance.Error($"大堆垛机完成出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                        }
@@ -851,6 +884,7 @@
                    catch (Exception ex)
                    {
                        _unitOfWorkManage.RollbackTran();
                        ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机执行出库任务失败!,任务号:【{taskNum}】,失败信息:【{ex.Message}】");
                        content = WebResponseContent.Instance.Error($"大堆垛机执行出库任务失败!,任务号:【{taskNum}】,失败信息:【{ex.Message}】");
                    }
@@ -880,16 +914,25 @@
                        //入库完成,回传MES  å…¥åº“完成回传task.NextAddress ä¹‹å‰101请求时存的新任务号
                        MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = int.Parse(task.NextAddress), status = 6 };
                        string inparam = JsonConvert.SerializeObject(sendcmd);
                        ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成入库任务后回传MES入参:{inparam}");
                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                        if (res != null && res.code != 0)
                        {
                            ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成入库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            content = WebResponseContent.Instance.Error($"大堆垛机完成入库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                        }
                        else
                        {
                            ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成入库任务后回传MES成功!,任务号:【{taskNum}】");
                        }
                    }
                    catch (Exception ex)
                    {
                        _unitOfWorkManage.RollbackTran();
                        ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机执行入库任务失败!,任务号:【{taskNum}】,失败信息:【{ex.Message}】");
                        content = WebResponseContent.Instance.Error($"大堆垛机执行入库任务失败!,任务号:【{taskNum}】,失败信息:【{ex.Message}】");
                    }
                }
@@ -902,7 +945,7 @@
                        srcLocation.LocationStatus = (int)LocationStatusEnum.Free;
                        Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                        srcLocation.LocationStatus = (int)LocationStatusEnum.InStock;
                        tarLocation.LocationStatus = (int)LocationStatusEnum.InStock;
                        UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
@@ -917,9 +960,12 @@
                        //移库完成,回传MES
                        //回传到WMS
                        MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
                        string inparam = JsonConvert.SerializeObject(sendcmd);
                        ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成出库任务后回传MES入参:{inparam}");
                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                        if (res != null && res.code != 0)
                        {
                            ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机完成出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                            content = WebResponseContent.Instance.Error($"大堆垛机完成出库任务后回传MES失败!,任务号:【{taskNum}】,失败信息:【{res.message}】");
                        }
@@ -927,6 +973,7 @@
                    catch (Exception ex)
                    {
                        _unitOfWorkManage.RollbackTran();
                        ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"大堆垛机执行出库任务失败!,任务号:【{taskNum}】,失败信息:【{ex.Message}】");
                        content = WebResponseContent.Instance.Error($"大堆垛机执行出库任务失败!,任务号:【{taskNum}】,失败信息:【{ex.Message}】");
                    }
                }
@@ -950,6 +997,8 @@
                        _unitOfWorkManage.CommitTran();
                        //上料完成,回传WMS
                        MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
                        string inparam = JsonConvert.SerializeObject(sendcmd);
                        ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"小堆垛机执行出库任务回传MES入参{inparam}");
                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                        if (res != null && res.code != 0)
                        {
@@ -973,10 +1022,14 @@
                                            startPlan= "101"+ SourceCodes[2].Substring(1,2);
                                        }
                                        DeliveryPlan send = new DeliveryPlan { startPlan = startPlan, isQuit = false, CarId = task.PalletCode };
                                        string inparam2 = JsonConvert.SerializeObject(send);
                                        ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"小堆垛机执行出库任务回传MES入参{inparam2}");
                                        ApiInvoke.DeliveryPlanCMD(send);//回调MES接口生成空车出库任务
                                        //所有的层数都取完,需要把暂存位状态改为空闲状态
                                        srcLocation.LocationStatus = (int)LocationStatusEnum.Free;
                                        _locationInfoRepository.UpdateData(srcLocation);
                                    }
                                }
                              
                            }
@@ -986,19 +1039,23 @@
                    catch (Exception ex)
                    {
                        _unitOfWorkManage.RollbackTran();
                        ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"小堆垛机执行出库任务失败!,任务号:【{taskNum}】,失败信息:【{ex.Message}】");
                        content = WebResponseContent.Instance.Error($"小堆垛机执行出库任务失败!,任务号:【{taskNum}】,失败信息:【{ex.Message}】");
                    }
                }
                else
                {
                    ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                }
                content = WebResponseContent.Instance.OK();
                ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"任务完成成功,任务号:【{taskNum}】");
                content = WebResponseContent.Instance.OK($"任务完成成功,任务号:【{taskNum}】");
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
                ServiceLogger.WriteDebug("StackCraneTaskCompleted", $"任务完成异常,任务号:【{taskNum}】{ex.Message}");
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】{ex.Message}");
            }
            return content;
        }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -1,5 +1,6 @@
using HslCommunication;
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using System;
using System.Collections.Generic;
@@ -7,6 +8,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.ServiceLog;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Enums;
@@ -47,7 +49,8 @@
        public Task Execute(IJobExecutionContext context)
        {
            CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
            //CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
            CommonStackerCrane commonStackerCrane = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC01") as CommonStackerCrane;
            try
            {  
                if (commonStackerCrane != null)
@@ -102,8 +105,8 @@
            //查询提升机/组立机信号
            //Task.Run(delegate
            //{
            Task.Run(delegate
            {
                try
                {
                   
@@ -145,11 +148,11 @@
                                if(IsWriteOne == 0) 
                                {
                                  
                                    commonStackerCrane.Communicator.Write<short>("DB1.0.0", 1);
                                   var d= commonStackerCrane.Communicator.Write<short>("DB1.0.0", 1);
                                }
                                //读取提升机信号,确定是否提升完成
                               
                                commonStackerCrane.Communicator.Read<short>("DB2.2.0");
                              IsFinish=  commonStackerCrane.Communicator.Read<short>("DB2.2.0");
                            }
                            else if (task3001.SourceAddress == "SC01-002-000-002")//WMS 1002站点
                            {
@@ -166,10 +169,14 @@
                            {
                                MESSendCMD sendcmd = new MESSendCMD { cmd = 2002, task_id = task3001.TaskNum, status = 6 };
                                MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
                                string inparam = JsonConvert.SerializeObject(sendcmd);
                                WriteDebug(nameof(CommonStackerCraneJob), $"提升机提升完成,回传WMS,入参:{inparam}");
                                if (res != null && res.code != 0)
                                {
                                    WriteDebug(nameof(CommonStackerCraneJob), $"提升机提升完成,回传WMS失败!任务号{task3001.TaskNum}");
                                }
                            }
                        }
@@ -239,9 +246,9 @@
                {
                    WriteError(nameof(CommonStackerCraneJob), "查询或写入PLC状态失败!", ex);
                }
            //});
            });
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs
@@ -56,16 +56,17 @@
                CommonStackerCrane? stackerCraneOne = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC02") as CommonStackerCrane;
                CommonStackerCrane? stackerCraneTwo = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC03") as CommonStackerCrane;
                Dt_DeviceInfo deviceSC02= _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC02");
                Dt_DeviceInfo deviceSC03 = _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC03");
                if(deviceSC02.DeviceStatus=="0")
                {
                    stackerCraneOne = null;
                }
                if(deviceSC03.DeviceStatus=="0")
                {
                    stackerCraneTwo = null;
                }
                //Dt_DeviceInfo deviceSC02= _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC02");
                //Dt_DeviceInfo deviceSC03 = _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC03");
                //if(deviceSC02.DeviceStatus=="0")
                //{
                //    stackerCraneOne = null;
                //}
                //if(deviceSC03.DeviceStatus=="0")
                //{
                //    stackerCraneTwo = null;
                //}
                stackerCraneOne.CheckStackerCraneTaskCompleted();
                Dt_Task? task = GetTask();
                if (task != null)
                {
@@ -159,9 +160,11 @@
                        }
                    }
                    else//不能正常工作状态
                    else//SC02不能正常工作状态,这里需要判断sc02是否禁用,如果已禁用,才可以启动sc03
                    {
                        if (stackerCraneTwo != null)
                        Dt_DeviceInfo deviceSC02 = _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC02");
                        if (deviceSC02.DeviceStatus=="0"&& stackerCraneTwo != null)
                        {
                            if (!stackerCraneTwo.IsEventSubscribed)
                            {
@@ -198,9 +201,10 @@
                            return stackerCraneTwo;
                        }
                    }
                    else
                    else//SC03不能正常工作状态,这里需要判断sc03是否禁用,如果已禁用,才可以启动sc02
                    {
                        if (stackerCraneOne != null)
                        Dt_DeviceInfo deviceSC03 = _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC03");
                        if (deviceSC03.DeviceStatus=="0"&&stackerCraneOne != null)
                        {
                            if (!stackerCraneOne.IsEventSubscribed)
                            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj
@@ -7,7 +7,7 @@
    </PropertyGroup>
    <ItemGroup>
      <PackageReference Include="WIDESEAWCS_QuartzJob" Version="2.1.0" />
      <PackageReference Include="WIDESEAWCS_QuartzJob" Version="3.0.0" />
    </ItemGroup>
    <ItemGroup>
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/24GKH202 ÖÇ»ãÆæ²ß ¹ùµêÖÇÄÜÁ¢Ìå¿âÏîÄ¿¼¼ÊõЭÒé-2024.10.25.pdf
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/PLCµØÖ·.png
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Èë¿âÉú³ÉÈÎÎñ±¨ÎÄ.txt
ÎļþÒÑɾ³ý
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/³õʼ»¯.txt
ÎļþÒÑɾ³ý
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¶Ñ¶â»úͨÐÅЭÒé.xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¹¤×÷½ø¶ÈÔ¤¹À-¼ÎÐ˺£Äþ ¼âɽ&¹ùµê WMS&WCS&¶Ñ¶â»úµç¿ØÏîÄ¿-2024.09.14.pdf
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¿âλ.png
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Òì³£³ö¿âÉú³ÉÈÎÎñ±¨ÎÄ.txt
ÎļþÒÑɾ³ý
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/ÖÇ»ãÆæ²ß¹ùµê¼âɽÏîĿͨÇåµ¥1031.xls
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Á÷³Ìͼ1.png
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Á÷³Ìͼ2.png
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Á÷³Ì˵Ã÷.doc
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/×éÁ¢»úÉÏÁÏÊ£Óà²ãÊý»ØÐ´£¨DB28£©.png
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¹ùµê-²úÆ·89³§Á¢¿â²¼¾Öͼ(1).dwg
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¹ùµê-°Ë³§×Ô¶¯»¯ÏîÄ¿Á¢Ìå¿â¼¼ÊõЭÒé0302(2).docx
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¹ùµêÏîĿʵʩ¹¤×÷°²Åż°½ø¶È¹ÜÀí±í-µÚ1ÖÜ-2024.11.13.xlsx
Binary files differ