林豪 左 3 年之前
父節點
當前提交
0cddf0c24b

+ 4 - 3
DBHelper/DBHelper.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net5.0</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -9,8 +9,9 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.5" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.5" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.4" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.4" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.4" />
   </ItemGroup>
 
   <ItemGroup>

二進制
DLL/PLC.Siemens.dll


+ 41 - 18
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -55,7 +55,7 @@ namespace WCS.Service.Extensions
             catch (Exception ex)
             {
                 Ltc.Log(ex.GetBaseException().Message);
-                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}--{ex.StackTrace}");
+                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}");
                 //LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, WCS_EXCEPTIONTYPE.无.ToString());
             }
             finally
@@ -67,7 +67,7 @@ namespace WCS.Service.Extensions
         /// <summary>
         /// 当前设备可用的RGV
         /// </summary>
-        private List<RGVDevice> RgvList
+        public List<RGVDevice> RgvList
         {
             get
             {
@@ -75,6 +75,18 @@ namespace WCS.Service.Extensions
             }
         }
 
+        /// <summary>
+        /// 当前设备环穿组
+        /// </summary>
+        private List<StationLocation> LoncationList
+        {
+            get
+            {
+                var dev = StationLocation.ALLlocations.FirstOrDefault(v => v.Station == Entity.CODE);
+                return StationLocation.ALLlocations.Where(v => v.PLC == dev.PLC).ToList();
+            }
+        }
+
         /// <summary>
         /// 设备组自身的位置
         /// </summary>
@@ -158,6 +170,16 @@ namespace WCS.Service.Extensions
             return Math.Abs((Position - rgv.Position + Length) % Length);
         }
 
+        /// <summary>
+        /// 计算两个站台之间的距离
+        /// </summary>
+        /// <param name="rgv"></param>
+        /// <returns></returns>
+        public float Distance(StationDeviceGroup dev)
+        {
+            return Math.Abs((Position - dev.Position + Length) % Length);
+        }
+
         /// <summary>
         /// 当前RGV
         /// </summary>
@@ -179,7 +201,7 @@ namespace WCS.Service.Extensions
             var rgvs = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
             var code = Entity.CODE.Replace("G", "").ToShort();
             if (rgvs.Any(v => v.Data.DestPosition_1 == code && v.Data.SystemStatus != RGVRunStatus.空闲))
-                throw new Exception(LogHelper.SpliceLogMessage("已有RGV执行中", Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
+                throw new WarnException("已有RGV执行中");
             foreach (var item in Items)
             {
                 if (item.Data3.Status.HasFlag(StationStatus.运行状态位)) return false;
@@ -267,7 +289,7 @@ namespace WCS.Service.Extensions
             catch (Exception ex)
             {
                 Ltc.Log(ex.GetBaseException().Message);
-                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}--{ex.StackTrace}");
+                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}");
                 //LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, WCS_EXCEPTIONTYPE.无.ToString());
             }
             finally
@@ -366,7 +388,7 @@ namespace WCS.Service.Extensions
             catch (Exception ex)
             {
                 Ltc.Log(ex.GetBaseException().Message);
-                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}--{ex.StackTrace}");
+                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}");
                 //LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, WCS_EXCEPTIONTYPE.无.ToString());
             }
             finally
@@ -427,8 +449,9 @@ namespace WCS.Service.Extensions
         /// <param name="addr">目标地址</param>
         public void Move(StationDeviceGroup addr)
         {
+            Data.TaskID_1 = addr.Entity.CODE.Replace("G", "").ToShort();
             Data.TaskType_1 = RGVTaskType.移动;
-            Data.DestPosition_1 = addr.Entity.CODE.ToShort();
+            Data.DestPosition_1 = addr.Entity.CODE.Replace("G", "").ToShort();
             Data.Trigger_1++;
         }
 
@@ -613,7 +636,7 @@ namespace WCS.Service.Extensions
             catch (Exception ex)
             {
                 Ltc.Log(ex.GetBaseException().Message);
-                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}--{ex.StackTrace}");
+                InfoLog.INFO_ERROR($"[{Entity.CODE}]--{ex.Message}");
                 //LogHelper.AddWCS_EXCEPTION(ex.Message, Entity.CODE, WCS_EXCEPTIONTYPE.无.ToString());
             }
             finally
