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