分支自 SuZhouGuanHong/TaiYuanTaiZhong

dengjunjie
2024-05-11 84f3b1fc2e8f48bbe7749ed90362793b42e0edc4
优化入库逻辑,PLC地址读写失败重新连接
已修改6个文件
186 ■■■■ 文件已修改
代码管理/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/AutoUpdateWork.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/新文件夹/GetLocation.cs 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_WCS/WCSClient/PLCClient.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_WCS/WCSClient/Siemens/SiemensPLCClient.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/Common/Gantry.cs
@@ -473,11 +473,11 @@
                            #endregion
                            var AreaNr = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "W_AreaNr").First(), client);
                            //if (AreaNr == 0)
                            //{
                            //    client.WriteByOrder("W_Storage_update", true, name);//货位状态更新
                            //    continue;
                            //}
                            if (AreaNr == 0)
                            {
                                client.WriteByOrder("W_Storage_update", true, name);//货位状态更新
                                continue;
                            }
                            #region åˆ¤æ–­åŒºåŸŸå·æ˜¯å¦ä¸€è‡´
                            var area = client.ReadByOrder<Int16>("place_prog", name);//放料完成的区域号
@@ -560,6 +560,7 @@
                                    throw new Exception($"工单子表信息更新失败!车轮SN号:{Detail.SN}");
                                var Head = mes_HeadRepository.FindFirst(x => x.jobID == Detail.jobID);
                                Head.finishNum = Head.finishNum + 1;
                                if (Head.finishNum == Head.quantity) Head.FinishTime = DateTime.Now;
                                count = mes_HeadRepository.Update(Head, true);
                                if (count < 1)
                                    throw new Exception($"工单头表信息更新失败!工单号:{Head.jobID}");
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/Common/Pipeline.cs
@@ -595,7 +595,7 @@
                if (mes_Head != null)
                {
                    mes_Head.finishNum = mes_Head.finishNum + 1;
                    //freeDB.DataBase.Update<dt_mes_head>().SetSource(mes_Head).UpdateColumns(x => new { x.finishNum }).ExecuteAffrows();
                    if (mes_Head.finishNum == mes_Head.quantity) mes_Head.FinishTime = DateTime.Now;
                    mes_HeadRepository.Update(mes_Head, true);
                }
            }
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/AutoUpdateWork.cs
@@ -62,7 +62,7 @@
            Idt_inventoryRepository inventoryRepository = new dt_inventoryRepository(context);
            var mes_heads = mes_HeadRepository.Find(x => x.quantity == x.finishNum).ToList();
            var mes_heads = mes_HeadRepository.Find(x => x.quantity == x.finishNum /*|| x.CreateTime.AddDays(30) < DateTime.Now*/).ToList();
            #region æ£€æµ‹çº¿å·¥å•
            var mes_head_jcxs = mes_heads.Where(x => x.processCode == "28").ToList();