@@ -796,17 +819,17 @@ namespace WCS.Service.Extensions
                 new StationLocation("G1214",0,"RGV1",0),
                 new StationLocation("G1222",0,"RGV1",0),
                 new StationLocation("G1164",0,"RGV1",0),
-                new StationLocation("G1285",0,"RGV3",0),
-                new StationLocation("G1401",0,"RGV3",0),
-                new StationLocation("G1294",0,"RGV3",0),
-                new StationLocation("G1410",0,"RGV3",0),
-                new StationLocation("G1303",0,"RGV3",0),
-                new StationLocation("G1417",0,"RGV3",0),
-                new StationLocation("G1412",0,"RGV3",0),
-                new StationLocation("G1426",0,"RGV3",0),
-                new StationLocation("G1332",0,"RGV3",0),
-                new StationLocation("G1391",0,"RGV3",0),
-                new StationLocation("G1399",0,"RGV3",0),
+                new StationLocation("G1",486326,"RGV3",0),
+                new StationLocation("G2",694439,"RGV3",0),
+                new StationLocation("G3",789931,"RGV3",0),
+                new StationLocation("G4",961595,"RGV3",0),
+                new StationLocation("G5",1013350,"RGV3",0),
+                new StationLocation("G6",1069938,"RGV3",0),
+                new StationLocation("G7",1126338,"RGV3",0),
+                new StationLocation("G8",1178355,"RGV3",0),
+                new StationLocation("G9",1256875,"RGV3",0),
+                new StationLocation("G10",1313239,"RGV3",0),
+                new StationLocation("G11",1369970,"RGV3",0),
             });
         }
 

+ 3 - 0
Projects/永冠OPP/WCS.Service/Log/InfoLog.cs

@@ -1,4 +1,5 @@
 using Logs;
+using System;
 using System.Collections.Generic;
 
 namespace WCS.Service.Log
@@ -72,6 +73,7 @@ namespace WCS.Service.Log
         public static void INFO_ERROR(string msg)
         {
             Log.Error(msg, "INFO_ERROR");
+            Console.WriteLine(msg);
         }
 
         /// <summary>
@@ -81,6 +83,7 @@ namespace WCS.Service.Log
         public static void INFO_WARN(string msg)
         {
             Log.Warn(msg, "INFO_WARN");
+            Console.WriteLine(msg);
         }
 
         /// <summary>

+ 5 - 2
Projects/永冠OPP/WCS.Service/WCS.Service.csproj

@@ -20,8 +20,7 @@
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
     <PackageReference Include="Microsoft.EntityFrameworkCore.DynamicLinq" Version="6.2.18" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.3" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.3" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.4" />
     <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.3">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@@ -47,4 +46,8 @@
       <HintPath>DLL\PLCConnecter.dll</HintPath>
     </Reference>
   </ItemGroup>
+
+  <ItemGroup>
+    <Folder Include="Log\" />
+  </ItemGroup>
 </Project>

+ 2 - 0
Projects/永冠OPP/WCS.Service/Worker.cs

@@ -101,6 +101,8 @@ namespace WCS.Service
                 Device.AddFlag(DF.一楼SRM取货, "1040", "1041", "1042", "1043", "1049", "1050", "1051", "1052");
                 Device.AddFlag(DF.一楼SRM取货, "1058", "1059", "1060", "1061", "1067", "1068");
                 Device.AddFlag(DF.涂布RGV, "RGV9", "RGV10", "RGV11", "RGV12", "RGV13", "RGV14");
+                Device.AddFlag(DF.涂布RGV取货站台, "G2", "G3", "G5", "G7", "RGV9", "G11");
+                Device.AddFlag(DF.涂布RGV放货站台, "G1", "G4", "G6", "G8", "G10");
                 Device.AddFlag(DF.拉膜RGV, "RGV1", "RGV2", "RGV3", "RGV4", "RGV5", "RGV6", "RGV7");
 
                 #endregion 设备扩展数据配置

+ 62 - 59
Projects/永冠OPP/WCS.Service/Works/RGV/RGVWorks.cs

@@ -3,6 +3,7 @@ using System;
 using System.Linq;
 using WCS.Core;
 using WCS.Entity;
