林豪 左 пре 3 година
родитељ
комит
b7c0009a24

BIN
DLL/PLC.Siemens.dll


+ 37 - 0
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -7,6 +7,7 @@ using WCS.Entity;
 using WCS.Entity.Protocol;
 using WCS.Entity.Protocol.RGV;
 using WCS.Service.Helpers;
+using WCS.Service.Log;
 
 namespace WCS.Service.Extensions
 {
@@ -187,6 +188,24 @@ namespace WCS.Service.Extensions
 
             return false;
         }
+
+        public void EX(Action<StationDevice> act)
+        {
+            try
+            {
+                if (ExDevice.Any(v => v == Entity.CODE)) return;
+                AddExDevice(Entity.CODE);
+                act(this);
+            }
+            catch (Exception ex)
+            {
+                InfoLog.INFO_ERROR($"{ex.Source}----{ex.Message}");
+            }
+            finally
+            {
+                RemoveExDevice(Entity.CODE);
+            }
+        }
     }
 
     /// <summary>
@@ -524,4 +543,22 @@ namespace WCS.Service.Extensions
         public WCS_DEVICE taskIN;
         public Device<ISRM520, ISRM521, ISRM537> SRM;
     }
+
+    /// <summary>
+    /// 设备扩展
+    /// </summary>
+    public static class DeviceExtension
+    {
+        public static void EX(this StationDevice dev, Func<bool> func)
+        {
+            try
+            {
+                func();
+            }
+            catch (Exception ex)
+            {
+                InfoLog.INFO_ERROR($"{ex.Source}----{ex.Message}");
+            }
+        }
+    }
 }

+ 5 - 10
Projects/永冠OPP/WCS.Service/Handlers/ProductHandler.cs

@@ -1,21 +1,16 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.ComponentModel;
 using WCS.Core;
 
 namespace WCS.Service
 {
     [Description("产品")]
-    class ProductHandler: WorkHandler
+    internal class ProductHandler : WorkHandler
     {
         public override bool ParallelRun => false;
 
         protected override void DoWork(WorkInfo work)
-        { 
-            base.DoWork(work); 
+        {
+            base.DoWork(work);
         }
     }
-}
+}

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

@@ -74,6 +74,15 @@ namespace WCS.Service.Log
             Log.Error(msg, "INFO_ERROR");
         }
 
+        /// <summary>
+        /// 系统执行警告
+        /// </summary>
+        /// <param name="msg"></param>
+        public static void INFO_WARN(string msg)
+        {
+            Log.Warn(msg, "INFO_WARN");
+        }
+
         /// <summary>
         /// 堆垛机写入记录
         /// </summary>

+ 38 - 35
Projects/永冠OPP/WCS.Service/Works/Station/一楼入库.cs

