1,首先第一步,要连接OPC ,创建好 OPC对象。

        /// <summary>
/// 连接OPC
/// </summary>
       private string OPCIP=127.0.0.1;

       private string OPCName=PCAuto.OPCServer;
        public void Connect()
{
if (string.IsNullOrEmpty(OPCIP))
{
throw new ArgumentNullException("UaServer");
}
if (string.IsNullOrEmpty(OPCName))
{
throw new ArgumentNullException("UaServer");
}
if (CreateServer())
{
try
{
opcServer.Connect(OPCName, OPCIP);
}
catch (Exception ex)
{
MessageBox.Show("连接到OPC服务器失败!" + ex.Message);
}
}
m_IsConnected = true;
} /// <summary>
/// 创建OPC服务
/// </summary>
/// <returns></returns>
public bool CreateServer()
{
try
{
opcServer = new OPCServer();
}
catch (Exception ex)
{
MessageBox.Show("创建OPC服务出现异常:" + ex.Message);
return false;
}
return true;
}

2.窗体加载方法,我这里时winform 开发的程序。在窗体load事件加载 opc测点。使用 tree 控件。

        /// <summary>
/// 测点扫描加载监测点树
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
    private TreeView treeView_opcItem;
private void ScanItem_Load(object sender, EventArgs e)
{
try
{
OpcDaClient opcDaClient = new OpcDaClient();
TreeNode node = new TreeNode();
OPCBrowser opcBrowser = opcDaClient.RecurBrowse();
opcDaClient.ShowInTreeView(opcBrowser, node);
treeView_opcItem.Nodes.Add(node);
TreeNodeCollection nodes = treeView_opcItem.Nodes;
GetChildNode(nodes);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

3.用到的子方法

        /// <summary>
/// 创建opc节点浏览对象
/// </summary>
/// <returns></returns>
public OPCBrowser RecurBrowse()
{
try
{
return opcServer.CreateBrowser();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}
   /// <summary>
/// 展示OPC点号列表
/// </summary>
/// <param name="opcBrowser"></param>
/// <param name="node"></param>
public void ShowInTreeView(OPCBrowser opcBrowser, TreeNode node)
{
TreeNode treeNode = null;
opcBrowser.ShowBranches();
int count = opcBrowser.Count;
List<string> list = null;
if (opcBrowser.Count > 0)
{
list = new List<string>();
foreach (string item in opcBrowser)
{
list.Add(item);
}
foreach (string item2 in list)
{
treeNode = new TreeNode(item2);
treeNode.Tag = opcBrowser.GetItemID(item2);
node.Nodes.Add(treeNode);
opcBrowser.MoveDown(item2);
ShowInTreeView(opcBrowser, treeNode);
opcBrowser.MoveUp();
}
}
opcBrowser.ShowLeafs(Type.Missing);
int count2 = opcBrowser.Count;
foreach (string item3 in opcBrowser)
{
treeNode = new TreeNode(opcBrowser.GetItemID(item3));
treeNode.Tag = opcBrowser.GetItemID(item3);
node.Nodes.Add(treeNode);
}
}

4.获取当前节点下的子节点

        private void GetChildNode(TreeNodeCollection nodes)
{
string empty = string.Empty;
foreach (TreeNode node in nodes)
{
empty = node.Text;
if (node.Nodes.Count == 0)
{
itemNameList.Add(node.Text);
}
GetChildNode(node.Nodes);
}
}

5.效果展示

使用 OPC Browser 加载 OPC Server 监测点的更多相关文章

  1. 不同网段无法加载ArcGIS Server发布服务解决方法

    问题描述: ArcGIS Server 10发布的服务, (1)在相同网段的Desktop9.3和Engine 9.3程序下可以正常显示, (2)在不同网段Desktop9.3和Engine 9.3程 ...

  2. Cesium如何通过addImageryProvider方法加载SkylineGlobe Server发布的WMS服务

    某某某单位用SkylineGlobeServer7版本发布了好些服务,然后让我们在Cesium里都加载进来展示. 其实只要符合OGC标准的,加进来还是很容易的. 示例代码如下: function te ...

  3. Electron Browser加载iframe(webview src属性)

    browser或者webcontents 的高度与宽度比例对webview中src的页面结构也是有一定影响的

  4. ArcEngine中加载ArcGIS Server地图服务

    代码如下: private void addMapServerLayer(object sender, EventArgs e)  {             IActiveView pActiveV ...

  5. 天地图API加载ArcGIS Server服务

    发布的服务需要选择WMS功能 wmsLayer = new T.TileLayer.WMS("http://127.0.0.1:6080/arcgis/services/Demo/Defau ...

  6. Tomcat源码分析——SERVER.XML文件的加载与解析

    前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析的进行分析. 加载 server.xm ...

  7. 加载MySQL、Oracle、SQL Server 2000、SQL Server 2005及以上版本 的加载数据库驱动程序

    2018-11-04  20:00:59 开始 //getConnection(String url, String user, String password) //url:连接数据库的URL 3 ...

  8. 老调重弹:JDBC系列之<驱动加载原理全面解析) ----转

      最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者 ...

  9. esri-leaflet入门教程(5)- 动态要素加载

    esri-leaflet入门教程(5)- 动态要素加载 by 李远祥 在上一章节中已经说明了esr-leaflet是如何加载ArcGIS Server提供的各种服务,这些都是服务本身来决定的,API脚 ...

随机推荐

  1. CMU Convex Optimization(凸优化)笔记1--凸集和凸函数

    CMU凸优化笔记--凸集和凸函数 结束了一段时间的学习任务,于是打算做个总结.主要内容都是基于CMU的Ryan Tibshirani开设的Convex Optimization课程做的笔记.这里只摘了 ...

  2. zookeeper问题在公司可以 回到家用家里网不行 目前还没有解决

    Opening socket connection to server 192.168.1.193/192.168.1.193:2181. Will not attempt to authentica ...

  3. 大爽Python入门教程 0-3 安装Atom与配置Python环境

    大爽Python入门公开课教案 点击查看教程总目录 安装轻量级IDE--Atom 一 下载 下面步骤1,2中网络卡顿的朋友, 请直接查看步骤3来操作 1. 搜索官网 使用搜索引擎搜索Atom, 打开搜 ...

  4. liunx基础知识点2:文件操作命令、系统资源查询、权限赋予命令、安装命令、解压命令

  5. SCTL 涅槃重生:投入 RAL 的怀抱

    在<DistSQL:像数据库一样使用 Apache ShardingSphere>一文中,PMC 孟浩然为大家介绍了 DistSQL 的设计初衷和语法体系,并通过实战操作展示了一条 SQL ...

  6. 2014年3月5日C#训练

    using System; class Program { static void Main() { Console.WriteLine("请输入两个整数:"); int a = ...

  7. [loj2091]小星星

    (分别用$E_{T}$和$E_{G}$表示树和图的边集) 简单分析,可以发现题目即求排列$p_{i}$的数量,满足$\forall (x,y)\in E_{T},(p_{x},p_{y})\in E_ ...

  8. [loj3329]有根树

    题目即求$\min_{C}\max(|C|,\min_{x\notin C}w_{x})$,考虑将$w$从大到小排序,即为$\min_{1\le k\le n}\max(k,w_{k+1})$ 考虑若 ...

  9. SQL 跨实例操作

    SQL 跨实例操作 我使用的是 OpenDataSource 函数,假设你要在其他机器上访问 192.168.0.1 上的数据库: SELECT A.[Name], B.[SkillName], B. ...

  10. 【R】write.table输出数据带有行名?

    目录 问题 解决一 解决二 问题 这个问题应该很常见吧.R中输出数据框时,想要把行名和列名都输出.如果直接输出的话,输出的结果列名会往前移动一位,这显然不是我们想要的. 直接上例子: > a = ...