c# Opc服务
2020-05-08 04:20
2815 查看
namespace OpcDal { public class opcclient { ItemModel m = new ItemModel(); private string[] ItemName { get; set; } private string[] valuess { get; set; } private opcclient() { //times = System.DateTime.Now.ToString(); //Console.WriteLine(times); try { Opcsere(); } catch (Exception) { throw; } } private static opcclient opcc = new opcclient(); public static opcclient GetOpcClient() { return opcc; } XmlDocument doc = new XmlDocument(); OpcDaServer opcsever; OpcDaGroup group; public bool Opcsere()//远程连接应用 { try { doc.Load(@"F:\work\che\OpcDal\Opc.xml"); } catch (Exception) { return false; throw; } string progIdOrClsid = "Techon.OpcDa30Server.1"; string hostname = "WIN-C3GNU98OINA";//WIN-C3GNU98OINA/192.122.0.98 opcsever = new OpcDaServer(progIdOrClsid, hostname); try { opcsever.Connect(); } catch (Exception ex) { return false; } Browser(opcsever); return Opcgroup(); } public bool Opcgroup(OpcDaGroupState state = null)//建opc组 { string name = "grop"; group = opcsever.AddGroup(name, state); group.IsActive = true; OpcDaItemDefinition[] definition = new OpcDaItemDefinition[brows.Count]; for (int i = 0; i < brows.Count; i++) { definition[i] = new OpcDaItemDefinition { ItemId = brows[i].ItemId, IsActive = true }; } // string item = string.Format(@"insert into opchttp values('{0}')", m.ItemId); OpcDaItemResult[] results = group.AddItems(definition); Read(group); return true; } private List<OpcDaBrowseElement> brows = new List<OpcDaBrowseElement>(); public string[] Browss() { string[] bs = new string[brows.Count]; for (int i = 0; i < brows.Count; i++) { bs[i] = brows[i].Name.ToString(); } return bs; } public OpcDaBrowserAuto Browser(OpcDaServer server)//远程浏览 { // 创建一个浏览器并递归浏览器所有元素 var browsers = new OpcDaBrowserAuto(server); brows.Clear(); BrowseChildren(browsers); return browsers; } public void BrowseChildren(IOpcDaBrowser browser, string itemId = null, int indent = 0) { //当itemid为空时,浏览根目录 OpcDaBrowseElement[] br = browser.GetElements(itemId); brows.AddRange(br.ToArray<OpcDaBrowseElement>()); // 输出 elements. foreach (OpcDaBrowseElement element in br) { // 跳过没有子元素的元素 if (!element.HasChildren) continue; // 输出元素的子元素 BrowseChildren(browser, element.ItemId, indent + 2); } } public async Task<OpcDaItemValue[]> AsyncRead(OpcDaGroup group) { values = await group.ReadAsync(group.Items); group.ValuesChanged += OnGroupValuesChang; group.UpdateRate = TimeSpan.FromMilliseconds(100); Checkvalue(); return values; } public List<OpcDaItemValue> Red=new List<OpcDaItemValue>(); public List<OpcDaItemValue>Blue=new List<OpcDaItemValue>(); public List<ItemModel> ims = new List<ItemModel>(); //跟新警告 public void Checkvalue() { foreach (var item in values) { var ite = ims.Find(delegate (ItemModel im) { return im.ItemId == item.Item.ItemId; }); decimal v1; try { v1 = decimal.Parse(item.Value.ToString()); } catch { if (bool.Parse(item.Value.ToString())) { v1 = 1; } else { v1 = 0; } } if (ite.Redmax < v1 || ite.Redmin > v1) { Red.Add(item); } else if (ite.Bluemax < v1 || ite.Bluemin > v1) { Blue.Add(item); } var max = MaxVue.Find(delegate (OpcDaItemValue im) { return im.Item.ItemId == item.Item.ItemId; }); var min = MinVue.Find(delegate (OpcDaItemValue im) { return im.Item.ItemId == item.Item.ItemId; }); if (Convert.ToDecimal(max.Value)<Convert.ToDecimal(item.Value)) { MaxVue.Add(item); } if(Convert.ToDecimal(min.Value) > Convert.ToDecimal(item.Value)) { MinVue.Add(item); } } } public List<OpcDaItemValue> MaxVue = new List<OpcDaItemValue>(); public List<OpcDaItemValue> MinVue = new List<OpcDaItemValue>(); public List<histors> ht = new List<histors>(); ItemModel itm = new ItemModel(); //存入数据库 public int ue(histors h) { foreach (var item in MaxVue) { var vue = MinVue.Find(delegate (OpcDaItemValue tor) { return tor.Item.ItemId == item.Item.ItemId; }); var sa = h.ImId; itm.Id = sa; itm.ItemId = item.Item.ItemId; h.MaxValue = Convert.ToDecimal(item.Value); h.MinValue = Convert.ToDecimal(vue.Value); h.hosTime = System.DateTime.Now.Date; ht.Add(h); ims.Add(itm); // ht.Add(h); } MaxVue = values.ToList<OpcDaItemValue>(); MinVue = values.ToList<OpcDaItemValue>(); string sql =string .Format("insert into histors(MaxValue,MinValue,hosTime,ImId) values(MaxValue={0},MinValue={1},hosTime='{2}',ImId={3})", h.MaxValue, h.MinValue, h.hosTime, h.ImId); var ss=Dapperhelper.dapper.Execute(sql); return ss; } public OpcDaItemValue[] Read(OpcDaGroup group) { values = group.Read(group.Items, OpcDaDataSource.Device); group.ValuesChanged += OnGroupValuesChang; group.UpdateRate = TimeSpan.FromMilliseconds(100); Checkvalue(); return values; } private OpcDaItemValue[] values; public class item { public item(string it, string va) { itemname = it; value = va; } public string itemname; public string value; } public item[] Getvalue()//读取 { item[] vs = new item[values.Length]; for (int i = 0; i < values.Length; i++) { item it = new item(values[i].Item.ItemId, values[i].Value.ToString()); vs[i] = it; } return vs; } public string Getvalue(int index) { return values[index].Value.ToString(); } public string Getvalue(string itemName) { foreach (var item in values) { if (item.Item.ItemId == itemName) { return item.Value.ToString(); } } return ""; } private void OnGroupValuesChang(object sender, OpcDaItemValuesChangedEventArgs args) { foreach (OpcDaItemValue value in args.Values) { // string ass= "select ItemId,Value,Quality,Timestamp from opchttp"; } } private OpcDaItem[] iten; public string[] Getiten() { string[] itemName = new string[iten.Length]; for (int i = 0; i < iten.Length; i++) { itemName[i] = iten[i].ItemId.ToString(); } return itemName; } public int[] Writes(string[] ItemName, object[] values)//修改设备的值 { iten = new OpcDaItem[ItemName.Length]; for (int i = 0; i < ItemName.Length; i++) { iten[i] = group.Items.FirstOrDefault(j => j.ItemId == ItemName[i]); } // Write values to the items synchronously. HRESULT[] results = group.Write(iten, values); if (results == null) { return Writes(ItemName, values); } int[] re = { 0, 0 }; foreach (HRESULT i in results) { if (i.Succeeded) { re[0] += 1; } else { re[1] += 1; } } Read(group); return re; } public async Task<int[]> Asyncwrite(string[] ItemName, object[] values) { iten = new OpcDaItem[ItemName.Length]; for (int i = 0; i < ItemName.Length; i++) { iten[i] = group.Items.FirstOrDefault(j => j.ItemId == ItemName[i]); } HRESULT[] results = await group.WriteAsync(iten, values); int[] re = { 0, 0 }; foreach (HRESULT i in results) { if (i.Succeeded) { re[0] += 1; } else { re[1] += 1; } } return re; } public bool reconntsever(opchost o) { try { doc.Load(@"F:\work\che\OpcDal\Opc.xml"); } catch (Exception) { return false; throw; } if (o.progIdOrClsid != "") { XmlNodeList elemet = doc.GetElementsByTagName("OpcDaServer"); elemet.Item(0).InnerText = o.progIdOrClsid; } if (o.hostname != "") { XmlNodeList elemet1 = doc.GetElementsByTagName("OpcDaServer"); elemet1.Item(0).InnerText = o.hostname; } doc.Save(@"F:\work\che\OpcDal\Opc.xml"); if (opcsever != null) { opcsever.Disconnect(); } return Opcsere(); } } }
- List item
相关文章推荐
- c#扩展WtOPCSvr.dll组件OPC SERVER服务,ScaleOPC.DLL
- C#程序安装.net服务(不使用InstallUtil.exe)
- C#制作Windows service服务系列二--演示一个定期执行的windows服务及调试
- Visual C#.net 查询windows索引服务目录
- c# 允许服务与桌面交互(转)
- Android实现TCP断点上传,后台C#服务实现接收
- 关于C#开发 windows服务进程
- 在服务中创建用户进程的方法(C#版)
- 如何在C#中实现OPC数据访问
- 使用C#启动服务类型为Disabled的windows服务
- C# 创建Windows服务。服务功能:定时操作数据库
- pop3服务连接详解 c#
- C# 编写Windows服务并设置为“允许服务与桌面交互”
- 发布一个C#+ADOMD.NET实现查看分析服务数据库信息的类对象
- 使用C#控制远程计算机的服务
- c#编写windows服务
- C#中控制IIS服务重启
- 基于C#实现Windows服务状态启动和停止服务的方法
- C# Builder构建Web服务和客户端
- C# windows 服务添加安装程序。