public bool Disconnect() { var flag = false; try { if (mItemIDList != null) { var handlesSrv = HandleClients.Keys.ToArray <int>(); if (TheGrp != null) { int[] aE; TheGrp.RemoveItems(handlesSrv, out aE); TheGrp.DataChanged -= TheGrp_DataChanged; TheGrp.ReadCompleted -= TheGrp_ReadCompleted; TheGrp.WriteCompleted -= TheGrp_WriteCompleted; TheGrp.Remove(false); TheGrp = null; } } if (TheSrv != null) { TheSrv.Disconnect(); flag = true; TheSrv = null; } } finally { TheSrv = null; TheGrp = null; } return(flag); }
/// <summary> /// 写标签值 /// </summary> /// <param name="itemNames"> 标签名数组 </param> /// <returns>0:成功; 1:无标签名;2:有标签名为Null; 3:不能写只读标签 4:其他错误 </returns> public int Write(string[] itemNames) { var HandlesSrv = new int[itemNames.Length]; var ItemValues = new object[itemNames.Length]; int CancelID; var aE = new int[HandlesSrv.Length]; if ((itemNames == null) || (itemNames.Length == 0)) { return(1); } var i = 0; foreach (var s in itemNames) { if (Items[s].Value == null) { return(2); } if (Items[s].Access == AccessMode.R) { return(3); } HandlesSrv[i] = Items[s].HandleSrv; ItemValues[i] = Items[s].Value; i++; } try { TheGrp.AsyncWrite(HandlesSrv, ItemValues, 55667788, out CancelID, out aE); return(0); } catch (Exception) { return(4); } }
public void SetPLC_IP(string ip) { foreach (var c in Items.Values) { c.IPAddress = ip; } var err = new int[HandleClients.Count]; TheGrp.RemoveItems(HandleClients.Keys.ToArray(), out err); HandleClients.Clear(); AddItemIDs(Items); }
private OpcGroup AddGroup(string GroupName) { if (TheGrp != null) { return(TheGrp); } TheGrp = TheSrv.AddGroup(GroupName, false, mUpdateRate); TheGrp.DataChanged += TheGrp_DataChanged; TheGrp.ReadCompleted += TheGrp_ReadCompleted; TheGrp.WriteCompleted += TheGrp_WriteCompleted; TheGrp.SetEnable(true); TheGrp.Active = false; return(TheGrp); }
public void AddItemIDs(Dictionary <string, CItemID> IDs) { try { // string ItemA = "2:192.168.2.1:0201:0201,MB0,BYTE,RW"; var i = 0; var a = new OPCItemDef[IDs.Count]; OPCItemResult[] b; foreach (var ID in IDs.Values) { var nID = new OPCItemDef(); nID.ItemID = ID.ToString(); nID.Active = true; nID.HandleClient = 1000 + i; if (HandleClients == null) { HandleClients = new Dictionary <int, CItemID>(); } HandleClients.Add(nID.HandleClient, ID); a[i++] = nID; } TheGrp.AddItems(a, out b); if (b == null) { return; } for (i = 0; i < b.Length; i++) { if (b[i].Error != 0) { var s = Enum.GetName(typeof(OPCErrors), b[i].Error); throw (new Exception("加入标签失败!")); } } var names = IDs.Keys.ToList <string>(); for (i = 0; i < b.Length; i++) { IDs[names[i]].HandleSrv = b[i].HandleServer; } mItemIDList = IDs; TheGrp.SetEnable(true); TheGrp.Active = true; } catch (Exception) { throw; } }
public void ReadAll() { int CancelID; int[] aE; try { var HandlesSrv = new int[Items.Count]; aE = new int[Items.Count]; var names = Items.Keys.ToArray <string>(); for (var i = 0; i < HandlesSrv.Length; i++) { HandlesSrv[i] = Items[names[i]].HandleSrv; } TheGrp.AsyncRead(HandlesSrv, 55667788, out CancelID, out aE); } catch (Exception) { throw; } }
public void SetGroupActive(bool value) { TheGrp.SetEnable(true); TheGrp.Active = value; }