示例#1
0
        private void RecurBrowse(OPCBrowser opcBrowser, string[] filter)
        {
            //展开分支
            opcBrowser.ShowBranches();
            //展开叶子
            opcBrowser.ShowLeafs(true);

            foreach (object turn in opcBrowser)
            {
                foreach (var r in filter)
                {
                    if (turn.ToString().ToUpper().Contains(r.ToUpper()))
                    {
                        OpcData data = new OpcData
                        {
                            OpcName  = turn.ToString(),
                            OpcValue = "null",
                            OpcTime  = DateTime.Now.ToString()
                        };
                        Log.Info($"绑定的数据{data.OpcName}");
                        _bindingData.Add(data);
                    }
                }
            }
        }
示例#2
0
 /// <summary>
 /// 每次改变的数据都会被写入opcDatas集合,将当前句柄的值索引集合,然后操作数据curd
 /// </summary>
 /// <param name="TransactionID"></param>
 /// <param name="NumItems"></param>
 /// <param name="ClientHandles">客户端</param>
 /// <param name="ItemValues">数据值</param>
 /// <param name="Qualities">品质</param>
 /// <param name="TimeStamps">数据产生时的时间</param>
 private static void opcGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
 {
     for (int i = 1; i <= NumItems; i++)
     {
         string  opcName = dic[(int)ClientHandles.GetValue(i)];
         OpcData data    = opcDatas.FirstOrDefault(x => x.OpcName == opcName);
         //更新集合的数据
         if (data != null)
         {
             data.OpcValue = ItemValues.GetValue(i).ToString();
             data.OpcTime  = TimeStamps.GetValue(i).ToString();
             //data.OpcTime = DateTime.Now.ToString();
             //Console.WriteLine($"点位名:{opcName},读取值:{data.OpcValue},读取时间:{DateTime.Now.ToString()}");
             //OpcModel model = new OpcModel()
             //{
             //    DateTime = DateTime.Now.ToString(),
             //    OpcValue = data.OpcValue
             //};
             //string serializeToString = JsonSerializer.SerializeToString(model);
             //_client.Lists[opcName].Push(serializeToString);
             //_client.Expire(opcName, 50);//50秒过期
         }
     }
     foreach (OpcData opcData in opcDatas)
     {
         Console.WriteLine($"{opcData.OpcName}--{opcData.OpcValue}--{opcData.OpcTime}");
     }
 }
示例#3
0
        private void opcGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
        {
            if (_count <= 0)
            {
                UnloadEvent();
                return;
            }
            Log.Info($"首次加载程序_count:{_count}");
            --_count;
            Log.Info($"次数减过之后_count:{_count}");

            for (int i = 1; i <= NumItems; i++)
            {
                string  opcName = _dic[(int)ClientHandles.GetValue(i)];
                OpcData data    = _bindingData.FirstOrDefault(x => x.OpcName == opcName);
                if (data != null)
                {
                    data.OpcValue = ItemValues.GetValue(i).ToString();
                    Log.Info($"opcGroup_DataChange读取数据为:{data.OpcName}--{data.OpcValue}");
                    data.OpcTime = DateTime.Now.ToString();
                    OpcModel model = new OpcModel()
                    {
                        DateTime = DateTime.Now.ToString(),
                        OpcValue = data.OpcValue
                    };
                    string serializeToString = JsonSerializer.SerializeToString(model);
                    _client.Lists[opcName].Push(serializeToString);
                    _client.Expire(opcName, 50);//50秒过期
                }
            }
        }
示例#4
0
文件: OPC.cs 项目: LiLeIcode/OPCUtil
        /// <summary>
        /// 获取对应的分支点
        /// </summary>
        /// <param name="filter">点名字</param>
        public List <OpcData> RecurBrowse(string[] filter)
        {
            OPCBrowser     opcBrowser = _opcSerialInfo.OpcServer.CreateBrowser();
            List <OpcData> datas      = new List <OpcData>();

            //展开分支
            opcBrowser.ShowBranches();
            //展开叶子
            opcBrowser.ShowLeafs(true);

            foreach (object turn in opcBrowser)
            {
                foreach (var r in filter)
                {
                    if (turn.ToString().ToUpper().Contains(r.ToUpper()))
                    {
                        OpcData data = new OpcData
                        {
                            OpcName  = turn.ToString(),
                            OpcValue = "null",
                            OpcTime  = DateTime.Now.ToString()
                        };
                        datas.Add(data);
                    }
                }
            }
            return(datas);
        }
示例#5
0
 public IList <OpcItem> Get()
 {
     return(OpcData.GetOpcData()
            .Select(item =>
     {
         item.Read((short)OPCDataSource.OPCDevice, out object value, out object quality, out object timeStamp);
         return new OpcItem
         {
             ItemId = item.ItemID,
             Value = value,
             Quality = quality,
             TimeStamp = timeStamp
         };
     })
            .ToList());
 }