+using WCS.Entity.Protocol.RGV;
 using WCS.Service.Extensions;
 using WCS.Service.Handlers;
 
@@ -74,66 +75,68 @@ namespace WCS.Service.Works.RGV
         }
     }
 
-    //[WorkTitle(typeof(RGVHandler), "直穿RGV")]
-    //public class 直穿RGV : DeviceWork<RGVDevice>
-    //{
-    //    private readonly string ConvGroup_1030 = "G1030";
-    //    private readonly string RGV8 = "RGV8";
-
-    //    protected override void Do(RGVDevice rgv)
-    //    {
-    //        //RGV是自动且空闲的
-    //        if (rgv.Data2.WorkMode != WCS.Entity.Protocol.RGV.RGVMode.自动) return;
-    //        if (rgv.Data2.SystemStatus != WCS.Entity.Protocol.RGV.RGVRunStatus.空闲) return;
-
-    //        var obj = Device.Find(ConvGroup_1030).Create<StationDeviceGroup>();
-
-    //        if (obj.WhetherToExecute()) return;
-
-    //        //筛选出有任务号和起始及目标地址的设备
-    //        var dev = obj.RGVGetTaskedDevice() ?? throw new Exception(LogHelper.SpliceLogMessage("无可用任务", rgv.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
-
-    //        DB.Do(db =>
-    //        {
-    //            var taskids = dev.Select(v => v.Data2.Tasknum);
-    //            var tasks = db.Default.Set<WCS_TASK>().Where(p => taskids.Contains(p.ID));
-    //            if (tasks.GroupBy(p => p.TaskGroupKey).Count() > 1)
-    //                throw new Exception(LogHelper.SpliceLogMessage("任务组ID不一致", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
-    //            if (tasks.GroupBy(p => p.TaskGroupKey).Count() == 0)
-    //                throw new Exception(LogHelper.SpliceLogMessage("无任务组ID", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
-    //            var gw1 = obj.Items.ToArray()[0];
-    //            var gw2 = obj.Items.ToArray()[1];
-    //            if (gw1.Data2.Tasknum != 0 && gw2.Data2.Tasknum != 0)
-    //            {
-    //                if (gw1.Data2.Goodsend != gw2.Data2.Goodsend) throw new Exception(LogHelper.SpliceLogMessage($"{obj.Entity.Code}目标地址不一致", obj.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
-    //            }
-    //            rgv.Data.TaskID_1 = gw1.Data2.Tasknum;
-    //            rgv.Data.TaskID_2 = gw2.Data2.Tasknum;
-    //            if (gw1.Data2.Tasknum != 0)
-    //            {
-    //                rgv.Data.StartPosition_1 = gw1.Entity.CODE.ToShort();
-    //                rgv.Data.DestPosition_1 = gw1.Data2.Goodsend;
-    //            }
-    //            else
-    //            {
-    //                rgv.Data.StartPosition_1 = gw1.Entity.CODE.ToShort();
-    //                rgv.Data.DestPosition_1 = gw2.Data2.Goodsend;
-    //            }
-    //            rgv.Data.Trigger_1++;
+    [WorkTitle(typeof(RGVHandler), "涂布环穿取货")]
+    public class 涂布环穿取货 : Work<StationDeviceGroup>
+    {
+        protected override void Do(StationDeviceGroup obj)
+        {
+            obj.EX(obj =>
+            {
+                //是否有车
+                var rgv = obj.CurrentRGV();
+                if (rgv != null) //有车
+                {
+                    //是否有取货任务
+                }
+                else //没车
+                {
+                    //有没有目标地址是自己这的小车 任务未完成 未到站
+                    var moveRgv = obj.RgvList.Any(v => v.Data2.DestPosition_1 == obj.Entity.CODE.Replace("G", "d").ToShort()
+                                                     && !v.Data2.Finish_1 && !v.Data2.ToSition_1);
+                    if (moveRgv) return;
+                    //找到一个空闲且离自己最近的一个RGV
+                    var a = obj.RgvList.Where(v => v.Data2.SystemStatus == RGVRunStatus.空闲 && v.Data2.WorkMode == RGVMode.自动);
+                    var z = a.OrderBy(v => obj.Distance(v)).FirstOrDefault();
+                    z.Move(obj);
+                }
+            });
+        }
 
-    //            foreach (var task in tasks)
-    //            {
-    //                var msg = $"下达从{rgv.Data.StartPosition_1}移动至{ rgv.Data.DestPosition_1}的RGV PLC指令。";
-    //                msg += $"[{ task.ID}][{rgv.Data.StartPosition_1}][{rgv.Data.DestPosition_1}[{ rgv.Data.Trigger_1}]";
+        protected override bool SelectDevice(WCS_DEVICE dev)
+        {
+            return dev.Is(DF.涂布RGV取货站台);
+        }
+    }
 
