Exemple #1
0
        public object RemoteRead()
        {
            var server = Parent.Parent as OpcServer;

            Trace.Assert(server != null);

            object result = null;

            try
            {
                if (server.RunMode != RunMode.Release)
                {
                    throw new InvalidOperationException(GlobalId + "只能在发布模式下读取远程数据");
                }

                object quality;
                object timestamp;

                _item?.Read((short)OPCDataSource.OPCDevice, out result, out quality, out timestamp);

                Trace.WriteLine(GlobalId + " : " + result);
                LocalWrite(result);
            }
            catch (Exception e)
            {
                result = null;
                LocalWrite(null);
                this.Error("读取失败, 错误原因:" + e);
            }
            return(result);
        }
        /// <summary>
        /// 监视标签重载
        /// </summary>
        /// <param name="itemName"></param>
        public void MonitorOPCItem(string itemName)
        {
            try
            {
                if (!this.clientHandleDict.ContainsKey(itemName))
                {
                    //var bro = this.opcServer.CreateBrowser();
                    //bro.ShowBranches();
                    //foreach (var branch in bro)
                    //{
                    //    Console.WriteLine(branch.ToString());
                    //}

                    var index = this.clientNameList.Count;
                    OPCAutomation.OPCItem tempItem = opcAGroup.OPCItems.AddItem(itemName, index);
                    TagItem item = new TagItem()
                    {
                        Name          = itemName,
                        ClientHandler = index,
                        //ClientHandler = itemIndex,
                        ServerHandler = tempItem.ServerHandle,
                    };
                    this.clientNameList.Add(itemName);
                    this.clientHandleDict.Add(itemName, item);
                    object value, timeStamp, quality;
                    tempItem.Read(1, out value, out quality, out timeStamp);
                }
            }
            catch
            {
            }
        }
        public OPCChangeModel ReadValue(string name)
        {
            if (this.clientHandleDict.ContainsKey(name))
            {
                OPCAutomation.OPCItem item = opcAGroup.OPCItems.GetOPCItem(this.clientHandleDict[name].ServerHandler);
                object value, quality, timestamp;
                item.Read(2, out value, out quality, out timestamp);

                return(new OPCChangeModel()
                {
                    Name = name,
                    Quality = (TagQuality)((short)quality),
                    Value = item.Value,
                    TimeStamp = (DateTime)timestamp,
                });
            }
            return(null);
        }