示例#1
0
 /// <summary>
 /// 当KEPWARE端OPCITEM的值发生变化时触发此事件
 /// </summary>
 /// <param name="blockName">数据块名称</param>
 /// <param name="status">数据块的Quality编码</param>
 protected virtual void OnBadBlockDetected(string blockName, OPCQualities status)
 {
     if (BadBlockDetected != null)
     {
         BadBlockDetected(blockName, status);
     }
 }
 private void _client_BadBlockDetected(string blockName, OPCQualities status)
 {
     if (status != OPCQualities.Good)
     {
         this.State      = ServiceState.Warning;
         picStatus.Image = imageList1.Images["yellow.png"];
     }
     else
     {
         this.State      = ServiceState.OK;
         picStatus.Image = imageList1.Images["green.png"];
     }
 }
示例#3
0
 private void Client_BadBlockDetected(string blockName, OPCQualities status)
 {
     lblStatus.Text = blockName + "连接品质不正常,代码为 " + status;
 }
示例#4
0
        /// <summary>
        /// 更新一组OPCItem值
        /// </summary>
        /// <param name="blocks">要更新的item列表</param>
        /// <returns>是否更新成功</returns>
        public bool SetValues(Dictionary <string, string> blocks)
        {
            if (blocks.Count == 0)
            {
                return(true);
            }
            // 组合xml请求
            string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><write>";

            foreach (string key in blocks.Keys)
            {
                xml += "<item name=\"" + key + "\" quality=\"\">" + blocks[key] + "</item>";
            }

            xml += "</write>";

            string cmd = "ESTSHOPCSVC.WRITES:" + xml;

            while (!this.Connected && !_socket.Connected)
            {
                this.Connect();
                Application.DoEvents();
                Thread.Sleep(20);
            }

            bool done = false;

            while (!done)
            {
                try
                {
                    _socket.Send(Encoding.UTF8.GetBytes(cmd));
                    done = true;
                }
                catch { this.Connect(); Application.DoEvents(); Thread.Sleep(20); }
            }

            this.WaitDataAvailableTimeout(_socket, this.Timeout);

            try {
                if (_socket.Available == 0)
                {
                    return(false);
                }
            }
            catch { return(false); }

            byte[] bytes = new byte[_socket.Available];

            done = false;
            while (!done)
            {
                try
                {
                    _socket.Receive(bytes, bytes.Length, SocketFlags.None);
                    done = true;
                }
                catch { this.Connect(); Application.DoEvents(); Thread.Sleep(20); }
            }


            string reply = Encoding.UTF8.GetString(bytes);

            // 解析服务器返回的信息
            bool ret = true;

            if (reply.StartsWith("ESTSHOPCSVC.RESULT:"))
            {
                xml = reply.Split(':')[1];
                try
                {
                    _doc.LoadXml(xml);
                }
                catch { return(false); }
                foreach (XmlNode node in _doc.DocumentElement.SelectNodes("item"))
                {
                    if (node.InnerText != blocks[node.Attributes.GetNamedItem("name").InnerText])
                    {
                        ret = false;
                    }
                    try {
                        OPCQualities quality = (OPCQualities)Enum.Parse(typeof(OPCQualities), node.Attributes.GetNamedItem("quality").InnerText);
                        if (quality != OPCQualities.Good)
                        {
                            OnBadBlockDetected(node.Attributes.GetNamedItem("name").InnerText, quality);
                        }
                    }
                    catch { }
                }
            }
            else
            {
                ret = false;
            }

            return(ret);
        }
示例#5
0
        /// <summary>
        /// 获取OPCItem值
        /// </summary>
        /// <param name="block">数据块名称</param>
        /// <returns>获得的值</returns>
        public string GetValue(string block)
        {
            while (!this.Connected && !_socket.Connected)
            {
                this.Connect();
                Application.DoEvents();
                Thread.Sleep(20);
            }

            bool done = false;

            while (!done)
            {
                try
                {
                    string cmd = "ESTSHOPCSVC.READ:" + block;
                    _socket.Send(Encoding.UTF8.GetBytes(cmd));
                    done = true;
                }
                catch { this.Connect(); Application.DoEvents(); Thread.Sleep(20); }
            }

            this.WaitDataAvailableTimeout(_socket, this.Timeout);

            try
            {
                if (_socket.Available == 0)
                {
                    return("ERROR");
                }
            } catch { return("ERROR"); }

            byte[] bytes = new byte[_socket.Available];

            done = false;
            while (!done)
            {
                try
                {
                    _socket.Receive(bytes, bytes.Length, SocketFlags.None);
                    done = true;
                }
                catch { this.Connect(); Application.DoEvents(); Thread.Sleep(20); }
            }


            string reply = Encoding.UTF8.GetString(bytes);

            if (reply.StartsWith("ESTSHOPCSVC.RESULT:"))
            {
                try
                {
                    OPCQualities quality = (OPCQualities)Enum.Parse(typeof(OPCQualities), reply.Split(':')[2]);
                    if (quality != OPCQualities.Good)
                    {
                        OnBadBlockDetected(block, quality);
                    }
                }
                catch { }
                return(reply.Split(':')[1]);
            }
            else
            {
                return("ERROR");
            }
        }
示例#6
0
 private static void Client_BadBlockDetected(string blockName, OPCQualities status)
 {
     Console.Write(blockName + " quality is " + status.ToString());
 }