-    //                task.CreateStatusLog(db, msg, this.GetType());
-    //            }
-    //        });
-    //    }
+    [WorkTitle(typeof(RGVHandler), "涂布环穿放货")]
+    public class 涂布环穿放货 : Work<StationDeviceGroup>
+    {
+        protected override void Do(StationDeviceGroup obj)
+        {
+            obj.EX(obj =>
+            {
+                //是否有车
+                var rgv = obj.CurrentRGV();
+                if (rgv != null) //有车
+                {
+                    if (rgv.Data.Trigger_1 != rgv.Data2.Trigger_2) throw new WarnException($"等待执行{rgv.Data2.TaskID_1 - rgv.Data2.TaskID_2},凭证号不一致");
+                    if (rgv.Data2.WorkMode != RGVMode.自动) throw new DoException("非自动");
+                    if (rgv.Data2.SystemStatus != RGVRunStatus.空闲) throw new DoException("非空闲");
+                    if (!rgv.Data2.Finish_1) throw new WarnException("任务未完成");
+                    if (!rgv.Data2.ToSition_1) throw new WarnException("RGV未到站");
+                    if (rgv.Data2.PH_Status_1) throw new WarnException("有光电");
+                    //找到最近的一个取货站台
+                    var q = Device.Where(v => v.Is(DF.涂布RGV取货站台)).Select(v => v.Create<StationDeviceGroup>()); ;
+                    //计算自己与每一个取货站台的距离
+                    var z = q.OrderBy(v => obj.Distance(v)).FirstOrDefault();
+                    rgv.Move(z);
+                }
+            });
+        }
 
-    //    protected override bool SelectDevice(WCS_DEVICE dev)
-    //    {
-    //        return dev.CODE == RGV8;
-    //    }
-    //}
+        protected override bool SelectDevice(WCS_DEVICE dev)
+        {
+            return dev.Is(DF.涂布RGV取货站台);
+        }
+    }
 }

+ 1 - 1
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -363,7 +363,7 @@ namespace WCS.Service.Works.SRM
 
         protected override bool SelectDevice(WCS_DEVICE dev)
         {
-            return dev.CODE.StartsWith("SRM");
+            return dev.Is(DF.SRM);
         }
     }
 }

+ 2 - 2
WCS.Core/Device.cs

@@ -167,8 +167,8 @@ public enum DF
     月台 = 1 << 5,
     涂布RGV = 1 << 6,
     拉膜RGV = 1 << 7,
-    备用3 = 1 << 8,
-    备用4 = 1 << 9,
+    涂布RGV取货站台 = 1 << 8,
+    涂布RGV放货站台 = 1 << 9,
     备用5 = 1 << 10,
     备用6 = 1 << 11,
     备用7 = 1 << 12,

+ 4 - 4
WCS.Core/EntityEx.cs

@@ -31,11 +31,11 @@ namespace WCS.Core
         /// 添加进行中的设备
         /// </summary>
         /// <param name="e"></param>
-        public void AddExDevice(string e)
+        public static void AddExDevice(string e)
         {
             //lock (Addobj)
             //{
-                ExDevice.Add(e);
+            ExDevice.Add(e);
             //}
         }
 
@@ -43,11 +43,11 @@ namespace WCS.Core
         /// 移除进行中的设备
         /// </summary>
         /// <param name="e"></param>
-        public void RemoveExDevice(string e)
+        public static void RemoveExDevice(string e)
         {
             //lock (removeobj)
             //{
-                ExDevice.Remove(e);
+            ExDevice.Remove(e);
             //}
         }
 

+ 1 - 1
WCS.Core/WCS.Core.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net5.0</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">