示例#6
0
        private void ReadOPCValue(int handle)
        {
            OPCItem bItem = _opcItems.GetOPCItem(handle);

            int[] temp = new int[2] {
                0, bItem.ServerHandle
            };
            Array serverHandles = (Array)temp;
            Array Errors;
            int   cancelID;

            _opcGroup.AsyncRead(1, ref serverHandles, out Errors, 2009, out cancelID);
            OpcData data = _bindingData.FirstOrDefault(x => x.OpcName == _serviceDic[handle]);

            data.OpcValue = bItem.Value.ToString();
            data.OpcTime  = DateTime.Now.ToString();
            Log.Info($"ReadOPCValue读取数据。。。{data.OpcName}-{data.OpcValue}-{ data.OpcTime}");
        }
示例#7
0
 /// <summary>
 /// 每次改变的数据都会被写入opcDatas集合,将当前句柄的值索引集合,然后操作数据curd
 /// </summary>
 /// <param name="TransactionID"></param>
 /// <param name="NumItems"></param>
 /// <param name="ClientHandles">客户端</param>
 /// <param name="ItemValues">数据值</param>
 /// <param name="Qualities">品质</param>
 /// <param name="TimeStamps">数据产生时的时间</param>
 private static void opcGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles,
                                         ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
 {
     for (int i = 1; i <= NumItems; i++)
     {
         string  opcName = dic[(int)ClientHandles.GetValue(i)];
         OpcData data    = opcDatas.FirstOrDefault(x => x.OpcName == opcName);
         //更新集合的数据
         if (data != null)
         {
             data.OpcValue = ItemValues.GetValue(i).ToString();
             data.OpcTime  = TimeStamps.GetValue(i).ToString();
             //data.OpcTime = DateTime.Now.ToString();
             //Console.WriteLine($"点位名:{opcName},读取值:{data.OpcValue},读取时间:{DateTime.Now.ToString()}");
             //OpcModel model = new OpcModel()
             //{
             //    DateTime = DateTime.Now.ToString(),
             //    OpcValue = data.OpcValue
             //};
             //string serializeToString = JsonSerializer.SerializeToString(model);
             //_client.Lists[opcName].Push(serializeToString);
             //_client.Expire(opcName, 50);//50秒过期
         }
     }
     Console.WriteLine("-----------------------------------------------------------------");
     //以下代码用于观察读取数据情况,数据会输出再d:\\OPCData.txt
     foreach (OpcData opcData in opcDatas)
     {
         Console.WriteLine($"{opcData.OpcName}--{opcData.OpcValue}--{opcData.OpcTime}");
     }
     using (FileStream fileStream = new FileStream("d:\\OPCData.txt", FileMode.Append))
     {
         using (StreamWriter writer = new StreamWriter(fileStream))
         {
             foreach (OpcData opcData in opcDatas)
             {
                 writer.WriteAsync("-----------------------------------------------------------------");
                 writer.WriteAsync($"{opcData.OpcName}--{opcData.OpcValue}--{opcData.OpcTime}\n");
             }
         }
     }
 }
        private static void PollData(UserContext context)
        {
            Polled = true;
            float f1 = 0.0f;
            float f2=1.1f;
            OpcData[] OPC = new OpcData[100];
            string[] test = new string[100];
            //while (true)
            //{
            //    foreach (var u in OnlineUsers.Keys)
            //    {
            //        u.Context.Send(r.ToString());
            //        Console.WriteLine("Data Send To : " +r.ToString());
            //    }
            //    Thread.Sleep(500);
            //    r=r+1.1f;
            var p1 = new OpcData
            {

                TagName = "Tag1",
                Name = "水温度",
                DataType = OpcDataType.FloatDataItem,
                Value = f1
            };
            var p2 = new OpcData
            {
                TagName = "Tag2",
                Name = "水压力",
                DataType = OpcDataType.FloatDataItem,
                Value = f2

            };
            for (int i = 0; i < 100;i++ )
            {
                    OPC[i] = new OpcData
                 {
                    TagName="Tag"+i.ToString(),
                    Name="",
                    DataType=OpcDataType.FloatDataItem,
                    Value=i
                 };
                    test[i] = i.ToString() + "testeste";
                    //var a=System.Runtime.InteropServices.Marshal.SizeOf(test);
            }

               // var r = new {OPC };
            while (Polled)
            {

               // var r = new[] {};
                foreach (var u in OnlineUsers.Keys)
                {
                    u.Context.Send(JsonConvert.SerializeObject(OPC));
                    Console.WriteLine("Data Send To : " + OPC);
                }
                //context.Send(JsonConvert.SerializeObject(r));
                Thread.Sleep(500);
               f1=f1+2.312f;

            }
        }