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); } } } }
/// <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}"); } }
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秒过期 } } }
/// <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); }
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()); }
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}"); }
/// <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; } }