@@ -25,44 +25,47 @@ namespace WCS.Service.Works.Station
 
         protected override void Do(StationDevice dev)
         {
-            var code = dev.Entity.CODE;
-            if (dev.WhetherToExecute(IstationRequest.扫码入库)) return;
-
-            var bcr = dev.Entity.BCR();
-            var barcode = bcr.Content.Trim('\r');
-            if (barcode == "") throw new Exception(LogHelper.SpliceLogMessage("扫码失败", dev.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
-
-            var info = WMS.I_WCS_GetInTask(barcode, dev.Entity.CODE);
-            var next = dev.Entity.CODE == Conv_1028 ? "1030" : "1031";
-            var station = dev.Entity.CODE;
-            DB.Do(db =>
+            dev.EX(dev =>
             {
-                var task = new WCS_TASK();
-                task.BARCODE = info.ContainerCode;
-                task.TYPE = TaskType.入库;
-                task.STATUS = TaskStatus.执行中;
-                task.ADDRFROM = dev.Entity.CODE;
-                task.ADDRTO = info.EndPostion;
-                task.STARTTIME = DateTime.Now;
-                task.UPDATEUSER = "WCS";
-                task.UPDATETIME = DateTime.Now;
-                task.WMSTASK = int.Parse(info.WMSTaskNum);
-                task.TaskGroupKey = info.TaskGroupKey;
-                task.ADDRNEXT = next;
-
-                db.Default.Set<WCS_TASK>().Add(task);
-                db.Default.SaveChanges();
-
-                dev.Data.Tasknum = task.ID;
-                dev.Data.Goodsstart = task.ADDRFROM.ToShort();
-                dev.Data.Goodsend = task.ADDRNEXT.ToShort();
-                dev.Data.CmdType = IstationCmdType.扫码入库;
-                dev.Data.VoucherNo++;
+                var code = dev.Entity.CODE;
+                if (dev.WhetherToExecute(IstationRequest.扫码入库)) return;
 
-                var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
-                msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
+                var bcr = dev.Entity.BCR();
+                var barcode = bcr.Content.Trim('\r');
+                if (barcode == "") throw new Exception(LogHelper.SpliceLogMessage("扫码失败", dev.Entity.CODE, WCS_EXCEPTIONTYPE.逻辑异常, GetType()));
 
-                task.CreateStatusLog(db, msg, this.GetType());
+                var info = WMS.I_WCS_GetInTask(barcode, dev.Entity.CODE);
+                var next = dev.Entity.CODE == Conv_1028 ? "1030" : "1031";
+                var station = dev.Entity.CODE;
+                DB.Do(db =>
+                {
+                    var task = new WCS_TASK();
+                    task.BARCODE = info.ContainerCode;
+                    task.TYPE = TaskType.入库;
+                    task.STATUS = TaskStatus.执行中;
+                    task.ADDRFROM = dev.Entity.CODE;
+                    task.ADDRTO = info.EndPostion;
+                    task.STARTTIME = DateTime.Now;
+                    task.UPDATEUSER = "WCS";
+                    task.UPDATETIME = DateTime.Now;
+                    task.WMSTASK = int.Parse(info.WMSTaskNum);
+                    task.TaskGroupKey = info.TaskGroupKey;
+                    task.ADDRNEXT = next;
+
+                    db.Default.Set<WCS_TASK>().Add(task);
+                    db.Default.SaveChanges();
+
+                    dev.Data.Tasknum = task.ID;
+                    dev.Data.Goodsstart = task.ADDRFROM.ToShort();
+                    dev.Data.Goodsend = task.ADDRNEXT.ToShort();
+                    dev.Data.CmdType = IstationCmdType.扫码入库;
+                    dev.Data.VoucherNo++;
+
+                    var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
+                    msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
+
+                    task.CreateStatusLog(db, msg, this.GetType());
+                });
             });
         }
     }

+ 2 - 1
Projects/永冠OPP/WCS.Service/config.json

@@ -13,7 +13,8 @@
         "INFO_ERROR": "Info_Error",
         "INFO_SRMINFO": "Info_SRMInfo",
         "INFO_SYTASKSTATUS": "Info_SyTaskTatus",
-        "INFO_WMSREQUEST": "INFO_WMSRequest"
+        "INFO_WMSREQUEST": "INFO_WMSRequest",
+        "INFO_ERROR": "Info_Error"
       }
     },
     {

+ 39 - 0
WCS.Core/EntityEx.cs

@@ -12,6 +12,45 @@ namespace WCS.Core
             get; private set;
         }
 
+        /// <summary>
+        /// 执行中的设备
+        /// </summary>
+        public static List<string> ExDevice { get; set; } = new List<string>();
+
+        /// <summary>
+        /// 添加锁
+        /// </summary>
+        private static readonly object Addobj = new object();
+
+        /// <summary>
+        /// 移除锁
+        /// </summary>
+        private static readonly object removeobj = new object();
+
+        /// <summary>
+        /// 添加进行中的设备
+        /// </summary>
+        /// <param name="e"></param>
+        public void AddExDevice(string e)
+        {
+            lock (Addobj)
+            {
+                ExDevice.Add(e);
+            }
+        }
+
+        /// <summary>
+        /// 移除进行中的设备
+        /// </summary>
+        /// <param name="e"></param>
+        public void RemoveExDevice(string e)
+        {
+            lock (removeobj)
+            {
+                ExDevice.Remove(e);
+            }
+        }
+
         public EntityEx(T entity)
         {
             this.Entity = entity;