/// <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"]; } }
private void Client_BadBlockDetected(string blockName, OPCQualities status) { lblStatus.Text = blockName + "连接品质不正常,代码为 " + status; }
/// <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); }
/// <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"); } }
private static void Client_BadBlockDetected(string blockName, OPCQualities status) { Console.Write(blockName + " quality is " + status.ToString()); }