/// <summary> /// 根据若干个OPC组信息创建OPC组 /// </summary> /// <param name="groups"></param> /// <param name="message"></param> /// <returns></returns> public bool CreateGroups(IEnumerable <OpcGroupInfo> groups, out string message) { message = string.Empty; if (groups == null || groups.Count() == 0) { //message = "未提供任何OPC组信息,无法创建OPC组"; return(false); } try { List <OpcGroupInfo> groupList = groups.ToList(); //转换为新List对象,防止枚举改变对象时出现未知影响 foreach (var groupInfo in groupList) { if (groupInfo == null) { continue; } string name = groupInfo.GroupName; //OPC组名称 List <OpcItemInfo> itemInfos = groupInfo.ListItemInfo; //OPC项信息集合 try { OpcServer.OPCGroups.Remove(name); } catch (Exception) { } //试着移除已存在组 #region 新添加组方法 groupInfo.SetOpcGroup(OpcServer.OPCGroups, name); //重新添加OPC组 groupInfo.SetGroupProperty(GroupUpdateRate, IsGroupActive, IsGroupSubscribed); //TODO 假如OPC组信息中已设置OPC项信息,则根据这些OPC项信息添加OPC项,否则创建组之后调用SetItems方法 groupInfo.SetItems(itemInfos, out message); if (!ListGroupInfo.Contains(groupInfo)) { ListGroupInfo.Add(groupInfo); } #endregion #region 旧添加组方法 ////初始化OPC组信息并设置OPC组属性、添加OPC项 //OpcGroupInfo group = new OpcGroupInfo(OpcServer.OPCGroups, name); //group.SetGroupProperty(GroupUpdateRate, IsGroupActive, IsGroupSubscribed); ////假如OPC组信息中已设置OPC项信息,则根据这些OPC项信息添加OPC项,否则创建组之后调用SetItems方法 //group.SetItems(itemInfos, out message); ////假如List中已存在,则移除 //if (ListGroupInfo.Contains(groupInfo)) //{ // ListGroupInfo.Remove(groupInfo); // groupInfo.Dispose(); //} //ListGroupInfo.Add(group); #endregion } } catch (Exception ex) { message = "创建组出现错误:" + ex.Message; return(false); } return(true); }
/// <summary> /// 与OPC服务断开 /// </summary> public void DisconnectRemoteServer() { if (Thread_Reconn != null) { Thread_Reconn.Abort(); Thread_Reconn = null; } if (!OpcConnected) { return; } if (OpcServer != null) { OpcServer.OPCGroups.RemoveAll(); OpcServer.Disconnect(); OpcServer = null; ListGroupInfo.ForEach(g => g.Dispose()); ListGroupInfo.Clear(); } OpcConnected = false; }