Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
        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;
            }
        }
Beispiel #7
0
 public void SetGroupActive(bool value)
 {
     TheGrp.SetEnable(true);
     TheGrp.Active = value;
 }