@@ -139,7 +139,7 @@
                    quantity = mes_Head.quantity,
                    expectedStartTime = mes_Head.expectedStartTime,
                    finishNum = mes_Head.finishNum,
                    FinishTime = DateTime.Now,
                    FinishTime = mes_Head.FinishTime,
                    maxDiameterDiff = mes_Head.maxDiameterDiff,
                    operatetype = operatetype,
                    processCode = mes_Head.processCode,
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/ÐÂÎļþ¼Ð/GetLocation.cs
@@ -36,135 +36,115 @@
                    if (agvtask.agv_Traytype == "LargeTray")
                        area1 = "4";
                    #region æŸ¥æ‰¾åº“å­˜
                    dt_inventory inventory = null;
                    inventory = inventoryRepository.Find(x => x.FigureNumber == agvtask.agv_materielid).OrderByDescending(x => x.OnlineTime).FirstOrDefault();
                    dt_stationinfo TargetLocation = null;
                    #region å¯»æ‰¾å·²åˆ†é…åŒå›¾å·å…¥åº“任务库位
                    TargetLocation = area1 == "4" ? stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.area == area1).FirstOrDefault() : stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "2" || x.area == "3")).FirstOrDefault();
                    if (TargetLocation != null)
                    {
                        TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault();
                        if (TargetLocation != null)
                        {
                            if (!stationinfoRepository.Find(x => x.line == TargetLocation.line && x.area == TargetLocation.area && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                                return TargetLocation;
                        }
                    }
                    #endregion
                    dt_stationinfo TargetLocation = null;
                    #region æŸ¥æ‰¾åº“å­˜
                    dt_inventory inventory = null;
                    inventory = area1 == "4" ? inventoryRepository.Find(x => x.FigureNumber == agvtask.agv_materielid && x.area == area1).OrderByDescending(x => x.OnlineTime).FirstOrDefault()
                        : inventoryRepository.Find(x => x.FigureNumber == agvtask.agv_materielid && (x.area == "2" || x.area == "3")).OrderByDescending(x => x.OnlineTime).FirstOrDefault();
                    #endregion
                    #region æ ¹æ®åº“存查找可入库空货位
                    if (inventory != null)
                    {
                        var station = stationinfoRepository.FindFirst(x => x.stationCode == inventory.stationCode);
                        #region å…¥å¤§æ‰˜ç›˜åº“区
                        //if (!string.IsNullOrEmpty(area1) && station.area != area1)
                        if (area1 == "4")
                        {
                            #region å¯»æ‰¾å·²åˆ†é…åŒå›¾å·å…¥åº“任务库位
                            TargetLocation = stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.area == area1).FirstOrDefault();
                            if (TargetLocation != null)
                            {
                                TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault();
                        //TargetLocation = stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && x.area == station.area).FirstOrDefault();
                        //if (TargetLocation != null)
                        //{
                        //    TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault();
                        //    if (TargetLocation != null)
                        //    {
                        //        if (!stationinfoRepository.Find(x => x.line == TargetLocation.line && x.area == TargetLocation.area && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                        //            return TargetLocation;
                        //    }
                        //}
                        #endregion
                        #region åˆ¤æ–­å½“前行是否还有空货位
                        TargetLocation = stationinfoRepository.Find(x => x.line == station.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == station.area).OrderBy(x => x.column).FirstOrDefault();
                                if (TargetLocation != null)
                                {
                                    if (!stationinfoRepository.Find(x => x.line == TargetLocation.line && x.area == TargetLocation.area && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                                        return TargetLocation;
                                }
                            }
                            #endregion
                            #region å¯»æ‰¾ç©ºè´§ä½
                            var TargetLocations1 = stationinfoRepository.Find(x => x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == area1).OrderBy(x => x.line).ThenBy(x => x.column).ToList();
                            foreach (var Location in TargetLocations1)
                            {
                                if (!stationinfoRepository.Find(x => x.line == Location.line && x.area == Location.area && x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.OutBusy.ToString()).Any()) return Location;
                            }
                            #endregion
                        }
                        //var TargetLocations1 = stationinfoRepository.Find(x => x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == station.area).OrderBy(x => x.line).ThenBy(x => x.column).ToList();
                        //foreach (var Location in TargetLocations1)
                        //{
                        //    if (stationinfoRepository.Find(x => x.line == Location.line && x.area == Location.area && x.stationType == agvtask.agv_materielid).Any())
                        //        if (!stationinfoRepository.Find(x => x.line == Location.line && x.area == Location.area && x.location_state == LocationStateEnum.OutBusy.ToString()).Any()) return Location;
                        //}
                        #endregion
                        if (station.area == "1")
                        {
                            TargetLocation = stationinfoRepository.Find(x => x.line == station.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == station.area).OrderBy(x => x.column).FirstOrDefault();//按行存放
                            if (TargetLocation != null)
                            {
                                if (!stationinfoRepository.Find(x => x.column == TargetLocation.column && x.area == TargetLocation.area /*&& x.enable*/ && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                                    return TargetLocation;
                            }
                        }
                        else
                        {
                            TargetLocation = stationinfoRepository.Find(x => x.line == station.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == inventory.area).OrderBy(x => x.column).FirstOrDefault();
                            if (TargetLocation != null)
                            {
                                if (!stationinfoRepository.Find(x => x.line == TargetLocation.line && x.area == TargetLocation.area && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                                    return TargetLocation;
                            }
                        }
                    }
                    #endregion
                    #region å¯»æ‰¾å·²åˆ†é…åŒå›¾å·å…¥åº“任务库位
                    TargetLocation = stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "1" || x.area == "2" || x.area == "3" || x.area == "4")).FirstOrDefault();
                    if (TargetLocation != null)
                    {
                        if (TargetLocation.area == "1")
                        {
                            TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault();//按行存放
                    //TargetLocation = stationinfoRepository.Find(x => x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.InBusy.ToString() && (x.area == "1" || x.area == "2" || x.area == "3" || x.area == "4")).FirstOrDefault();
                    //if (TargetLocation != null)
                    //{
                    //    if (TargetLocation.area == "1")
                    //    {
                    //        TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault();//按行存放
                            if (TargetLocation != null)
                            {
                                if (!stationinfoRepository.Find(x => x.column == TargetLocation.column && x.area == TargetLocation.area /*&& x.enable*/ && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                                    return TargetLocation;
                            }
                        }
                        else
                        {
                            TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault();
                            if (TargetLocation != null)
                            {
                                if (!stationinfoRepository.Find(x => x.line == TargetLocation.line && x.area == TargetLocation.area && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                                    return TargetLocation;
                            }
                        }
                    }
                    //        if (TargetLocation != null)
                    //        {
                    //            if (!stationinfoRepository.Find(x => x.column == TargetLocation.column && x.area == TargetLocation.area /*&& x.enable*/ && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                    //                return TargetLocation;
                    //        }
                    //    }
                    //    else
                    //    {
                    //        TargetLocation = stationinfoRepository.Find(x => x.line == TargetLocation.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == TargetLocation.area).OrderBy(x => x.column).FirstOrDefault();
                    //        if (TargetLocation != null)
                    //        {
                    //            if (!stationinfoRepository.Find(x => x.line == TargetLocation.line && x.area == TargetLocation.area && x.location_state == LocationStateEnum.OutBusy.ToString()).Any())
                    //                return TargetLocation;
                    //        }
                    //    }
                    //}
                    #endregion
                    #region å¯»æ‰¾ç©ºè´§ä½
                    var TargetLocations = stationinfoRepository.Find(x => x.location_state == LocationStateEnum.Empty.ToString() && x.enable && (x.area == "1" || x.area == "2" || x.area == "3" || x.area == "4")).OrderBy(x => x.line).ThenBy(x => x.column).ToList();
                    foreach (var Location in TargetLocations)
                    {
                        if (Location.area == "1")
                        {
                            if (stationinfoRepository.Find(x => x.column == Location.column && x.area == Location.area && x.stationType == agvtask.agv_materielid && x.location_state != LocationStateEnum.OutBusy.ToString()).Any()) return Location;
                        }
                        else
                        {
                            if (!stationinfoRepository.Find(x => x.line == Location.line && x.area == Location.area && x.stationType == agvtask.agv_materielid && x.location_state == LocationStateEnum.OutBusy.ToString()).Any()) return Location;
                        }
                    }
                    #region å¯»æ‰¾å¯¹åº”库区空货位
                    //var TargetLocations = area1 == "4" ? stationinfoRepository.Find(x => x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == "4").OrderBy(x => x.line).ThenBy(x => x.column).ToList()
                    //    : stationinfoRepository.Find(x => x.location_state == LocationStateEnum.Empty.ToString() && x.enable && (x.area == "2" || x.area == "3")).OrderBy(x => x.line).ThenBy(x => x.column).ToList();
                    //foreach (var Location in TargetLocations)
                    //{
                    //    if (stationinfoRepository.Find(x => x.line == Location.line && x.area == Location.area && x.stationType == agvtask.agv_materielid).Any())
                    //        if (!stationinfoRepository.Find(x => x.line == Location.line && x.area == Location.area && x.location_state == LocationStateEnum.OutBusy.ToString()).Any()) return Location;
                    //}
                    #endregion
                    #region æœªæ‰¾åˆ°åº“存或当前库存行已满,寻找新的一行
                    var area = GetArea(mesinfo.quantity, agvtask.agv_Traytype);
                    TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                    TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                    if (TargetLocation == null && area != "4")
                    {
                        if (area == "2")
                            area = "3";
                        else if (area == "3")
                            area = "2";
                        TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                        if (TargetLocation == null)
                            TargetLocation = stationinfoRepository.Find(x => x.line == 2 && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == "1").OrderBy(x => x.column).FirstOrDefault();
                        area = area == "2" ? "3" : "2";
                        TargetLocation = stationinfoRepository.Find(x => x.column == (area == "2" ? 1 : 2) && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                    }
                    #region æŸ¥çœ‹å½“前空货位后是否存在有料
                    if (TargetLocation != null)
                    {
                        if (TargetLocation.area == "1")
                        {
                            //第一行不为空货位则不能放置第二行
                            if (stationinfoRepository.Find(x => x.column == TargetLocation.column && x.area == TargetLocation.area && x.location_state != LocationStateEnum.Empty.ToString() && x.line == 1).Any()) TargetLocation = null;
                        }
                        else
                        {
                            if (stationinfoRepository.Find(x => x.line == TargetLocation.line && x.area == TargetLocation.area && x.location_state != LocationStateEnum.Empty.ToString()).Any()) TargetLocation = null;
                        }
                    }
                    #endregion
                    #endregion
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/WCSClient/PLCClient.cs
@@ -155,6 +155,7 @@
        {
            if (!operateResult.IsSuccess)
            {
                IsConnected = false;
                throw new Exception($"【Error】数据读取失败,指令{item.name},DB地址{item.dbAddress}\n错误信息:{operateResult.Message}");
            }
            return operateResult.Content;
@@ -171,6 +172,7 @@
        {
            if (!operateResult.IsSuccess)
            {
                IsConnected = false;
                throw new Exception($"【Error】数据读取失败,DB地址{dbAddress}\n错误信息:{operateResult.Message}");
            }
            return operateResult.Content;
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/WCSClient/Siemens/SiemensPLCClient.cs
@@ -51,6 +51,7 @@
            siemensPLCClient.Port = Port;
            siemensPLCClient.Slot = (byte)Slot;
            siemensPLCClient.ConnectTimeOut = 1000 * 3;//超时时间
            siemensPLCClient.ReceiveTimeOut = 1000 * 3;
            siemensPLCClient.ConnectClose();
            var coonRes = siemensPLCClient.ConnectServer();
            IsConnected = coonRes.IsSuccess;
@@ -256,6 +257,7 @@
                if (!result.IsSuccess)
                {
                    IsConnected = false;
                    WriteLog.Write_Log(PLCName, $"{PLCName}_Write", $"{dbAddress}写入失败," + result.Message);
                    throw new Exception($"{dbAddress}写入失败," + result.Message);
                }
@@ -325,6 +327,7 @@
                if (!result.IsSuccess)
                {
                    IsConnected = false;
                    WriteLog.Write_Log(PLCName, $"{PLCName}_Write", $"{orderName}写入失败," + result.Message, item);
                    throw new Exception($"{PLCName},{orderName}写入失败," + result.Message);
                }