From ab94f070d797edbe927d7d58a460cc4eddf48b03 Mon Sep 17 00:00:00 2001
From: jace.tang <1536884497@qq.com>
Date: 星期一, 13 六月 2022 10:58:40 +0800
Subject: [PATCH] 1.添加检测异常抛出时图片保存动作

---
 OPC.cs |   47 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/OPC.cs b/OPC.cs
index 9b69299..fa64128 100644
--- a/OPC.cs
+++ b/OPC.cs
@@ -22,7 +22,8 @@
         private string serverIP;
         private GroupProperty groupProperty;
 
-        public ListenEventCreater listenEventCreater;
+        //public ListenEventCreater listenEventCreater;
+        public event Action<Item, int> OnReadItemValueChanged;
         public class Item
         {
             public string name;
@@ -36,6 +37,7 @@
 
         public Dictionary<string, Item> itemReadDict;
         public Dictionary<string, Item> itemWriteDict;
+        public Dictionary<int, Item> itemReadHandleDict;
 
         public OPC(opcConfig opcConfig)
         {
@@ -92,11 +94,11 @@
                 SetGroupProperty(opcReadGroup);
                 SetGroupProperty(opcWriteGroup);
 
-                listenEventCreater = new ListenEventCreater();
+                //listenEventCreater = new ListenEventCreater();
                 opcReadGroup.DataChange+=new DIOPCGroupEvent_DataChangeEventHandler(opcReadGroup_DataChange);
 
-                SetHandles(opcReadGroup, itemReadDict);
-                SetHandles(opcWriteGroup, itemWriteDict);
+                SetHandles(opcReadGroup, itemReadDict, out itemReadHandleDict);
+                SetHandles(opcWriteGroup, itemWriteDict, out _);
                 CommonUtil.WriteLog(LogType.Inf, "OPC Server 缁勫垪琛ㄥ垱寤哄畬鎴�");
                 return true;
             }
@@ -161,17 +163,31 @@
         /// <param name="TimeStamps"></param>
         private void opcReadGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
         {
+            //for (int i = 1; i <= NumItems; i++)
+            //{
+            //    foreach (Item item in itemReadDict.Values)
+            //    {
+            //        if (item.clientHandle == Convert.ToInt32(ClientHandles.GetValue(i)))
+            //        {
+            //            itemReadDict[item.name].value = Convert.ToInt32(ItemValues.GetValue(i));
+            //            string state = item.name; // 鏀瑰彉鐨刬tem鐨勫悕绉�
+            //            item.value = ItemValues.GetValue(i);
+            //            listenEventCreater.ChangeValue(new EventData(item));
+            //        }
+            //    }
+            //}
+
             for (int i = 1; i <= NumItems; i++)
             {
-                foreach (Item item in itemReadDict.Values)
+                int clientHandle = Convert.ToInt32(ClientHandles.GetValue(i));
+                if (itemReadHandleDict.ContainsKey(clientHandle))
                 {
-                    if (item.clientHandle == Convert.ToInt32(ClientHandles.GetValue(i)))
-                    {
-                        itemReadDict[item.name].value = Convert.ToInt32(ItemValues.GetValue(i));
-                        string state = item.name; // 鏀瑰彉鐨刬tem鐨勫悕绉�
-                        item.value = ItemValues.GetValue(i);
-                        listenEventCreater.ChangeValue(new EventData(item));
-                    }
+                    var item = itemReadHandleDict[clientHandle];
+                    int itemValue = Convert.ToInt32(ItemValues.GetValue(i));
+                    item.value = itemValue;
+
+                    CommonUtil.WriteLog($"Receive PLC singal锛歂ame:{item.name},value:{itemValue}");
+                    OnReadItemValueChanged?.Invoke(item, itemValue);
                 }
             }
         }
@@ -182,17 +198,20 @@
         /// <param name="opcGroup"></param>
         /// <param name="itemDict"></param>
         /// <returns></returns>
-        private bool SetHandles(OPCGroup opcGroup, Dictionary<string, Item> itemDict)
+        private bool SetHandles(OPCGroup opcGroup, Dictionary<string, Item> itemDict, out Dictionary<int, Item> itemHandleDict)
         {
+            itemHandleDict = new Dictionary<int, Item>();
             OPCItems opcItems;
             OPCItem opcItem;
             opcItems = opcGroup.OPCItems;
             foreach (var item in itemDict.Values)
             {
                 item.clientHandle = itmHandleClient;
-                itmHandleClient++;
                 opcItem = opcItems.AddItem(item.name, item.clientHandle);
                 item.serverHandle = opcItem.ServerHandle;
+
+                itemHandleDict[itmHandleClient] = item;
+                itmHandleClient++;
             }
             return true;
         }

--
Gitblit v1.8.0